こんにちは、JS2IIUです。
Streamlit上で編集可能なデータを表示することができるst.data_editor()について事例を交えて説明していきます。今回もよろしくお願いします。
st.data_editor()とは?
Streamlit の st.data_editor() は、Webアプリケーション内で直接データを対話的に編集できる強力な関数です。従来のデータ表示にとどまらず、ユーザーがリアルタイムでデータを変更、追加、削除できる機能を提供します。
主な特徴と機能
st.data_editor() は以下のような豊富な機能を備えています:
- インタラクティブなデータ編集
- データフレーム内のセルを直接編集可能
- リアルタイムでのデータ更新
- 列の追加や削除
- 行の追加や削除
- データ型のサポート
- 数値
- 文字列
- 日付
- ブール値
- カスタムオブジェクト
- 高度なカスタマイズ
- 列の編集可否の設定
- デフォルト値の指定
- 入力検証
- 条件付き書式設定
関数シグネチャ
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
)主要パラメータ詳細
data: 編集対象のデータ(pandas DataFrame、NumPy配列、リストなど)num_rows: 行の追加・削除を制御'fixed': 行数固定'dynamic': 行の動的追加・削除可能disabled: 編集の無効化column_config: 列の詳細設定max_rows: 最大表示行数use_container_width: コンテナの幅に合わせる
活用事例 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()解説:タスク管理アプリケーション
- pandas DataFrameを使用して初期タスクリストを作成
st.data_editor()で以下をカスタマイズ
- 動的な行追加・削除
- 優先度のドロップダウン
- 日付選択
- チェックボックスでタスク完了状態を管理
- 編集されたタスクを表示
- 完了タスクの集計
活用事例 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()解説:売上データ分析アプリ
- 初期売上データをDataFrameで作成
st.data_editor()で以下をカスタマイズ- 動的な行追加・削除
- 単価と販売数の数値入力制限
- 売上列を自動計算(編集不可)
- 編集に応じて売上を自動再計算
- 総売上をメトリクスで表示
- 棒グラフで売上を可視化
まとめ
st.data_editor()は、Streamlitアプリケーションにおけるデータ操作の可能性を大きく広げます。インタラクティブな編集、リアルタイムな更新、高度なカスタマイズにより、より動的で使いやすいアプリケーションを簡単に構築できます。
- st.data_editor – Streamlit Docs
- Streamlitでデータ編集可能なテーブルGUIを実現!st.data_editorの使い方完全ガイド | アマチュア無線局JS2IIU
24年9月に出版された「ハイパーモダンPython-信頼性の高いワークフローを構築するモダンテクニック」、Claudio Jolowicz著、嶋田、鈴木訳。開発環境の構築、プロジェクトの管理、テストに関して実践的な内容でとても参考になる一冊です。Poetryについても詳しく説明されています。ぜひ手に取ってみてください。
最後まで読んでいただきありがとうございます。


コメント