Streamlitは、Pythonでデータアプリケーションやインタラクティブなウェブアプリケーションを簡単に作成するためのライブラリです。複雑なウェブフレームワークを使用することなく、データ可視化や機械学習モデルのデプロイを短時間で行うことができます。以下に、Streamlitの特徴と実用例を説明します。
Streamlitの特徴
シンプルなAPI
Streamlitは、直感的でシンプルなAPIを提供しており、わずかなコードでウェブアプリケーションを作成できます。
リアルタイム更新
コードを保存すると、自動的にアプリケーションが更新されるため、開発プロセスが非常に迅速です。
豊富なウィジェット
スライダー、ボタン、テキスト入力、ファイルアップロードなど、多様なウィジェットを簡単に追加できます。
データ可視化
Matplotlib、Seaborn、Plotlyなどのデータ可視化ライブラリと統合されており、インタラクティブなグラフを簡単に表示できます。
デプロイの簡便性
Streamlitは、クラウドプラットフォームに簡単にデプロイでき、共有可能なリンクを作成できます。
例題1: シンプルなウェブアプリの作成
まず、Streamlitを使用してシンプルなウェブアプリを作成する方法を示します。
import streamlit as st
# タイトルの表示
st.title("シンプルなStreamlitアプリ")
# テキストの表示
st.write("これは、Streamlitを使ったシンプルなウェブアプリです。")
# スライダーの追加
slider_value = st.slider("スライダーを動かしてください", 0, 100)
st.write(f"スライダーの値: {slider_value}")
このコードでは、タイトル、テキスト、スライダーを持つシンプルなウェブアプリを作成しています。st.title
、st.write
、st.slider
を使用してコンテンツを表示しています。
例題2: データフレームの表示とインタラクティブなグラフ
次に、Pandasデータフレームを表示し、インタラクティブなグラフを作成する方法を示します。
import streamlit as st
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
# データの作成
data = pd.DataFrame({
'A': np.random.rand(100),
'B': np.random.rand(100)
})
# データフレームの表示
st.write("ランダムデータのデータフレーム", data)
# グラフの作成
fig, ax = plt.subplots()
ax.scatter(data['A'], data['B'])
ax.set_xlabel('A')
ax.set_ylabel('B')
ax.set_title('A vs B Scatter Plot')
# グラフの表示
st.pyplot(fig)
このコードでは、Pandasデータフレームを作成して表示し、Matplotlibを使用してインタラクティブな散布図を作成しています。st.write
とst.pyplot
を使用してコンテンツを表示します。
例題3: ファイルアップロード機能の追加
次に、ファイルアップロード機能を追加して、アップロードされたファイルを表示する方法を示します。
import streamlit as st
import pandas as pd
# ファイルアップロード
uploaded_file = st.file_uploader("ファイルをアップロードしてください", type=["csv", "xlsx"])
if uploaded_file is not None:
# ファイルの読み込み
if uploaded_file.name.endswith('.csv'):
data = pd.read_csv(uploaded_file)
elif uploaded_file.name.endswith('.xlsx'):
data = pd.read_excel(uploaded_file)
# データの表示
st.write("アップロードされたデータ", data)
このコードでは、ファイルアップロード機能を追加し、アップロードされたCSVまたはExcelファイルを読み込んで表示します。st.file_uploader
を使用してファイルアップロードウィジェットを作成します。
例題4: インタラクティブなマップの表示
次に、Streamlitを使用してインタラクティブなマップを表示する方法を示します。
import streamlit as st
import pandas as pd
import numpy as np
# ランダムな位置データの作成
map_data = pd.DataFrame({
'lat': np.random.randn(100) / 50 + 35.69,
'lon': np.random.randn(100) / 50 + 139.70
})
# インタラクティブなマップの表示
st.map(map_data)
このコードでは、ランダムな位置データを作成し、Streamlitのst.map
を使用してインタラクティブなマップを表示しています。
例題5: 機械学習モデルのインターフェース作成
最後に、Streamlitを使用して機械学習モデルのインターフェースを作成する方法を示します。
import streamlit as st
from sklearn.datasets import load_iris
from sklearn.ensemble import RandomForestClassifier
# Irisデータセットの読み込み
iris = load_iris()
X = iris.data
y = iris.target
# モデルの訓練
clf = RandomForestClassifier()
clf.fit(X, y)
# ユーザー入力の取得
st.sidebar.header('ユーザー入力')
def user_input_features():
sepal_length = st.sidebar.slider('萼片の長さ', float(X[:, 0].min()), float(X[:, 0].max()))
sepal_width = st.sidebar.slider('萼片の幅', float(X[:, 1].min()), float(X[:, 1].max()))
petal_length = st.sidebar.slider('花弁の長さ', float(X[:, 2].min()), float(X[:, 2].max()))
petal_width = st.sidebar.slider('花弁の幅', float(X[:, 3].min()), float(X[:, 3].max()))
data = {
'sepal_length': sepal_length,
'sepal_width': sepal_width,
'petal_length': petal_length,
'petal_width': petal_width
}
return pd.DataFrame(data, index=[0])
input_df = user_input_features()
# 予測の表示
prediction = clf.predict(input_df)
prediction_proba = clf.predict_proba(input_df)
st.subheader('クラスラベルとその対応するインデックス番号')
st.write(iris.target_names)
st.subheader('予測')
st.write(iris.target_names[prediction])
st.subheader('予測確率')
st.write(prediction_proba)
このコードでは、Irisデータセットを使用して訓練したランダムフォレストモデルの予測インターフェースを作成しています。ユーザーはサイドバーで花の特徴を入力し、モデルの予測結果と予測確率を確認できます。
結論
Streamlitは、Pythonでデータアプリケーションやインタラクティブなウェブアプリケーションを簡単に作成するための非常に強力なツールです。シンプルなAPIとリアルタイムの更新機能により、迅速なプロトタイピングが可能です。データ可視化、機械学習モデルのデプロイ、インタラクティブなユーザーインターフェースの作成など、さまざまな用途に対応できます。Streamlitを活用することで、データサイエンスや機械学習プロジェクトの成果を効果的に共有し、インタラクティブに探索することができます。