Skip to content

Streamlit DataFrame:PandasのDataFrameの表示、スタイリング、最適化

データサイエンスの世界では、データを可視化し、データと対話する能力が重要です。PythonのライブラリであるStreamlitは、データとの対話を革新し、対話型でデータ豊かなWebアプリケーションを簡単に作成できるようにしました。Streamlitの最も強力な機能の一つは、データ操作ライブラリであるPandasで使用されるデータ構造であるDataFrameと連携する機能です。この記事では、Streamlit DataFrameの世界について探求し、PandasのDataFrameを表示、スタイリング、最適化してシームレスなデータ分析体験を実現する方法について説明します。

Streamlit DataFrameとは?

Streamlit DataFrameは、Streamlitライブラリの機能であり、PandasのDataFrameをインタラクティブで視覚的に魅力的な方法で表示できます。通常、JupyterノートブックやPythonスクリプトで静的な形式で表示される通常のPandasのDataFrameを、動的なWebベースのアプリケーションで活用できるようになります。

StreamlitのDataFrame機能は、Pythonの強力なデータ操作ライブラリであるPandasの上に構築されています。PandasのDataFrameは、ラベル付けされた軸を持つ2次元、サイズが可変で異種の表形式のデータ構造です。非常に多機能であり、データサイエンティストのツールキットには欠かせません。Streamlitは、PandasのDataFrameの機能を強化し、対話的に表示や操作ができるプラットフォームを提供します。

Streamlit DataFrameチュートリアル

StreamlitアプリをTableauのようなユーザインターフェースに簡単に変換することができる、この素晴らしいデータ分析・データ視覚化ツールを知っていますか?

PyGWalker (opens in a new tab)は、Streamlitアプリを手軽にTableauのようなUIに組み込むためのPythonライブラリで、あなたのStreamlitアプリをパワフルなデータ可視化用のライブラリで強化する詳細な手順を紹介している、Coding is Fun (opens in a new tab)Svenさんが作成した素晴らしいビデオ (opens in a new tab)をチェックしてみてください。


PyGWalkerコミュニティへの素晴らしい貢献 (opens in a new tab)をしているSvenさんに特別な感謝を申し上げます!

さらに、PyGWalker GitHubページ (opens in a new tab)でも、さまざまなPyGWalkerの例を確認することができます。

Streamlit DataFramesのはじめ方

Streamlit DataFrameをはじめるには、まずStreamlitをインストールする必要があります。ターミナルで pip install streamlit コマンドを実行することでインストールできます。Streamlitがインストールされたら、Pandasと共にPythonスクリプトでそれをインポートすることができます。

import streamlit as st
import pandas as pd

次に、表示するためのシンプルなDataFrameを作成しましょう。この例では、異なる種類のフルーツのデータを持つDataFrameを使用します。

data = {
    'Fruit': ['Apple', 'Banana', 'Cherry', 'Date', 'Elderberry'],
    'Quantity': [10, 15, 20, 25, 30],
    'Price': [0.5, 0.25, 0.75, 1.0, 2.0]
}
df = pd.DataFrame(data)

このDataFrameをStreamlitで表示するには、st.dataframe() 関数を使用するだけです。

st.dataframe(df)

Streamlitアプリを実行すると、DataFrameがインタラクティブなテーブルとして表示されます。列のヘッダをクリックしてテーブルをソートしたり、テーブルの幅や高さをコーナーをドラッグして調整したりすることができます。

これはStreamlit DataFrameでできることの基本的な例です。このトピックをさらに深く掘り下げると、データ可視化をさらに進化させるために役立つさまざまな機能や技術が見つかるでしょう。

StreamlitでのDataFrameの表示

Streamlitを使用してDataFrameをインタラクティブなテーブルとして表示する方法

DataFrameをStreamlitでインタラクティブなテーブルとして表示するには、前のセクションで説明したように st.dataframe() 関数を使用するだけです。ただし、DataFrameを表示するだけではなく、表示をカスタマイズすることもできます。

たとえば、height パラメータを使用して表示する行数を設定することができます。これは、大きなDataFrameを扱う場合に特に便利です。以下に例を示します。

st.dataframe(df, height=300)

この例では、DataFrameは高さが300ピクセル(およそ10行)に合うように表示されます。DataFrameが10行より多い場合、データをスクロールするためのスクロールバーが表示されます。

また、特定の条件に基づいてDataFrameの特定のセルをハイライトすることもできます。たとえば、ある閾値を超える値を含むセルをハイライトする場合が考えられます。これはDataFrameの style メソッドを使用して次のように行うことができます。

st.dataframe(df.style.highlight_max(axis=0))

この例では、各列の最大値を持つセルがハイライトされます。highlight_max() メソッド内の条件を修正することで、ハイライトをカスタマイズすることができます。

Streamlitでの大きなDataFrameの処理

Streamlitで大きなDataFrameを扱うことは、パフォーマンスや使いやすさの観点から少し難しいかもしれません。しかし、Streamlitには大きなDataFrameを効果的に処理するためのいくつかの機能が用意されています。 ある機能の一つは、ページネーションです。ページネーションを使用すると、大きなDataFrameをより小さな、管理しやすいチャンクで表示することができます。特に、数百行や数千行のDataFrameを扱っている場合に便利です。

Streamlitでページネーションを実装するには、st.beta_container()関数とforループを組み合わせて使用します。以下に例を示します:

container = st.beta_container()
for i in range(0, len(df), 50):
    container.dataframe(df[i:i+50])

この例では、DataFrameが50行ずつのチャンクに分割され、各チャンクが別のコンテナに表示されます。スクロールバーを使用してチャンクをナビゲートすることができます。

StreamlitでのDataFrameのスタイリング

StreamlitでCSSを使用してDataFrameをスタイル付けできますか?

はい、StreamlitではCSSを使用してDataFrameをスタイル付けすることができます。Streamlitは、st.markdown()関数を使用してDataFrameにCSSスタイルを適用することができます。この関数を使用すると、HTMLおよびCSSコードを直接Streamlitアプリに記述することができます。

たとえば、次のようにしてDataFrameの背景色を変更することができます:

st.markdown("""
<style>
table {background-color: #f0f0f0;}
</style>
""", unsafe_allow_html=True)
st.dataframe(df)

この例では、st.markdown()関数を使用して、テーブルの背景色をライトグレーに変更するCSSスタイルを定義しています。unsafe_allow_html=Trueパラメータは、HTMLおよびCSSの使用を許可するために必要です。

Streamlit DataFrameのスタイリング

CSSの他にも、StreamlitはDataFrameに対してさまざまなスタイルを適用するための多くの組み込み関数を提供しています。これらの関数を使用すると、特定のセルをハイライトしたり、テキストの色を変更したりするなど、DataFrameにさまざまなスタイルを適用することができます。

たとえば、highlight_max()関数を使用して、各列の最大値を持つセルをハイライトすることができます。また、background_gradient()関数を使用して、DataFrameにカラーグラデーションを適用することもできます。次のように使えます:

st.dataframe(df.style.background_gradient(cmap='Blues'))

この例では、カラーグラデーションがDataFrameに適用され、色の強度がDataFrameの値に対応しています。cmapパラメータは、グラデーションに使用するカラーマップを指定します。

StreamlitでのDataFrameの最適化

Streamlitを使用したPandas DataFrameの最適化方法

StreamlitでPandas DataFrameを最適化するには、特に大規模なデータセットを扱う場合に、パフォーマンスと効率を改善する必要があります。Streamlitには、キャッシュとメモリの最適化など、DataFrameの最適化に役立ついくつかの機能が用意されています。

Streamlitのキャッシュ機能を使用すると、大きなDataFrameを処理する際にアプリのパフォーマンスを大幅に改善することができます。@st.cacheデコレータを使用することで、DataFrameが一度だけ計算され、その結果がキャッシュに格納されるようになります。以下に例を示します:

@st.cache
def load_data():
    # ここでDataFrameをロードします
    df = pd.read_csv('large_dataset.csv')
    return df
 
df = load_data()
st.dataframe(df)

この例では、CSVファイルから大規模なDataFrameをロードするload_data()関数に@st.cacheが付けられています。これはDataFrameが一度だけロードされ、その結果がキャッシュに格納されることを意味しています。Streamlitアプリを再実行するときには、DataFrameが再計算される代わりにキャッシュからロードされるため、多くの時間を節約することができます。

Streamlit DataFrameのキャッシュとパフォーマンスのヒント

Streamlitのキャッシュ機能の力を最大限に活用することで、アプリのパフォーマンスを大幅に向上させることができます。ただし、予期しない動作を防ぐために、適切に使用することが重要です。次に、覚えておくべきいくつかのキーポイントを示します:

  • 関数の入力パラメータ: @st.cacheデコレータは、関数の入力パラメータに基づいて結果をキャッシュします。これらのパラメータが変更されると、関数が再計算されます。これは、ユーザーの入力に基づいてDataFrameを更新したい場合に特に有用です。
@st.cache
def load_data(file_name):
    # ここでDataFrameをロードします
    df = pd.read_csv(file_name)
    return df
 
# ファイル名のユーザー入力
file_name = st.text_input('ファイル名を入力してください')
df = load_data(file_name)
st.dataframe(df)
  • 出力の変更: Streamlitでは、出力を変更する関数をキャッシュするために、@st.cacheデコレータでallow_output_mutation=Trueパラメータを使用することができます。ただし、正しく使用しないと予期しない動作が発生する可能性があるため、注意が必要です。
@st.cache(allow_output_mutation=True)
def load_and_process_data(file_name):
    # ここでDataFrameをロードして処理します
    df = pd.read_csv(file_name)
    df['new_column'] = df['old_column'].apply(some_function)
    return df
  • DataFrameの表示制限: 大規模なDataFrameを扱う場合は、一度に表示するデータ量を制限することをおすすめします。st.dataframe()関数でheightパラメータを使用することで、これを実現することができます。これにより、アプリのパフォーマンスが大幅に向上し、ユーザーエクスペリエンスが向上します。
# DataFrameの一部のみを表示する
st.dataframe(df, height=300)

Streamlit DataFrame:高度な使用例

Streamlit DataFrameのフィルタリング

フィルタリングは、特定の条件に基づいてデータのサブセットを選択するデータ分析でよく使用される操作です。Streamlitでは、ライブラリが提供するインタラクティブなウィジェットを使用して、DataFrameのフィルタリングを簡単に実装することができます。

たとえば、セレクトボックスを使用してユーザーがフィルタリングする列を選択し、スライダーを使用して含める値の範囲を選択することができます。以下に例を示します:

column = st.selectbox('フィルタリングする列を選択してください', df.columns)
min_val, max_val = st.slider('値の範囲を選択してください', min(df[column]), max(df[column]), (min(df[column]), max(df[column])))
filtered_df = df[(df[column] >= min_val) & (df[column] <= max_val)]
st.dataframe(filtered_df)

機械学習における Streamlit データフレーム

Streamlit は、データ可視化のためだけでなく、機械学習の強力なツールでもあります。Streamlit を使用して対話型の機械学習アプリを作成し、データを表示し、モデルをトレーニングし、結果を視覚化することができます。

例えば、Streamlit アプリを使用して、トレーニングデータの DataFrame を表示し、データのフィルタリングやソートを行うことができます。そして、ボタンを使用してこのデータ上で機械学習モデルをトレーニングし、結果を対話型のプロットで表示することができます。

以下は、シンプルな例です:

from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
 
# データフレームを表示
st.dataframe(df)
 
# モデルのトレーニングボタン
if st.button('モデルをトレーニング'):
    # データをトレーニングとテストセットに分割
    X_train, X_test, y_train, y_test = train_test_split(df.drop('target', axis=1), df['target'], test_size=0.2, random_state=42)
 
    # モデルのトレーニング
    model = RandomForestClassifier(n_estimators=100, random_state=42)
    model.fit(X_train, y_train)
 
    # 予測を行い正確性を計算
    y_pred = model.predict(X_test)
    accuracy = accuracy_score(y_test, y_pred)
 
    # 正確性を表示
    st.write(f'正確性: {accuracy*100:.2f}%')

この例では、RandomForestClassifier を DataFrame df に対してトレーニングし、'target' をターゲット変数とします。その後、モデルの正確性が Streamlit アプリに表示されます。

これは、機械学習の領域で Streamlit で行える一例に過ぎません。可能性は無限であり、Streamlit の対話型の性質により、パワフルで使いやすい機械学習アプリを作成することができます。

結論

Streamlit は、データとの対話を革新し、対話型でデータ豊富な Web アプリケーションを作成することを容易にしました。Pandas DataFrames とのシームレスな連携能力により、データの可視化と分析の可能性が広がりました。経験豊富なデータサイエンティストであろうと初めて始める初心者であろうと、Streamlit は DataFrames の表示、スタイル、最適化を容易かつ使いやすいプラットフォームで提供しています。

では、なぜ待つ必要があるでしょうか?今日から Streamlit DataFrame の世界を探索してみましょう!

Streamlit アプリを Tableau に変える素晴らしいデータ分析&データ可視化ツールをご存知ですか?

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

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

よくある質問

  1. Streamlit で DataFrame のスタイルをどのように設定できますか? CSS と組み込みのスタイル関数の両方を使用して、Streamlit で DataFrame のスタイルを設定できます。例えば、CSS を使用して DataFrame の背景色を変更したり、background_gradient() 関数を使用してカラーグラデーションを適用したりすることができます。

  2. Streamlit で DataFrame をフィルタリングするにはどうすればよいですか? Streamlit は対話型のウィジェットを提供しており、それを使用して DataFrame をフィルタリングすることができます。例えば、セレクトボックスを使用してユーザーがフィルタリングする列を選択したり、スライダーを使用して含める値の範囲を選択したりすることができます。

  3. Streamlit で DataFrame に画像を表示することはできますか? はい、Streamlit で DataFrame に画像を表示することができます。st.image() 関数を使用して、DataFrame に格納された画像を表示することができます。ただし、このためには画像が URL またはバイナリデータとして格納されている必要があります。