logo
Published on

【Python】Mercuryでjupyternotebookを簡単にWebアプリ化

Authors

Mercury とは

  • jupyternotebook を簡単に Web アプリ化できるライブラリ
  • サクッと Web アプリ化できるのはかなり便利
  • ウィジェットの数はまだまだ少ないかも
pic

動画

ソースコード

全体像

  • mr.Appを追加するだけで、Web アプリ化できる。
    • プロジェクトフォルダから、mercury runで Web アプリを起動できる
  • 最終形は下記のような感じの UI になります。
webapps

#%%
import mercury as mr # for widgets
import pandas as pd
import plotly.express as px

#%%
app = mr.App(title="snuow demo apps", description="サンプルとしてつくってみました。")

#%% md
## サンプル用のアプリケーション
### 使い方
1. ファイルアップロードエリアにCSVをドラッグアンドドロップ
2. 表示されたDropdownでx軸、y軸の値を選択
3. 散布図作成ボタンをクリック
---

#%%
file = mr.File(label='ファイルアップロード', max_file_size="100MB")

x = None
y = None

if file.filepath:
    df = pd.read_csv(file.filepath,header=[0],encoding='cp932')
    if not x:
        x = mr.Select(label='x軸',value=df.columns.values.tolist()[0], choices=df.columns.values.tolist())
    else:
        pass
    if not y:
        y = mr.Select(label='y軸',value=df.columns.values.tolist()[0], choices=df.columns.values.tolist())
    else:
        pass

gen_graph_button = mr.Button(label='散布図生成')

if gen_graph_button.clicked:
    if (x.value != "") and (y.value != ""):
        fig = px.scatter(data_frame=df,x=x.value,y=y.value)
        fig.show()


  • 下記の部分では、ファイルがアップロードされたら、pandas の read_csv でファイルを読み込みます。
  • また、ファイルが読み込まれると、セレクトボックスが出現します。
if file.filepath:
    df = pd.read_csv(file.filepath,header=[0],encoding='cp932')
    if not x:
        x = mr.Select(label='x軸',value=df.columns.values.tolist()[0], choices=df.columns.values.tolist())
    else:
        pass
    if not y:
        y = mr.Select(label='y軸',value=df.columns.values.tolist()[0], choices=df.columns.values.tolist())
    else:
        pass
  • ボタンがクリックされると、下記のコードが実行されます。
  • セレクトボックスの x,y に値が入っていれば(選択されていれば)、散布図が表示されます。
gen_graph_button = mr.Button(label='散布図生成')

if gen_graph_button.clicked:
    if (x.value != "") and (y.value != ""):
        fig = px.scatter(data_frame=df,x=x.value,y=y.value)
        fig.show()