Squadbase

探索的データ分析 (EDA) Copilot

Streamlit Streamlit

概要

この「EDA Copilot」アプリは、ユーザーがデータセット(CSV/Excel)をアップロードすると、自然言語での問いかけに応じて探索的データ分析(EDA)レポートを生成・表示するインタラクティブな仕組みを提供します。バックエンドではOpenAIのLLMと、Business Scienceチームの EDAToolsAgent を組み合わせ、各種可視化や要約、分析結果などを動的に作成します。

オリジナルのプロジェクトは、Business Scienceが公開している"Exploratory Data Analysis Copilot App " で、Squadbase向けにカスタマイズしています。

カスタマイズ

以下では、特に「データ取り込み/前処理の汎用化」「AIエージェント/モデルロジックの拡張」「レポート/エクスポート機能の強化」の3点にフォーカスし、実際にどのコード箇所を手を入れればよいかを解説します。


1. データ取り込み/前処理の汎用化

CSV や Excel に限らず、データベースやクラウドストレージ、API 経由のストリーミングデータも扱えるようにすることで、さまざまな現場のニーズに対応できます。読み込み時に欠損値補完や型変換のオプションを入れ、データを一貫した形に正規化することで、分析エージェントの応答精度を高められます。

対象コード箇所

uploaded_file = st.sidebar.file_uploader(
    "Upload CSV or Excel file", type=["csv", "xlsx"]
)
st.session_state["DATA_RAW"] = df.copy()

カスタマイズ例

  • 多様な入力形式の追加

    • st.sidebar.file_uploadertype 引数に ["csv","xlsx","json","parquet"] を拡張。
    • たとえば JSON や Parquet なら pd.read_jsonpd.read_parquet を呼び出す分岐を追加。
  • 前処理パイプラインの挿入

    • df.copy() の直後に共通関数 def preprocess(df): … を呼び出し、欠損値補完や日付列のパース、型キャストを行う。

    • 例:

      df = preprocess(df)
      st.session_state["DATA_RAW"] = df.copy()

2. AIエージェント/モデルロジックの拡張

利用する LLM やエージェント(LangChain、RAG、ファインチューニングモデルなど)をプラグイン形式で切り替えられるようにします。たとえば記述統計に特化した軽量エージェントや、可視化専門のモジュールを並列で起動し、質問内容に応じて最適なエージェントを自動ルーティングする仕組みを作ると、より精緻な応答が可能になります。

対象コード箇所

def process_exploratory(question: str, llm, data: pd.DataFrame) -> dict:
    eda_agent = EDAToolsAgent(
        llm,
        invoke_react_agent_kwargs={"recursion_limit": 10},
    )
    eda_agent.invoke_agent(...)

カスタマイズ例

  • エージェント切り替え機構

    • サイドバーに「軽量統計エージェント」「可視化専用エージェント」の選択肢を追加し、process_exploratory 呼び出し前に分岐。

      agent_type = st.sidebar.selectbox("Agent Type", ["EDA","Stats","Viz"])
      if agent_type == "Stats":
          from ai_data_science_team.ds_agents import StatsAgent
          agent = StatsAgent(llm)
      elif agent_type == "Viz":
          from ai_data_science_team.ds_agents import VizAgent
          agent = VizAgent(llm)
      else:
          agent = EDAToolsAgent(llm, ...)
  • LLMモデルのプラグイン対応

    • ChatOpenAI(model=model_option,…) 部分をラップして、社内ファインチューニングモデルや RAG 用 RetrievalLLM を選択できるようにする。

3. レポート/エクスポート機能の強化

生成したグラフやテーブル、HTMLレポートをその場で PDF・PowerPoint・Excel にまとめてダウンロードできるようにし、社内配布やプレゼン資料への二次利用を容易にします。さらにレポートテンプレートを用意し、あらかじめレイアウトやセクションを固定しておくことで、品質を担保しつつ定型業務を自動化できます。

対象コード箇所

# 最終的なアーティファクト表示直後
if artifact_list:
    st.session_state["chat_artifacts"][msg_index] = artifact_list
display_chat_history()

カスタマイズ例

  • PDF/PowerPoint出力の挿入

    • display_chat_history() を呼ぶ前、または各アーティファクトの下にボタンを設置。

      if st.button("Download PDF Report"):
          pdf_bytes = generate_pdf(msgs.messages, st.session_state["chat_artifacts"])
          st.download_button("Here is your report", data=pdf_bytes, file_name="EDA_report.pdf")
    • generate_pdfreportlabpython-pptx を使った汎用関数を別ファイルに定義しておきます。

  • テンプレート化

    • HTML レポート用テンプレート(Jinja2)を用意し、render_report_iframe を呼ぶ前にレンダリング。PowerPoint 版も同様にスライド用テンプレートを読み込んで図表とテキストを流し込みます。

以上のように、データ入力エージェント選択レポート出力という3つのフェーズを起点に、それぞれ対応するコード箇所にフックポイントを設けることで、社内データフローやユースケースに応じた高度なカスタマイズが実現できます。まずは一箇所ずつ小さく手を入れて、動作を確認しながら段階的に機能を拡張してみてください。

探索的データ分析 (EDA) Copilot | Squadbase Showcase