【Streamlit】Seabornのstripplotでカテゴリデータを可視化する

Streamlit, Seaborn stripplotでカテゴリデータを可視化する Streamlit
この記事は約11分で読めます。

こんにちは、JS2IIUです。
本記事では、Pythonのデータ可視化ライブラリであるSeabornの中でも、特に散布図に近い形でカテゴリデータを視覚化できる「stripplot」を、Webアプリ作成フレームワークのStreamlitに組み込む方法を詳しく解説します。 今回もよろしくお願いします。

1. はじめに

データ分析の結果を見やすく提示することは、分析者にとっても非専門家に説明する際にも大変重要です。Seabornには多数のグラフ描画機能がありますが、その中でユニークな使い方ができる「stripplot」は、カテゴリごとのデータ点を散布図的にプロットし、分布を視覚的に理解する際に便利です。
一方で、同じPythonエコシステムのStreamlitを使うと、このグラフをシンプルなWebインターフェースで動的に表示できます。
本記事では、この2つを組み合わせて、手軽に分析結果をWeb上で共有できる手法をご紹介します。

2. StreamlitとSeabornについて

2.1 Streamlitとは

StreamlitはPythonコードだけで簡単にインタラクティブなWebアプリを作成できるオープンソースのフレームワークです。
特徴としては以下が挙げられます。

  • Pythonがわかればすぐに使える
  • 実行が高速でセットアップが簡単
  • データ可視化を簡単にWebアプリ化可能

Streamlitについては、こちらの記事一覧を参考にしてください。基本的な使い方から実践的な内容まで170本以上の記事があります。

Streamlit
PythonのWEBフレームワークであるStreamlitについての記事を集めたページです。

2.2 Seabornとは

SeabornはMatplotlibをベースにした高レベルの統計データ可視化ライブラリです。
特徴としては、

  • 美しくて高度なグラフが手軽に作成可能
  • 統計的な視覚化に最適化されている
  • Pandasのデータフレームとの相性が良い

こちらの記事も参考になさってください。

2.3 StreamlitとSeabornの連携の重要性

Seabornで作成したグラフを静止画として保存し表示するだけでなく、Streamlitの画面上にインタラクティブに表示することで、ユーザーが操作しやすいダッシュボードの構築が可能となります。
例えばユーザーによる入力値の変更でグラフを更新するような使い方ができ、データ分析の成果をより深く伝えられるようになります。

3. 環境のセットアップ

3.1 必要なソフトウェア・ライブラリのインストール

まずはPython環境に必要なライブラリをインストールしましょう。

Bash
pip install streamlit seaborn matplotlib pandas

各パッケージの説明:

  • streamlit:Webアプリ作成フレームワーク
  • seaborn:グラフ作成ライブラリ
  • matplotlib:Seabornの描画に使用されるベースグラフライブラリ
  • pandas:データ操作用ライブラリ

3.2 インストールの確認方法

ターミナルやコマンドプロンプトで以下のコマンドを実行し、エラーなくバージョンが表示されれば成功です。

Bash
python -c "import streamlit; print(streamlit.__version__)"
python -c "import seaborn; print(seaborn.__version__)"
python -c "import pandas; print(pandas.__version__)"

4. stripplotの基本概念

4.1 stripplotとは

stripplotはカテゴリ変数の分布を示すグラフで、カテゴリごとの点(散布図)を横並びで表示します。
データの分布やばらつき、どのカテゴリにデータが集中しているかを視覚的に把握できるのが特徴です。

4.2 stripplotが適用されるケース

  • グループごとの個々のデータ点を比較したい場合
  • データにばらつきや外れ値があるかを確認したい場合
  • 箱ひげ図などの要約情報より詳細なデータ分布を見たい場合

5. データの前処理

5.1 データセットの選択

今回はSeabornに標準搭載されている「tips(チップのデータセット)」を使用します。
このデータセットには食事代のチップや客数、曜日、性別といった情報が含まれます。

Python
import seaborn as sns

tips = sns.load_dataset("tips")
print(tips.head())

5.2 データのクリーニングと整形

今回は欠損値がほとんどないため追加のクリーニングは不要ですが、もし欠損値があれば

Python
tips = tips.dropna()

などで事前に対処します。

5.3 データの準備(Seabornで使用するための形式)

stripplotでは、x軸にカテゴリ変数、y軸に数値変数を指定するのが基本です。
例えば曜日ごとのチップ額を表示する場合、

  • x: day (カテゴリ変数)
  • y: tip (数値変数)

6. Streamlitアプリへの統合方法

6.1 Streamlitアプリの基本構造

最低限のファイル app.py を作成し、Streamlitで起動します。

Python
import streamlit as st

st.title("Seaborn stripplot with Streamlit")

ターミナルで以下コマンドし、ローカルサーバーを立ち上げます。

Bash
streamlit run app.py

6.2 stripplotの描画コードの組み込み

SeabornのグラフをStreamlitに表示するには、MatplotlibのFigureオブジェクトを渡す方法が標準的です。
下面のサンプルでは、「day」ごとの「tip」分布をstripplotで描き、Streamlitで表示します。

Python
import streamlit as st
import seaborn as sns
import matplotlib.pyplot as plt

# データ読み込み
tips = sns.load_dataset("tips")

st.title("Seaborn stripplot Example")

# Figureを作成
fig, ax = plt.subplots(figsize=(8, 5))
sns.stripplot(x="day", y="tip", data=tips, ax=ax)

st.pyplot(fig)
Seaborg stripplot on Streamlit app

6.3 アプリの動作確認

保存後、再度

Bash
streamlit run app.py

で起動し、ブラウザに表示されたstripplotが正しく表示されることを確認してください。

7. stripplotのカスタマイズ技法

7.1 カラーの変更

色を変えるには palette オプションを使います。

Python
sns.stripplot(x="day", y="tip", data=tips, ax=ax, palette="Set2")

自分で色をリストで指定することも可能です。

Python
custom_palette = ["#FF6347", "#3CB371", "#1E90FF", "#FFD700"]
sns.stripplot(x="day", y="tip", data=tips, ax=ax, palette=custom_palette)

7.2 サイズの調整

点のサイズを変えるには size オプションを用います。

Python
sns.stripplot(x="day", y="tip", data=tips, ax=ax, size=8)

7.3 ラベルの追加・編集

軸ラベルやタイトルはMatplotlibの関数で設定します。

Python
ax.set_title("Tips by Day - Stripplot")
ax.set_xlabel("Day of Week")
ax.set_ylabel("Tip Amount")

7.4 その他のカスタマイズオプション

  • jitter=True や数値の調整で点の横スライドを制御
  • hue を使って別カテゴリで色分け表示可能(例:性別で違い表示)

例:

Python
sns.stripplot(x="day", y="tip", hue="sex", data=tips, ax=ax, jitter=True, palette="coolwarm")

8. 実践的なサンプルプロジェクト

8.1 プロジェクトの概要

来店データを基に曜日ごとの客層や支払ったチップの分布を分析し、飲食店のスタッフ研修資料として活用するWebアプリの作成を想定します。

8.2 プロジェクトでのstripplotの使用方法

曜日別のチップ分布や性別による違いをstripplotで可視化し、店長やスタッフが直感的に理解できるインターフェースを提供します。

Python
import streamlit as st
import seaborn as sns
import matplotlib.pyplot as plt

st.title("飲食店チップ分析ダッシュボード")

tips = sns.load_dataset("tips")

# 性別で色分けしつつstripplotを描く
fig, ax = plt.subplots(figsize=(8, 5))
sns.stripplot(x="day", y="tip", hue="sex", data=tips, jitter=True, dodge=True, ax=ax, palette="Set1")

ax.set_title("曜日ごとのチップ分布(性別別)")
ax.set_xlabel("曜日")
ax.set_ylabel("チップ額")
ax.legend(title="性別")

st.pyplot(fig)
Seaborn stripplot on Streamlit

8.3 プロジェクトでのStreamlitとSeabornの組み合わせの利点

  • コードがシンプルかつ可読性が高い
  • Webブラウザでリアルタイムに表示・共有が簡単
  • ユーザー入力を追加すれば動的にグラフを更新できるため応用範囲が広い

9. まとめ

  • stripplotはカテゴリごとのデータ点の分布を詳細に見るために適したグラフ
  • StreamlitはSeabornの図をWebアプリで簡単に表示できる強力なツール
  • 環境構築から実際の描画、カスタマイズまでステップバイステップで習得可能
  • 簡単なサンプルから実践的なプロジェクトへ発展可能

10. 参考資料

最後まで読んでいただきありがとうございます。

コメント

タイトルとURLをコピーしました