Webアプリケーションは、CGI (Common Gate Interface)
と呼ばれるプログラムをHTTPサーバから呼び出して実行されます。
CGIプログラムはどの言語で書いても構いませんが、以下のインターフェースを持ちます。
また、HTML出力に、HTML5やCSS5、Javascriptを使うことで、動的・インターラクティブなアプリケーションを作成することが可能です。
しかしながら、上記のようなプログラムをHTML/CSS/Javascriptを使って作成するには多くの知識とプログラムコードが必要となり、現在では、単純なWebアプリを除き、CGI形式が使われることは少なくなりました。上記の機能は、"フレームワーク"と呼ばれるWebアプリ用ライブラリにまとめられ、複雑なHTML/CSS/Javasciptのコードを隠ぺいし、簡単にプログラムを作成できるようなっています。
本ページでは、pythonを使ってWebアプリを作る際のメモをまとめます。pythonのフレームワークとしてはDjangoが有名ですが、多機能である一方、習得に必要な学習コストが大きいという問題があります。一方で、Flaskは軽量で比較的簡単に習得可能であり、データ解析などのダッシュボードとして利用されるDashはFlaskで動いています。Plotlyはpythonの可視化ライブラリの一つで、matplotlibよりもインタラクティブなグラフを描くことができますが、Flask/Dash上で稼働するWebアプリとして利用さるように作られています。一方、FastAPIは最新のフレームワークの一部であり、軽量・高速という特長があり、今後は主流になっていくものと考えられます。
上記のことを考え、本ページでは以下の項目を扱います。
一般的なWebフレームワークでは、フレームワークライブラリにHTTPサーバが用意されており、まずHTTPサーバを起動し、表示されたURLにアクセスすることでアプリを実行します。
Plotlyでは、plotly.graph_objects を利用して .show() を実行することにより、Plotly内部でHTTPサーバの立ち上げとアプリの実行を行ってくれるため、matplotlibと同様の使い方をすることができます。
以下のプログラム plotly_demo1.py を実行すると、http://127.0.0.1:53763/ を起動してグラフを表示します。
次の例では、pythonプログラムは .run_server()を呼び出し、アクセスURLを表示したうえでHTTPサーバを起動します。
このプログラムを実行すると、コンソールに以下の表示が出ます。
PS D:\> python .\plotly2.py
Dash is running on http://127.0.0.1:8050/
* Serving Flask app 'plotly2'
* Debug mode: on
Webブラウザを起動してhttp://127.0.0.1:8050/ にアクセスすると、以下のようなページが表示されます
上記のPlotly Dashアプリでは、上段のドロップボックスを変更することで、グラフの表示を変えることができます。
ドロップボックスの選択を変更した場合、callback関数を呼び出しますが、Dashではcallback関数の定義が高度にカプセル化されています。
また、Flask/Dashでは、callback関数の定義では、decolatorが使われています。
@app.callback(
Output("graph", "figure"),
Input("dropdown", "value"))
def update_bar_chart(dims):
df = px.data.iris()
fig = px.scatter_matrix(df, dimensions=dims, color="species")
return fig