データ可視化のためのプラットフォームの基礎: Streamlit

データの可視化は、データを様々な角度から確認し、データ自体を理解する目的で行われることが多い印象です。探索的データ分析(EDA)と呼ばれることもあります。データ分析の結果は、自分自身で確認するだけでなく、上司や顧客など他者へ説明することが求められることが多いと思います。

このような背景から、データの可視化にあたっては、直感的な操作でインタラクティブにデータを確認できるインターフェースが備わっているととても便利です。このようなインタラクティブなデータ可視化ツールが容易に作成できるプラットフォームとして、streamlitというツールが知られています。

ここでは、Streamlitの環境構築と基礎的な使い方をまとめます。

Streamlit

Streamlitは、Python でWebアプリを開発するためのフレームワークです。主に、データ確認のためのWebアプリが非常に容易に開発できます。Webアプリの開発経験や知識はほぼ不要で、Pythonでpandasやmatplotlib等を利用した経験さえあれば、Webアプリを開発できます。

ただし、容易に開発ができるのには理由があり、他のWebアプリフレームワークと比較してデメリットもあります(大きくは二つ)。

  • Streamlitの優れている点
    • Webアプリの知識や開発経験が不要で、容易にWebアプリを作ることができる
    • インタラクティブにデータを確認できるダッシュボードが作成可能
    • データ入力などにも対応
  • Streamlitの欠点
    • 厳格にレイアウトが定まっているため、誰が作っても同じような見た目になる
    • パフォーマンス(速度)に課題

欠点の一つ目については、自由な表現をするにはCSSなどに直接手を加える必要があり、Webアプリの知識が必要になってきます。二つ目の欠点については、グラフの拡大などWebアプリ内のいずれかに変更を加えると、その都度アプリ全体のPythonコードを再実行します。そのため、一つ操作を加えると結果が反映されるまでに時間がかかってしまうということがあります。

以上の特徴から、簡易的なダッシュボード作成の際に向いているツールだと考えています。特に、jupyterlabと違ってソースコードが表示されないので、顧客への説明などに適しているのではないかと思います。

Streamlit についての詳細は下記の公式ドキュメントを参照ください。

https://streamlit.io/

Streamlitの導入

インストール

インストールはpip を利用できます。詳細は下記の公式インストールドキュメントを参照してください。

https://docs.streamlit.io/library/get-started/installation

pipenvやpoetryなどの仮想環境管理ツールを利用する場合には、それぞれの利用方法を確認ください。

pipでインストールをするには下記のコマンドを実行します。

pip install streamlit

下記コマンドでWebアプリにアクセスできればインストールは完了です。

streamlit hello

デフォルトの設定では、localhostの8501ポートでStreamlitアプリに繋がります。Streamlitコマンドを実行すると、ターミナルに接続URLが表示されるので確認してください。

ポート番号を指定するには、コンフィグファイルを編集するか、Streamlitコマンド実行時に下記のようにポートを指定してください。

streamlit hello --server.port 58090

server.port オプションでポートを設定できます。

StreamlitでWebアプリ作成の概要

StreamlitでWebアプリを開発するには、StreamlitをimportしたpythonファイルさえあればWebアプリができます。

例えば、標準正規分布に従う乱数のヒストグラムを表示するだけのアプリは以下のコードをpythonファイルとして用意しておきます(以下の例では app_main.py)。

import streamlit as st
import numpy as np
import matplotlib.pyplot as plt

st.title("Streamlit App Sample")

st.markdown("""
これはStreamlitのアプリのサンプルです。
""")

arr = np.random.normal(0, 1, size=500)
fig, ax = plt.subplots()
ax.hist(arr, bins=20)
st.pyplot(fig)

上記のように、タイトルやグラフのコンポーネントを直接記述します。

そして、下記コマンドを実行することでStreamlitのWebアプリを構築することができます。

streamlit run app_main.py

ブラウザから以下のようなWebアプリが確認できます。

Streamlit基本操作

ここまで見てきたように、Streamlit ではPythonコードに直接表示するコンポーネントを書いていきます。以下では、よく使う基本的なコンポーネントを紹介します。

テキスト

テキストを表示するにはいくつか方法があります。以下のページでテキストの表示について具体例をまとめています。

データフレーム(表)

グラフ

散布図

折れ線グラフ

棒グラフ

ヒストグラム

ウィジット

レイアウト(サイドバー)

その他覚えておくと良い機能

キャッシュ

複数ページアプリ

まとめ

Streamlitは、関数を呼び出した箇所にそのままコンポーネントが表示されるので、直感的に記述できることが見えたかなと思います。しかしその分、欠点として挙げている通り、レイアウトをカスタマイズすることは難しいです。

簡易的なダッシュボードを作成するという視点に絞ると、色々使えるのではないかと思います。

参考

「データ可視化のためのプラットフォームの基礎: Streamlit」への1件の返信

コメントは受け付けていません。