[2022/09/28追記]
- 最新の方法についてまとめた記事を作りました。こっちを参照してください。こっちの方が簡単なので。
[2022/09/07追記]
- マルチページアプリ作成の方法が公式にサポートされているようです(まだ試してない)
- https://blog.streamlit.io/introducing-multipage-apps/
- 上記公式ブログで書かれています
- なので、ここで書いている方法はもう古いです
- 最新のやり方については試してから別途まとめると思います
概要
- Streamlitを使うとデータ閲覧用のWebアプリが簡単に作れる(参考1, 参考2)
- しかし、1ページにたくさんの情報が並ぶと読みにくい
- なので、複数ページのWebアプリにした
- ということで、できたもの → Chocolate Ball Viewer
Streamlit
StreamlitはWebアプリを作るためのPythonフレームワークです。細かい調整はできないけど、めちゃめちゃ簡単にWebアプリを構築することができます。
公式ドキュメントでチュートリアルを眺めれば雰囲気が掴めるかなと思います。
例えば, single_app.py
として以下のPythonファイルを作ったとします。
import streamlit as st
def greeting1():
st.header('こんにちは, 世界!')
st.write('ねこはかわいい')
def greeting2():
st.header('またまたこんにちは, 世界!!')
st.write('ねこはとてもかわいい')
greeting1()
greeting2()
あとは以下のコマンドでデフォルト8063ポートでローカルにWebサーバが立ち上がります。
$ streamlit run single_app.py
これだと一つのページに全ての情報が記載されてしまいます。種類の違う情報は別ページに分けたいですね。
ということで、複数ページのWebアプリを作ります。
Streamlitで複数ページを作る
こちらの記事をほぼ丸々コピーしただけなので、こっちを読んでください。
Streamlitで複数ページのWebアプリを作るためには、アプリを一つの関数で呼び出せるように書いておきます。例えば、上記の例では、greeting1
やgreeting2
のことです。
そして、サイドバーにアプリを選択するためのウィジットを設置し、対応する関数を呼び出します。(上記の参考ページを見てください)
これでも実装は簡単なのですが、便利なクラスが公開されています(streamlit-multiapps)。
この、「streamlit-multiapps」を使ってMultiPageのWebアプリを作るには以下の4つのステップを踏みます。
-
MultiApp
クラスをimportしてインスタンスを生成 - 別ファイルなどで、表示するコンテンツを定義(例えば
greeting1
やgreeting2
) -
MultiApp
クラスのインスタンスにadd_app(title, func)
でコンテンツを登録 - runする
これで、サイドバーにラジオボタンが設置され、表示するコンテンツを選択できるようになります。
例えば、
import streamlit as st
from multiapp import MultiApp
def greeting1():
st.title('こんにちは, 世界!')
st.write('ねこはかわいい')
def greeting2():
st.title('またまたこんにちは, 世界!!')
st.write('ねこはとてもかわいい')
app = MultiApp()
app.add_app("page1", greeting1)
app.add_app("page2", greeting2)
app.run()
こんなページができます。
できた
前回公開したチョコボールデータを閲覧するためのWebアプリを複数ページにしました。
Chocolate Ball Viewer
内容量の閲覧と、エンゼル出現確率のシミュレーションは内容が結構異なるので、別ページに分けたということです。
おわり