Streamlit のデータ編集機能と、それを利用した Snowflake テーブル編集についての記事の紹介です。最後に Looker と Streamlit を合わせて使っている記事を見つけたので、それも紹介します。
Streamlit data editor
Streamlit のプレビュー機能ですが、編集可能なテーブルが先月2023年2月に登場しました。以下の gif は公式ドキュメントのサンプルをキャプチャしたものです。セルをダブルクリックすることで編集モードとなり、値が編集できます。
使うのは簡単で、データフレームなどのデータオブジェクトを st.experimental_data_editor
メソッドへ渡すだけです。返り値もデータオブジェクトとなり、上の例では rating
が最も高いコマンドを動的に表示しています。
import streamlit as st import pandas as pd df = pd.DataFrame( [ {"command": "st.selectbox", "rating": 4, "is_widget": True}, {"command": "st.balloons", "rating": 5, "is_widget": False}, {"command": "st.time_input", "rating": 3, "is_widget": True}, ] ) edited_df = st.experimental_data_editor(df, num_rows="dynamic") favorite_command = edited_df.loc[edited_df["rating"].idxmax()]["command"] st.markdown(f"Your favorite command is **{favorite_command}** 🎈")
Editable Snowflake Tables in Streamlit (a Demo)
この機能を利用して、Snowflake のテーブルを Streamlit から編集している記事を見つけました。
コードサンプルから要点だけ取り出すと、st.experimental_data_editor
で編集した結果を write_pandas
メソッドへ渡し、Snowflake の COPY INTO
コマンドを呼び出しています:
dataset = session.table("ESG_SCORES_DEMO") with st.form("data_editor_form"): edited = st.experimental_data_editor(dataset, use_container_width=True, num_rows="dynamic") submit_button = st.form_submit_button("Submit") if submit_button: try: session.write_pandas(edited, "ESG_SCORES_DEMO", overwrite=True)
ここでは overwrite=True
が設定されていて、テーブルに COPY INTO を発行する前に TRUNCATE してデータを毎回上書きするようになっています。公式ドキュメントではこのオプションは記載されていませんでしたが、GitHub 側のコードを見ると実装されていました:
データリテラシーが高くないけれど自分で Snowflake にデータを作りたい…といった場合に選択肢の一つになりそうです。ただ今だと Streamlit をローカルで動かす必要があるので、データリテラシーが高くない人へ向けたデータ編集機能というとちょっと矛盾しています。Snowflake とのインテグレーションが完了したら、ビジネスユーザに向けたマスタテーブルの編集機能として提供するなど、いろいろな使い道がありそうです。
Building a Data Visualization App with Looker, Streamlit, and Plotly
Looker には詳しくないのですが、Looker に保存されたクエリを Streamlit から実行して可視化する記事がありました。
Streamlit は Python のフレームワークですが、Streamlit も Looker も、どちらも主にデータの可視化として使われるツールです。その2つを組み合わせると見たときに冗長だなと思ったのですが、Looker のレイヤで Google Cloud, AWS, Azure, オンプレミスデータ基盤などいろいろなデータとの連携をして抽象化することで、セマンティックレイヤとして見ることができる…かもしれません。Streamlit はデータサイエンティストがダッシュボードを作りやすいようなフレームワークとして開発されているかと思うのであちらこちらでアプリケーション開発がされるはずで、そうすると接続環境をどこかで抽象化したい場合に、Looker や、あとは前に紹介した dbt のセマンティックレイヤの機能などが使えるかもしれません。