Streamlitとは

Streamlitはデータサイエンティストやエンジニアが簡単に対話的なWebアプリを作成できるPythonライブラリです。機械学習モデルやデータの可視化を共有するための最適なツールです。

Streamlitのコアコンセプト:「スクリプトからアプリへ」。Pythonスクリプトを書くだけで、自動的にインタラクティブなWebアプリに変換されます。

インストールと初期設定

1

Streamlitのインストール:

pip install streamlit
2

インストールの確認:

streamlit hello
3

最初のアプリの作成 (app.py):

import streamlit as st st.title('My First Streamlit App') st.write('Hello, World!')
4

アプリの実行:

streamlit run app.py

テキスト表示要素

基本テキスト表示

st.title('タイトル')
st.header('ヘッダー')
st.subheader('サブヘッダー')
st.text('プレーンテキスト')

リッチテキスト

st.markdown('**太字**')
st.code('コードブロック')
st.latex(r'\alpha + \beta')
st.write('万能表示関数')
st.write()は多くのデータ型をサポートしているため、最も汎用的です。DataFrameやグラフも表示できます。

入力ウィジェット

基本入力

st.button('ボタン')
st.checkbox('チェックボックス')
st.radio('ラジオ', ['A', 'B'])
st.selectbox('選択', ['X', 'Y'])

数値・テキスト入力

st.text_input('テキスト入力')
st.number_input('数値', min_value=0)
st.slider('スライダー', 0, 100)
st.text_area('複数行入力')

日付・時間選択

st.date_input('日付')
st.time_input('時間')

ファイルアップロード

st.file_uploader('ファイルをアップロード')
すべての入力ウィジェットは変数に代入して値を取得できます。例:age = st.slider('年齢', 0, 100)

データ表示

データフレーム

import pandas as pd df = pd.DataFrame({ '名前': ['太郎', '花子'], '年齢': [25, 28] }) st.dataframe(df) # インタラクティブ表示 st.table(df) # 静的な表示

メトリクス

st.metric('売上', '¥12,345', '↑2.5%')

JSON表示

st.json({'a': 1, 'b': 2})

レイアウト

サイドバー

st.sidebar.title('サイドバーメニュー')

カラム

col1, col2 = st.columns(2) with col1: st.header('列1') with col2: st.header('列2')

タブ

tab1, tab2 = st.tabs(['タブ1', 'タブ2']) with tab1: st.write('タブ1の内容') with tab2: st.write('タブ2の内容')

エクスパンダー

with st.expander('詳細を表示'): st.write('詳細情報...')

コンテナ

with st.container(): st.write('グループ化された要素')

データ可視化

基本的なグラフ

import numpy as np import pandas as pd # データ生成 chart_data = pd.DataFrame( np.random.randn(20, 3), columns=['A', 'B', 'C']) # 折れ線グラフ st.line_chart(chart_data) # エリアチャート st.area_chart(chart_data) # 棒グラフ st.bar_chart(chart_data)

高度な可視化 (Matplotlib)

import matplotlib.pyplot as plt fig, ax = plt.subplots() ax.scatter([1, 2, 3], [1, 2, 3]) st.pyplot(fig)

インタラクティブな可視化 (Plotly)

import plotly.express as px df = px.data.gapminder() fig = px.scatter( df, x="gdpPercap", y="lifeExp", size="pop", color="continent" ) st.plotly_chart(fig)

地図表示

import pandas as pd df = pd.DataFrame({ 'lat': [35.6812, 34.6937], 'lon': [139.7671, 135.5023], 'name': ['東京', '大阪'] }) st.map(df)

高度な機能

キャッシュ

@st.cache_data def get_data(): # 時間のかかる処理 return data

セッション状態

if 'counter' not in st.session_state: st.session_state.counter = 0 st.session_state.counter += 1 st.write(f"カウント: {st.session_state.counter}")

コールバック

def button_callback(): st.session_state.clicked = True st.button('クリック', on_click=button_callback)

プログレスバー

import time progress_bar = st.progress(0) for i in range(100): progress_bar.progress(i + 1) time.sleep(0.1)

フォーム送信

with st.form('my_form'): name = st.text_input('名前') age = st.number_input('年齢', 0, 120) submitted = st.form_submit_button('送信') if submitted: st.write(f'こんにちは {name} さん!')

便利なTips

ページ設定

st.set_page_config( page_title="アプリ名", page_icon="🧊", layout="wide", initial_sidebar_state="expanded" )

※必ずスクリプトの先頭で実行してください。

カスタムCSS

st.markdown(""" """, unsafe_allow_html=True)

マルチページアプリ

pagesフォルダ内にページごとのPythonファイルを配置:

📁 my_app/ ├── 📄 app.py # メインページ └── 📁 pages/ ├── 📄 page1.py # サブページ1 └── 📄 page2.py # サブページ2

デプロイ

Streamlitアプリをデプロイする主な方法:

  • Streamlit Cloud 最も簡単
  • Heroku カスタマイズ可能
  • AWS/GCP 高度な設定が可能
アプリの動作が遅い場合は、@st.cache_dataを使用して重い処理をキャッシュすることで高速化できます。