Skip to content

Streamlitでインタラクティブなデータダッシュボードを構築する:包括的なチュートリアル

Updated on

データサイエンスの世界では、データを可視化し、データと対話する能力が非常に重要です。ここでStreamlitが登場します。Streamlitは、データ探索や可視化のためにカスタムのWebアプリを作成するためのオープンソースのPythonライブラリです。このチュートリアルでは、Streamlitの世界に深く入り込み、インタラクティブなダッシュボードの構築、機械学習モデルの展開などを学びます。

StreamlitアプリをTableauのようなUIで埋め込む、驚くべきデータ分析&データ可視化ツールで聞いたことはありますか?

PyGWalker (opens in a new tab)は、独自のStreamlitアプリにTableauのようなUIを簡単に埋め込むのを助けるPythonライブラリです。

PyGWalker for Data visualization in Streamlit (opens in a new tab)

Streamlitの紹介

Streamlitとは?

Streamlitは、機械学習やデータサイエンスのためのカスタムウェブアプリを簡単に作成できるオープンソースのPythonライブラリです。データが王様である世界では、Streamlitは王妃となり、データを活かすために必要なツールを提供します。

Streamlitの直感的で使いやすいインターフェースにより、データスクリプトを共有可能なウェブアプリに簡単かつ迅速に変換することができます。わずか数行のコードで美しいインタラクティブなダッシュボードやデータの可視化を作成することができます。経験豊富なデータサイエンティストであろうと、データの世界に初めて足を踏み入れる初心者であろうと、Streamlitはデータを理解し、表示するための多目的プラットフォームを提供します。

データ可視化におけるStreamlitの利点

データの可視化は、データ分析の重要な側面です。グラフィカルかつわかりやすい形式で複雑なデータセットを表現することで、データセットを理解することができます。 Streamlitはこのエリアで優れたパフォーマンスを発揮し、次のような利点を提供します。

  • リアルタイムの可視化: Streamlitのリアルタイムの機能により、データが変更されるたびにダッシュボードが即座に更新されます。これは、ライブデータフィードのモニタリングやKPIの追跡に特に有用です。

  • インタラクティブなダッシュボード: Streamlitを使用すると、ダッシュボードは単なる静的な画像ではなく、インタラクティブなウェブアプリです。これにより、ユーザーはデータを操作し、特定の領域にズームインしたり、詳細に掘り下げたりすることができます。

  • 使いやすさ: Streamlitは使いやすさを重視して設計されています。魅力的なダッシュボードを作成するためにウェブ開発者である必要はありません。Pythonコードが書ければ、Streamlitを使用することができます。

  • Pythonデータサイエンススタックとの統合: StreamlitはPandas、NumPy、Plotlyなどの人気のあるPythonライブラリとシームレスに統合されており、どんなデータサイエンティストのツールとしても強力なツールです。

機械学習モデルでのStreamlitの役割

Streamlitはデータ可視化だけでなく、機械学習にも強力なツールです。Streamlitを使用すると、機械学習モデルをショーケースするためのインタラクティブなウェブアプリを簡単に作成できます。これは、利害関係者にモデルの機能をデモンストレーションするためや、デバッグやモデルチューニングに特に有用です。

例えば、ユーザーの入力を受け取り、それを機械学習モデルに渡し、リアルタイムで予測結果を表示するStreamlitアプリを作成することができます。また、モデルのパラメータを調整し、その出力にどのように影響するかを確認するアプリを作成することもできます。可能性は無限です。

Streamlitでダッシュボードを構築する

Streamlitでダッシュボードを構築する方法

Streamlitを使用してダッシュボードを構築する方法は非常に簡単です。これについての基本的な例を以下に示します。

import streamlit as st
import pandas as pd
 
# データを読み込む
data = pd.read_csv('data.csv')
 
# タイトルを作成する
st.title('私の最初のStreamlitダッシュボード')
 
# テーブルにデータを表示する
st.table(data)

この例では、まず必要なライブラリをインポートします。次に、Pandasを使用してデータを読み込みます。次に、st.title()関数を使用してダッシュボードのタイトルを作成します。最後に、st.table()関数を使用してデータをテーブルに表示します。

Streamlitを使用したリアルタイムデータダッシュボード

Streamlitの特徴の1つは、リアルタイムダッシュボードを作成できることです。これは、ライブデータフィードで作業する場合や、データの変化を時間とともに監視する必要がある場合に特に便利です。

リアルタイムダッシュボードを作成するために、ループ内でStreamlitのst.write()関数を使用することができます。以下に例を示します。

import streamlit as st
import pandas as pd
import time
 
# タイトルを作成する
st.title('リアルタイムデータダッシュボード')
 
# 空のDataFrameを初期化する
data = pd.DataFrame()
 
# データを毎秒更新する
for i in range(100):
    # 新しいデータをシミュレートする
    new_data = pd.DataFrame({'value': [i]}, index=[time.time()])
    
    # 新しいデータを既存のデータに追加する
    data = data.append(new_data)
    
    # データを表示する
    st.write(data)
    
    # 更新前に1秒待機する
    time.sleep(1)

この例では、まずダッシュボードのタイトルを作成します。次に、データを保存するための空のDataFrameを初期化します。次に、毎秒新しいデータが来るようなループを入力します。新しいデータを既存のデータに追加し、st.write()関数を使用して表示します。最後に、データを更新する前に1秒間待機します。

Streamlitを使用したインタラクティブなデータの可視化

Streamlitを使用すると、インタラクティブなデータの可視化も簡単に作成することができます。これは、StreamlitをPlotlyライブラリと統合してst.plotly_chart()関数を使用することで実現可能です。

以下は、インタラクティブな散布図を作成する例です。

import streamlit as st
import pandas as pd
import plotly.express as px
 
# データを読み込む
data = pd.read_csv('data.csv')
 
# 散布図を作成する
fig = px.scatter(data, x='x', y='y')
 
# プロットを表示する
st.plotly_chart(fig)

この例では、まずデータを読み込みます。次に、Plotly Expressを使用して散布図を作成します。最後に、st.plotly_chart()関数を使用してプロットを表示します。

Streamlitでできることはこれに過ぎませんが、Streamlitを使用して、創造力とPythonのノウハウを活用して、データを活気づける見事なインタラクティブなダッシュボードを作成することができます。

Streamlitを使ったリアルタイムデータの可視化

Streamlitのリアルタイムデータの扱いは、最も強力な機能の1つです。これは、常にモニタリングやライブアップデートが必要なアプリケーションに特に役立ちます。たとえば、リアルタイムでIoTセンサーデータを監視するためのStreamlitダッシュボードを作成することができます。以下は簡単な例です。

import streamlit as st
import random
import time
 
st.title('リアルタイムIoTセンサーデータ')
 
data = []
 
for _ in range(100):
    data.append(random.randint(0, 100))
    st.line_chart(data)
    time.sleep(0.1)

この例では、ランダムな数値を生成し、0.1秒ごとにラインチャートを更新することで、リアルタイムのIoTセンサーデータをシミュレートしています。

Streamlitを使ったインタラクティブな機械学習モデル

Streamlitのインタラクティビティは、機械学習モデルにも適用することができます。ユーザーがモデルのパラメータを調整し、リアルタイムで結果を確認できるダッシュボードを作成することができます。これは、異なるパラメータがモデルの予測にどのように影響するのかを理解するための強力なツールです。

例えば、顧客の年齢、在籍期間、月額料金などの特徴に基づいて顧客の離反を予測する機械学習モデルがあるとします。ユーザーがこれらのパラメータを調整し、リアルタイムで予測される離反確率を確認できるStreamlitアプリを作成することができます。以下は基本的な例です。

import streamlit as st
from sklearn.ensemble import RandomForestClassifier
import numpy as np
 
st.title('顧客離反予測')
 
# トレーニング済みモデルを読み込む
model = RandomForestClassifier()
model.load('my_model.pkl')
 
# ユーザーの入力を取得する
age = st.slider('年齢', 18, 100)
tenure = st.slider('在籍期間(月)', 1, 72)
monthly_charges = st.slider('月額料金', 20.0, 100.0)
 
# 予測を行う
input_data = np.array([[age, tenure, monthly_charges]])
prediction = model.predict_proba(input_data)
 
# 予測を表示する
st.write(f'離反確率: {prediction[0][1]}')

この例では、まずトレーニング済みモデルを読み込みます。次に、Streamlitのslider関数を使用して年齢、在籍期間、月額料金のユーザー入力を取得します。この入力をモデルに渡して予測を行い、最後に予測された離反確率を表示します。

Streamlitを使ったIoTデータの可視化

インターネット・オブ・シングス(IoT)の台頭に伴い、IoTデータを可視化できるツールの需要が増しています。Streamlitは、リアルタイムの機能と使いやすさのために、このタスクに適しています。

この例では、リアルタイムのIoTセンサーデータが含まれる'sensor_data.csv'という名前のCSVファイルがあるとします。以下は、このデータをStreamlitで表示する方法です。

import streamlit as st
import pandas as pd
import time
 
st.title('リアルタイムIoTセンサーデータ')
 
# データを読み込む
data = pd.read_csv('sensor_data.csv')
 
# データをリアルタイムで表示する
for i in range(len(data)):
    # 現在のデータポイントを表示する
    st.line_chart(data[:i+1])
    
    # 次のデータポイントを表示する前に、短い時間を待つ
    time.sleep(0.1)

この例では、まずCSVファイルからセンサーデータを読み込みます。次に、データをリアルタイムで表示するために、1つのデータポイントをラインチャートに徐々に追加していきます。各データポイントが追加された後、次のデータポイントを追加する前に短い時間を待ちます。これにより、データがリアルタイムに表示されているような効果が生じます。

結論

Streamlitは、インタラクティブなデータダッシュボードを作成するための強力なツールです。リアルタイムのIoTデータの視覚化、機械学習モデルの展示、データセットの探索など、さまざまな目的に対応しています。Pythonベースの構文と幅広い機能を備えているため、Streamlitはデータサイエンティストやアナリストの間で人気のある選択肢となっています。これらの例は、Streamlitの可能性の一部に過ぎません。ぜひ、その機能を自分自身で探求してみてください。

StreamlitアプリをTableauのように変換する、素晴らしいデータ分析・データ可視化ツールをご存知ですか?

PyGWalker (opens in a new tab)は、自分自身のStreamlitアプリにTableauのようなUIを簡単に埋め込むのを支援するPythonライブラリです。

PyGWalkerでStreamlitのデータ可視化 (opens in a new tab)

よくある質問

Streamlitはダッシュボードに適していますか?

はい、Streamlitはインタラクティブなデータダッシュボードを作成するための優れたツールです。Pythonベースであり、データサイエンティストにとってアクセスしやすく、データの視覚化やインタラクティビティに幅広い機能を提供しています。

StreamlitはFlaskよりも優れていますか?

StreamlitとFlaskは異なる目的で使用されます。Flaskは汎用のWebフレームワークですが、Streamlitはデータダッシュボードの作成に特化しています。迅速かつ簡単にデータダッシュボードを構築したい場合は、Streamlitの方が良い選択肢でしょう。

Streamlitの欠点は何ですか?

Streamlitは強力なツールですが、いくつかの制約もあります。たとえば、他のダッシュボードツールと比較してカスタマイズ性が劣る点が挙げられます。また、単純でスタンドアロンなアプリケーションを作成するのには優れていますが、より複雑なWebアプリケーションには最適とは言えないかもしれません。

DashはStreamlitよりも優れていますか? 特定のニーズによって、DashがStreamlitよりも優れているかどうかが決まります。DashはPythonのライブラリで、インタラクティブなウェブアプリケーションを作成するためのものであり、Streamlitよりもカスタマイズオプションが多く提供されています。しかし、Streamlitはそのシンプルさと使いやすさが評価されており、クイックプロトタイピングやシンプルなダッシュボードにはDashよりも優れた選択肢となることがあります。