
Pandasデータアナリスト
概要
「Pandas Data Analyst AI Copilot」は、Streamlit 上で動作するインタラクティブなデータ分析アプリケーションです。ユーザーが CSV や Excel ファイルをアップロードし、自然言語で質問を入力すると、バックエンドで OpenAI の LLM と Business Science チーム提供の各種エージェントを組み合わせて、データテーブルやインタラクティブなチャートを自動生成します。データサイエンティストだけでなく、分析経験の浅いユーザーでも手軽に探索的データ分析(EDA)や可視化を行えるのが大きな特徴です。
オリジナルのプロジェクトは、Business Scienceが公開している"Exploratory Data Analysis Copilot App " で、Squadbase向けにカスタマイズしています。
主な構成と流れ
1. アプリケーションの初期設定
起動時にページタイトルやアイコンを設定し、導入文でユーザーに使い方を示します。
st.set_page_config(
page_title="Pandas Data Analyst AI Copilot",
page_icon="📊",
)
st.title("Pandas Data Analyst AI Copilot")
st.markdown("""
Upload a CSV or Excel file and ask questions about the data.
The AI agent will analyze your dataset and return either data tables or interactive charts.
""")
2. OpenAI API キーの入力とモデル選択
サイドバーに API キー入力欄を設置し、キーの妥当性をチェック。さらに利用したいモデル(gpt-4o-mini/gpt-4o)を選択可能にしています。
st.sidebar.header("Enter your OpenAI API Key")
st.session_state["OPENAI_API_KEY"] = st.sidebar.text_input("API Key", type="password")
model_option = st.sidebar.selectbox("Choose OpenAI model", ["gpt-4o-mini", "gpt-4o"])
3. データアップロードとプレビュー
ユーザーがファイルをアップロードすると Pandas で読み込み、冒頭数行を表示します。
uploaded_file = st.file_uploader("Choose a CSV or Excel file", type=["csv","xlsx","xls"])
if uploaded_file is not None:
df = pd.read_csv(uploaded_file) if uploaded_file.name.endswith(".csv") else pd.read_excel(uploaded_file)
st.subheader("Data Preview")
st.dataframe(df.head())
else:
st.info("Please upload a CSV or Excel file to get started.")
st.stop()
4. チャット履歴の管理と表示
StreamlitChatMessageHistory
によって対話ログを管理し、生成されたチャートやテーブルを再表示します。
5. AI エージェント連携
PandasDataAnalyst
、DataWranglingAgent
、DataVisualizationAgent
を組み合わせ、ユーザーの問いに応じて前処理・可視化・要約を自動化します。
利用手順
- サイドバーで OpenAI API キーとモデルを登録
- CSV/Excel ファイルをアップロードしてデータ構造を確認
- チャットボックスに自然言語で質問を入力
- AI がテーブルやグラフを生成し、対話型に表示
- 追質問で分析を深掘り
カスタマイズ
業務要件や社内データフローに合わせ、以下のように拡張してみてください。
1. データ入力/前処理パイプラインの強化
-
多様なデータソースに対応
uploaded_file = st.file_uploader("Choose a file", type=["csv","xlsx","json","parquet"]) if uploaded_file.name.endswith(".json"): df = pd.read_json(uploaded_file) elif uploaded_file.name.endswith(".parquet"): df = pd.read_parquet(uploaded_file) else: # 既存のCSV/Excel処理
-
共通前処理関数の導入 アップロード直後に
preprocess(df)
を呼び出し、欠損値補完、日付パース、型キャストなどを一元管理します。def preprocess(df: pd.DataFrame) -> pd.DataFrame: # 欠損値補完や日付列変換など return df df = preprocess(df) st.session_state["DATA_RAW"] = df.copy()
2. エージェント/モデルロジックの拡張
-
エージェント切り替えオプション サイドバーに統計特化・可視化特化エージェントを追加し、
PandasDataAnalyst
の組み立て前に分岐します。agent_type = st.sidebar.selectbox("Agent Type", ["Default", "Stats", "Viz"]) if agent_type == "Stats": analyst = PandasDataAnalyst(model=llm, data_wrangling_agent=StatsAgent(llm), …) elif agent_type == "Viz": analyst = PandasDataAnalyst(model=llm, data_visualization_agent=VizAgent(llm), …) else: analyst = PandasDataAnalyst(model=llm, …)
-
社内ファインチューニングモデルや RAG 連携
ChatOpenAI(model=…)
をラップし、カスタム API エンドポイントや RetrievalLLM を組み込めるようにします。
3. レポート/エクスポート機能の追加
-
PDF/PowerPoint/Excel ダウンロード チャット履歴や生成アーティファクトの下にダウンロードボタンを配置。
reportlab
やpython-pptx
でバイト列を生成します。if st.button("Download PPTX Report"): pptx_bytes = generate_pptx(msgs.messages, st.session_state["plots"], st.session_state["dataframes"]) st.download_button("Here is your PPTX", data=pptx_bytes, file_name="analysis_report.pptx")
-
テンプレート化 Jinja2/PowerPoint テンプレートを用意し、図表やテキストを自動配置する仕組みを実装します。
まとめ
「Pandas Data Analyst AI Copilot」は、ノーコードで自然言語によるデータ分析を実現し、社内のあらゆるユーザーに即時インサイトを提供します。カスタマイズ性も高く、自社データパイプラインやエージェント戦略に合わせた拡張を段階的に行うことで、より高度な分析プラットフォームとして育てることが可能です。ぜひ手元のデータやユースケースに合わせ、まずは小さく機能追加からお試しください。