サイトアイコン アマチュア無線局JS2IIU

【Streamlit】 st.data_editor()で編集可能なデータフレームを表示する

こんにちは、JS2IIUです。
Streamlit上で編集可能なデータを表示することができるst.data_editor()について事例を交えて説明していきます。今回もよろしくお願いします。

st.data_editor()とは?

Streamlit の st.data_editor() は、Webアプリケーション内で直接データを対話的に編集できる強力な関数です。従来のデータ表示にとどまらず、ユーザーがリアルタイムでデータを変更、追加、削除できる機能を提供します。

主な特徴と機能

st.data_editor() は以下のような豊富な機能を備えています:

  1. インタラクティブなデータ編集
  1. データ型のサポート
  1. 高度なカスタマイズ

関数シグネチャ

Python
st.data_editor(
    data,
    *,
    key=None,
    num_rows='fixed' | 'dynamic',
    disabled=False,
    column_config=None,
    hide_index=None,
    max_rows=None,
    use_container_width=None
)

主要パラメータ詳細

活用事例 1: タスク管理アプリケーション

Python
import streamlit as st
import pandas as pd
from datetime import datetime, timedelta

def task_management_app():
    st.title('インタラクティブ タスク管理')

    # 初期タスクデータの作成
    initial_tasks = pd.DataFrame({
        'タスク名': ['プロジェクト計画', 'デザインレビュー', 'コーディング'],
        '優先度': ['', '', ''],
        '期限': [
            datetime.now() + timedelta(days=7),
            datetime.now() + timedelta(days=14),
            datetime.now() + timedelta(days=30)
        ],
        '完了': [False, False, False]
    })

    # データエディタでタスクを編集
    edited_tasks = st.data_editor(
        initial_tasks, 
        num_rows='dynamic',
        column_config={
            '優先度': st.column_config.SelectboxColumn(
                '優先度',
                options=['', '', ''],
                required=True
            ),
            '期限': st.column_config.DateColumn('期限'),
            '完了': st.column_config.CheckboxColumn('完了')
        }
    )

    # 編集されたタスクの表示
    st.write('現在のタスクリスト:', edited_tasks)

    # タスク分析
    completed_tasks = edited_tasks[edited_tasks['完了'] == True]
    st.write(f'完了タスク数: {len(completed_tasks)}')

task_management_app()

解説:タスク管理アプリケーション

  1. pandas DataFrameを使用して初期タスクリストを作成
  2. st.data_editor()で以下をカスタマイズ
  1. 編集されたタスクを表示
  2. 完了タスクの集計

活用事例 2: 売上データ分析アプリ

Python
import streamlit as st
import pandas as pd
import numpy as np

def sales_data_analysis_app():
    st.title('インタラクティブ 売上データ分析')

    # 初期売上データの作成
    initial_sales = pd.DataFrame({
        '製品': ['ノートPC', 'スマートフォン', 'タブレット', 'スマートウォッチ'],
        '単価': [100000, 80000, 50000, 30000],
        '販売数': [50, 75, 100, 120],
    })

    # 売上列を計算
    initial_sales['売上'] = initial_sales['単価'] * initial_sales['販売数']

    # データエディタで売上データを編集
    edited_sales = st.data_editor(
        initial_sales, 
        num_rows='dynamic',
        column_config={
            '単価': st.column_config.NumberColumn('単価(円)', min_value=0),
            '販売数': st.column_config.NumberColumn('販売数', min_value=0),
            '売上': st.column_config.NumberColumn('売上(円)', disabled=True)
        }
    )

    # 売上列を自動更新
    edited_sales['売上'] = edited_sales['単価'] * edited_sales['販売数']

    # 売上分析
    total_sales = edited_sales['売上'].sum()
    st.metric('総売上', f'{total_sales:,}円')

    # 売上チャート
    st.bar_chart(edited_sales.set_index('製品')['売上'])

sales_data_analysis_app()

解説:売上データ分析アプリ

まとめ

st.data_editor()は、Streamlitアプリケーションにおけるデータ操作の可能性を大きく広げます。インタラクティブな編集、リアルタイムな更新、高度なカスタマイズにより、より動的で使いやすいアプリケーションを簡単に構築できます。

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

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

モバイルバージョンを終了