コンテンツにスキップ

1 Streamlit基本

1.1 Streamlit

StreamlitはPythonのみでWebページを作成できるライブラリです。フォームの利用やデータの表示が簡単なため、特にデータサイエンスのフロントエンドとして使われます。

まず、ターミナルでインストールしておきます。

pip install streamlit streamlit-folium

st_sample.py ファイルに、以下のように記述します。

import streamlit as st

st.title('Sample Site')
st.text('こんにちは')

実行はこのファイルを直接実行するのではなく、ターミナルで「streamlit run ファイル名」を入力します。

※カレントディレクトリが異なる場合、事前に cd st などで移動します。

つまり、st_sample.pyを実行する場合、以下のようにします。

streamlit run st_sample.py

もし、直接実行した場合、「streamlit run パス名」がターミナルに表示されるので、それをコピーし貼り付けてEnterを押して実行します。

初回実行時

初回実行時にはメールアドレスを聞かれますが、入力せずEnterを押します。

すると、自動的に、http://localhost:8501/ をブラウザで開きます。 ファイルを更新した場合、ブラウザを再読み込みしてください。

終了時には、ターミナルで Ctrl+C を押します。

注意

他のファイルを実行したい場合には、すでに実行したstreamlitを終了(Ctrl+C)させてから実行します。

1.2 VSCodeでの実行

タスクを登録することで、手軽に実行することが出来ます。

VSCodeを実行しているフォルダに、.vscode フォルダを作成し、以下の内容を、tasks.jsonに保存します。

{
    "version": "2.0.0",
    "tasks": [
        {
            "label": "Streamlit実行",
            "type": "shell",
            "command": "streamlit run '${file}'",
             "options": {
                "cwd": "${fileDirname}"
            },
            "problemMatcher": [],
            "group": {
                "kind": "build",
                "isDefault": true
            }
        }
    ]
}

以降は、Ctrl+Shift+Pで、「タスクの実行」を選択し、「Streamlit実行」をえらぶことで実行できます。

1.3 画面表示の基本

以下のような表示が可能です。

  • st.title(文字列)  文字列を大見出しとして表示します。
  • st.header(文字列) 文字列を中見出しとして表示します。
  • st.subheader(文字列) 文字列を小見出しとして表示します。
  • st.text(文字列) 文字列を表示します。
  • st.write(文字列) 文字列をマークダウンとして表示します。

メッセージなどは枠で囲んで色つきのテキストを以下で表示できます。

st.success("成功です")
st.info("情報です")
st.warning("警告です")
st.error("エラーです")

変数は.ipynbファイルと同様にそのまま書くと表示されます。 データフレームは表の形で表示されます。

import pandas as pd
df =  pd.read_csv("seiseki.csv")
df

メトリクス表示では、タイトルと内容、変化量を表示することができます。

st.metric("気温", "15.2℃", "1.2℃")
st.metric("湿度", "60%", "-5.2")

1.4 グラフの表示

streamlitにグラフ表示方法が備わっています。

折れ線グラフ

st.line_chart(df[["国語","算数","理科","社会"]])

棒グラフ

st.bar_chart(df[["国語","算数","理科","社会"]])

散布図

st.scatter_chart(df, x="算数", y="理科")

DataFrameで作成したグラフを表示したい場合、いったん変数に入れて、st.pylot()で表示します。

import seaborn as sns
sns.set_theme(font=["Meiryo"])

graph = df.plot.scatter(x="算数",y="理科")
st.pyplot(graph.get_figure())

1.5 フォームの基本

フォームは 変数名 = st.フォーム部品(引数) でユーザが入力した内容が得られます。得られた変数をすぐに利用できます。

ラジオボタンで複数から1つを選択します。

radio = st.radio("性別", ["男性", "女性"])

df[df["性別"] == radio]  # 表示

セレクトボックスも同じです。

sel = st.selectbox("クラス", ["A", "B"])
df[df["クラス"] == sel]

テキストボックスで数値を入力する場合、st.number_input('見出し')で戻り値に入力内容を得ます。

kokugo = st.number_input('国語')

step=1を整数での入力になります。また、初期値がvalue、最小値がmin_value、最大値がmax_valueで指定できす。

他にも文字入力用の text_input、日付入力用のdate_inputがあります。

ボタンを押したときの処理を記述します。

btn = st.button("点数以上")
if btn:
   df[df["国語"] >= kokugo]

数値入力の範囲が決まっている場合、スライダーも便利です。

suu = st.slider('算数', 0, 100, 50) # 最小, 最大, 初期値

btn = st.button("点以上")
if btn:
   df[df["算数"] >= suu]

ファイルを指定して読み込むことも可能です。

f = st.file_uploader('ファイルアップロード')

# ファイルを読み込んで表示
if f is not None:
    df2 =  pd.read_csv(f)
    st.write(df2.describe()) # 基本統計量

サイドバーに設置

st.sidebar.radio("性別", ["男", "女"]) のように書くことで、サイドバーに部品を設置できます。