🦁
【Streamlit入門】爆速でWEBアプリを作ろう
Streamlitとは?
Streamlitは、PythonベースのWEBアプリケーションを簡単に作成できるオープンソースのフレームワークです。データサイエンティストやエンジニアが、比較的簡単にWebアプリケーションを開発できるように設計されています。
Streamlitの主な特徴
- シンプルな構文: Pythonの知識があれば、HTMLやCSSの知識なしでも簡単にWebアプリケーションを作成可能
- インタラクティブな要素: スライダー、ボタン、テキスト入力などのUIコンポーネントが簡単に実装可能
- データ可視化: Matplotlib、Plotlyなどの主要な可視化ライブラリと互換性がある
- デプロイの容易さ: Streamlit Community Cloudを使用して、簡単にアプリケーションを公開可能
個人的に感じたメリット・デメリット
メリット
- 「数行コード書いただけでこんなUIが作れるんだ!」と感動してしまうほどに簡単にUIを実装できる
- 便利な機能が豊富
デメリット
- 状態管理が追いにくい
- 機能をもりもりで開発していくとスパゲッティコードになりやすい
セットアップ
インストール方法
pip install streamlit
起動方法
streamlit run main.py
※main.py
の部分は適宜アプリケーションのソースファイル名に変更してください
基本的な使い方
1. テキストの表示
st.writeはstr
型だけでなく、pandasのDataFrame
型なども引数として渡すことができます。
main.py
import streamlit as st
st.title("はじめてのStreamlitアプリ")
st.write("Hello, World!")
実行結果
2. インタラクティブな要素の使用例
main.py
import streamlit as st
# サイドバーの作成
st.sidebar.title("設定")
# スライダー
age = st.sidebar.slider("年齢を選択", 0, 100, 25)
# テキスト入力
name = st.sidebar.text_input("お名前を入力してください")
# タイトル
st.title("インタラクティブなアプリケーション")
# 条件分岐
if name:
st.write(f"{name}さん、{age}歳ですね!")
実行結果
実践的なアプリケーション例
データ分析ダッシュボード
(サンプルデータ)
data/cafe_sales.csv
メニュー名,価格,売上数,月
カフェラテ,450,120,1月
カフェラテ,450,150,2月
カフェラテ,450,130,3月
カフェラテ,450,140,4月
カフェラテ,450,160,5月
カプチーノ,500,80,1月
カプチーノ,500,90,2月
カプチーノ,500,85,3月
カプチーノ,500,95,4月
カプチーノ,500,100,5月
エスプレッソ,350,60,1月
エスプレッソ,350,65,2月
エスプレッソ,350,70,3月
エスプレッソ,350,75,4月
エスプレッソ,350,80,5月
main.py
import os
import pandas as pd
import streamlit as st
import plotly.express as px
# データの読み込み
@st.cache_data
def load_data():
# CSVファイルのパスを取得
current_dir = os.path.dirname(os.path.abspath(__file__))
csv_path = os.path.join(current_dir, 'data', 'cafe_sales.csv')
# CSVファイルを読み込む
return pd.read_csv(csv_path)
# アプリケーションのタイトル
st.title("カフェメニュー分析ダッシュボード")
# データの読み込み
df = load_data()
# サイドバーでのフィルタリング
selected_menu = st.sidebar.multiselect(
"メニューを選択",
options=df["メニュー名"].unique(),
default=df["メニュー名"].unique()
)
# データのフィルタリング
filtered_df = df[df["メニュー名"].isin(selected_menu)]
# 売上数の推移グラフ
fig = px.line(
filtered_df,
x="月",
y="売上数",
color="メニュー名",
title="月別売上数の推移"
)
# グラフの表示
st.plotly_chart(fig)
# 売上金額の計算
filtered_df['売上金額'] = filtered_df['価格'] * filtered_df['売上数']
# 基本統計量の表示
st.subheader("基本統計量")
stats_df = filtered_df.groupby('メニュー名').agg({
'売上数': ['mean', 'sum'],
'売上金額': 'sum'
}).round(0)
# カラム名を日本語に変更
stats_df.columns = ['月平均売上数', '総売上数', '総売上金額']
st.write(stats_df)
# 月別売上金額の集計
st.subheader("月別売上金額")
monthly_sales = filtered_df.groupby(['月', 'メニュー名'])['売上金額'].sum().reset_index()
st.write(monthly_sales.pivot(index='月', columns='メニュー名', values='売上金額').fillna(0).round(0))
実行結果
実際に使ってみてデフォルトで用意されてると便利だなーと感じた機能
1. ファイルアップロード
import streamlit as st
import pandas as pd
uploaded_file = st.file_uploader("CSVファイルをアップロード", type="csv")
if uploaded_file is not None:
df = pd.read_csv(uploaded_file)
st.write("データのプレビュー:")
st.dataframe(df.head())
実行結果
2. プログレスバー
import streamlit as st
import time
progress_bar = st.progress(0)
for i in range(100):
time.sleep(0.1)
progress_bar.progress(i + 1)
実行結果
まとめ
Streamlitは、WEBアプリケーション開発の敷居を大幅に下げ、データサイエンティストやエンジニアが素早くプロトタイプを作成できる強力なツールです。Pythonの知識があれば、Webアプリケーションを簡単に作成できます。PoCで何かしらのWebアプリの開発を検討されている方におすすめです。
ただ、便利な反面、機能拡張を進めていく上で、スパゲッティコードになりやすかったり、細かな設定やハンドリングがし難い部分もあるので、適宜要件に従ってStreamlitの使用を検討いただくことを推奨します。
Discussion