【Streamlit】フィルター機能を追加:特定の条件でデータを絞り込む

Streamlit
この記事は約6分で読めます。

こんにちは、JS2IIUです。
今回はデータのフィルタリングを実装していきます。フィルタリング機能により必要なデータに絞り込み、特徴を捉えやすくすることができます。今回もよろしくお願いします。

はじめに

Streamlitでは、インタラクティブなユーザーインターフェースを簡単に作成できるのが大きな魅力です。特に、データのフィルター機能を追加することで、ユーザーが特定の条件で情報を絞り込むことができ、より使いやすいアプリケーションになります。

この記事では、以下のようなフィルターウィジェットを使って、Pandasのデータフレームを動的に絞り込む方法を紹介します。

  • st.multiselect(複数選択)
  • st.slider(範囲指定)

フィルター機能とは?

フィルター機能とは、データの中から条件に合うものだけを抽出して表示する仕組みのことです。

例えば:

  • 特定の「カテゴリ」のみ表示したい
  • 「価格」が1000円以上2000円以下のデータだけを見たい

といった要望に応えることができます。

Streamlitではこれらの条件を簡単にインタラクティブに指定でき、結果が即時に画面に反映されるため、非常に直感的な操作が可能です。

サンプルデータの準備

まずは、以下のような簡単な商品データをPandasで用意します。

Python
import streamlit as st
import pandas as pd

# サンプルデータ作成
data = {
    '商品カテゴリ': ['A', 'B', 'A', 'C', 'B', 'C'],
    '価格': [1000, 1500, 1200, 1800, 1600, 2000]
}
df = pd.DataFrame(data)

st.subheader("📊 元のデータ")
st.dataframe(df)

このコードでは、商品カテゴリと価格を含んだ6件のデータを用意しています。

st.multiselect を使ったカテゴリのフィルター

次に、st.multiselect を使って商品カテゴリを選択できるようにし、そのカテゴリに該当する行だけを表示してみましょう。

Python
# カテゴリでフィルター
selected_categories = st.multiselect(
    "🎯 表示する商品カテゴリを選択してください",
    options=df["商品カテゴリ"].unique()
)

# 条件に一致するデータを抽出
if selected_categories:
    filtered_df = df[df["商品カテゴリ"].isin(selected_categories)]
else:
    filtered_df = df.copy()

st.subheader("🔍 カテゴリでフィルターした結果")
st.dataframe(filtered_df)

ポイント:

  • 選択肢には df["商品カテゴリ"].unique() を使って重複を除いたカテゴリを表示
  • 何も選択されていない場合は元のデータをそのまま表示

st.slider を使った価格帯のフィルター

次に、価格の範囲をスライダーで指定し、範囲内の商品だけを表示します。

Python
# 価格でフィルター
min_price, max_price = st.slider(
    "💰 表示する価格帯を選んでください",
    min_value=int(df["価格"].min()),
    max_value=int(df["価格"].max()),
    value=(int(df["価格"].min()), int(df["価格"].max()))
)

# 範囲に合致するデータの抽出
filtered_df = filtered_df[
    (filtered_df["価格"] >= min_price) & (filtered_df["価格"] <= max_price)
]

st.subheader("📉 価格帯でさらにフィルターした結果")
st.dataframe(filtered_df)

ポイント:

  • slider で指定できる範囲を自動でデータから取得
  • value に初期値として最小〜最大値の範囲を設定

複数条件を組み合わせて使う

上記のコードでは、multiselectslider両方の条件 を使ってデータをフィルタリングしています。Streamlitではこのように複数のウィジェットの値を組み合わせて、リアルタイムにデータを絞り込むことができます。

よくあるエラーと対処法

エラー例対処法
KeyError が出る存在しない列名を参照していないか確認
空のリストで .isin() を使うとデータが空になる条件が空ならフィルターしないように分岐を追加
slider でデータ範囲外を指定すると空になるmin/maxdf["列名"].min()/max() で動的に設定

まとめ

今回は、Streamlitでフィルター機能を追加する方法を紹介しました。ポイントは以下の通りです。

  • st.multiselect でカテゴリの複数選択ができる
  • st.slider で数値の範囲指定ができる
  • それらを組み合わせることで、柔軟なフィルター操作が可能

Streamlitは簡潔なコードで直感的なUIが作れるため、初めての方でも扱いやすいフレームワークです。ぜひ自分のデータで試してみてください!

参考リンク

最後に書籍のPRです。
24年9月に出版された「ハイパーモダンPython-信頼性の高いワークフローを構築するモダンテクニック」、Claudio Jolowicz著、嶋田、鈴木訳。開発環境の構築、プロジェクトの管理、テストに関して実践的な内容でとても参考になる一冊です。Poetryについても詳しく説明されています。ぜひ手に取ってみてください。

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

コメント

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