LoginSignup
30
34

More than 1 year has passed since last update.

Streamlitで複数ページのWebアプリを作る

Last updated at Posted at 2021-01-26

[2022/09/28追記]

[2022/09/07追記]

  • マルチページアプリ作成の方法が公式にサポートされているようです(まだ試してない)
  • なので、ここで書いている方法はもう古いです
    • 最新のやり方については試してから別途まとめると思います

概要

  • 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アプリを作るためには、アプリを一つの関数で呼び出せるように書いておきます。例えば、上記の例では、greeting1greeting2のことです。
そして、サイドバーにアプリを選択するためのウィジットを設置し、対応する関数を呼び出します。(上記の参考ページを見てください)

これでも実装は簡単なのですが、便利なクラスが公開されています(streamlit-multiapps)。
この、「streamlit-multiapps」を使ってMultiPageのWebアプリを作るには以下の4つのステップを踏みます。

  1. MultiAppクラスをimportしてインスタンスを生成
  2. 別ファイルなどで、表示するコンテンツを定義(例えばgreeting1greeting2
  3. MultiAppクラスのインスタンスにadd_app(title, func)でコンテンツを登録
  4. 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()

こんなページができます。

multi_page_sample1.gif

できた

前回公開したチョコボールデータを閲覧するためのWebアプリを複数ページにしました。
Chocolate Ball Viewer

内容量の閲覧と、エンゼル出現確率のシミュレーションは内容が結構異なるので、別ページに分けたということです。

multi_page_choco.gif

おわり

参考

  1. Building Multi Page Web App Using Streamlit
  2. streamlit-multiapps
  3. Streamlitでデータを可視化する
30
34
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
30
34