3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

csvデータから分析レポートやダッシュボードをいい感じにAIエージェントで作らせる方法

3
Posted at

はじめに

この記事では、AIエージェント(Claude)を使って、csvファイルから自動的に分析レポートやインタラクティブなダッシュボードを作成する方法を説明します。

この記事の構成と狙い

この記事では最終的にcsvデータの分析を行いますが、そのために必要なPython環境の構築が最も問題の起きやすい部分です。そこで以下のような段階的アプローチを取ります:

  1. 公式のweather.pyサーバーで動作確認:Python環境が正しく構築できているかを検証
  2. csvツールの追加:weather.pyが動作すればPython環境は正常なので、csvツール固有の問題の切り分けが可能
  3. csvデータ分析の実行:環境が整った状態で本来の目的であるcsvデータ分析を実行

この順序により、問題が発生した際にどの段階で起きているかを明確に判断でき、効率的な解決が可能になります。

何ができるようになるか

基本機能

  • csvファイルをアップロードするだけで、AIが自動でデータの概要を把握
  • 「人口推移のグラフを作って」「年代別の集計表を作成して」などの自然言語での指示
  • インタラクティブなダッシュボードの自動生成
  • データに基づいた分析レポートの作成

高度なデータ処理機能

  • 複数csvファイルの横断分析:共通のIDやキーがあるcsvファイル同士をJOINして一つの分析で扱える
  • 中規模データの処理:SQLiteデータベース化により、数千〜数万行程度のデータをGROUP BYやSUMなどの集計関数で処理可能(処理可能サイズはPCスペックに依存)
  • 本格的なSQL操作:WHERE句での絞り込み、ORDER BYでの並び替え、COUNT・AVG・MAXなどの関数が使用可能

Claude Desktop連携の独自メリット

  • アーティファクト機能:分析レポートはMarkdown形式、ダッシュボードはHTML形式で作成され、コピー&ペーストで活用可能
  • 対話型の分析:「このグラフをもう少し詳細に」「別の角度から見て」などの追加指示で段階的に分析を深められる
  • ローカルデータベース処理:データはPC内のSQLiteデータベースで処理されるため高速(処理速度はPCスペックに依存)

例:「住民データ.csv」と「施設利用.csv」に共通の「住民ID」がある場合、年代別の施設利用傾向を一つの分析で把握できます。

必要な知識

  • Windowsの基本操作
  • csvファイルの扱い
  • コマンドプロンプトの基本操作

使用するツール

Claude

Anthropic社が開発したAIアシスタントです。自然言語でやりとりしながら、データ分析やレポート作成を行えます。詳細はAnthropic公式サイトをご確認ください。
Claudeの利用形態はいくつかありますが、今回はClaude Desktopをインストールして利用します

MCP(Model Context Protocol)

AIエージェントが外部ツールと連携するための仕組みです。今回はcsvファイルをデータベース化して、Claudeが直接データを操作できるようにします。詳細はMCP公式ドキュメントをご確認ください。

注意:Claudeの利用プランについて

推奨: 本格的なcsvデータ分析を行う場合は、Claude Pro版(月額$20)の契約を検討してください。無料版では基本的な動作確認程度に留めることをお勧めします。

csvデータ分析におけるcontext windowの制限

csvデータの分析を行う場合、Claude Pro版(月額$20)の契約がほぼ必須となります。

### 無料版の制限 - 1日40通の短いメッセージ(長い会話やファイル添付では20-30通) - Context windowは需要に応じて変動し明確な上限が不明 - csvデータの内容がcontext windowに含まれるため、数千行以上のデータでは制限に引っかかる可能性が極めて高い

Pro版の必要性

  • 200K+トークン(約500ページのテキスト相当)のcontext window
  • 無料版の5倍の使用量
  • 5時間で最低45メッセージ(実際にはもっと多い場合も)

csvファイルのデータは分析のたびにcontext windowに読み込まれるため、以下のような場合はPro版が必要になります:

  • 1,000行を超える中規模のcsvデータ
  • 複数のcsvファイルを横断した分析
  • 詳細な分析レポートの作成

1. Claude Desktopのインストール

Claude Desktopのダウンロード

  1. Claude公式サイトでアカウント作成
  2. 「Download for Windows」をクリックしてインストーラーをダウンロード
  3. ダウンロードしたファイルを実行してインストール

2. Pythonのインストール

Python 3.10以上が必要です。

Python 3.10以上をインストール

  1. Python公式サイトにアクセス
  2. 「Download Python 3.x.x」ボタンをクリック(3.10以上であることを確認)
  3. ダウンロードしたインストーラーを実行
  4. 重要: 「Add Python to PATH」にチェックを入れる
  5. 「Install Now」をクリック

インストール確認

コマンドプロンプトで以下を実行:

python --version

「Python 3.10.x」以上が表示されればOKです。

3. uvパッケージマネージャーのインストール

公式のクイックスタートではuvパッケージマネージャーを使用します。

uvのインストール(Windows)

コマンドプロンプトで以下を実行:

pip install uv

インストール確認

uv --version

バージョンが表示されればOKです。

4. 公式weather.pyサーバーで動作確認

Python環境が正しく構築できているかを確認するため、まず公式のMCPクイックスタートで提供されているweather.pyサーバーを動作させます。これは天気予報を取得するサーバーですが、csvツールと同じPython環境を使用するため、この段階で環境の問題を発見・解決できます

weather.pyが正常に動作すれば、Python・MCP・Claude Desktopの連携が正しく設定できていることが確認でき、その後にcsvツール固有の問題があっても切り分けが容易になります。

weather.pyプロジェクトの作成

  1. 作業用フォルダを作成(例:C:\Users\[ユーザー名]\Documents\mcp_test
  2. コマンドプロンプトでそのフォルダに移動:
cd C:\Users\[ユーザー名]\Documents\mcp_test
  1. プロジェクトを作成:
uv init weather
cd weather
  1. 仮想環境の作成と依存関係のインストール:
uv venv
uv add "mcp[cli]" httpx

weather.pyファイルの作成

公式のweather.pyサンプルコードを使用します。

weather.pyファイルを作成し、以下の内容を保存:

from typing import Any
import httpx
from mcp.server.fastmcp import FastMCP

# Initialize FastMCP server
mcp = FastMCP("weather")

# Constants
NWS_API_BASE = "https://api.weather.gov"
USER_AGENT = "weather-app/1.0"

async def make_nws_request(url: str) -> dict[str, Any] | None:
    """Make a request to the NWS API with proper error handling."""
    headers = {
        "User-Agent": USER_AGENT,
        "Accept": "application/geo+json"
    }
    async with httpx.AsyncClient() as client:
        try:
            response = await client.get(url, headers=headers, timeout=30.0)
            response.raise_for_status()
            return response.json()
        except Exception:
            return None

def format_alert(feature: dict) -> str:
    """Format an alert feature into a readable string."""
    props = feature["properties"]
    return f"""
Event: {props.get('event', 'Unknown')}
Area: {props.get('areaDesc', 'Unknown')}
Severity: {props.get('severity', 'Unknown')}
Description: {props.get('description', 'No description available')[:200]}...
"""

@mcp.tool()
async def get_alerts(state: str) -> str:
    """Get weather alerts for a US state.

    Args:
        state: Two-letter US state code (e.g. CA, NY)
    """
    url = f"{NWS_API_BASE}/alerts/active/area/{state}"
    data = await make_nws_request(url)

    if not data or "features" not in data:
        return "Unable to fetch alerts or no alerts found."

    if not data["features"]:
        return "No active alerts for this state."

    alerts = [format_alert(feature) for feature in data["features"]]
    return "\n---\n".join(alerts)

@mcp.tool()
async def get_forecast(latitude: float, longitude: float) -> str:
    """Get weather forecast for a location.

    Args:
        latitude: Latitude of the location
        longitude: Longitude of the location
    """
    # First get the forecast grid endpoint
    points_url = f"{NWS_API_BASE}/points/{latitude},{longitude}"
    points_data = await make_nws_request(points_url)

    if not points_data:
        return "Unable to fetch forecast data for this location."

    # Get the forecast URL from the points response
    forecast_url = points_data["properties"]["forecast"]
    forecast_data = await make_nws_request(forecast_url)

    if not forecast_data:
        return "Unable to fetch detailed forecast."

    # Format the periods into a readable forecast
    periods = forecast_data["properties"]["periods"]
    forecasts = []
    for period in periods[:5]:  # Only show next 5 periods
        forecast = f"""
{period['name']}:
Temperature: {period['temperature']}°{period['temperatureUnit']}
Wind: {period['windSpeed']} {period['windDirection']}
Forecast: {period['detailedForecast']}
"""
        forecasts.append(forecast)

    return "\n---\n".join(forecasts)

if __name__ == "__main__":
    # Initialize and run the server
    mcp.run(transport='stdio')

Claude Desktop設定の追加

  1. Windowsキー + R を押し、「%APPDATA%\Claude」と入力してEnter
  2. フォルダが存在しない場合は作成
  3. claude_desktop_config.jsonというファイルを作成

uvの絶対パスを確認

Windowsでuvの絶対パスを確認:

where uv

例:C:\Users\[ユーザー名]\AppData\Roaming\Python\Scripts\uv.exe などが表示されます

  1. ファイルの内容(uvの絶対パスを使用):
{
  "mcpServers": {
    "weather": {
      "command": "C:\\Users\\[ユーザー名]\\AppData\\Roaming\\Python\\Scripts\\uv.exe",
      "args": [
        "--directory",
        "C:\\Users\\[ユーザー名]\\Documents\\mcp_test\\weather",
        "run",
        "weather.py"
      ]
    }
  }
}

重要:

  • [ユーザー名]を実際のユーザー名に置き換えてください
  • where uvで表示された実際のパスに置き換えてください

動作確認

この確認でweather.pyが正常に動作すれば、Python環境とMCPの基本セットアップは完了しており、後続のcsvツールでエラーが発生した場合はcsvツール固有の問題だと判断できます。

  1. Claude Desktopを再起動
  2. 新しい会話を開始
  3. 画面右下にハンマーアイコンが表示されているか確認
  4. ハンマーアイコンをクリックして、「get_alerts」「get_forecast」ツールが表示されるか確認
  5. 以下のような指示を試す:
    • 「カリフォルニア州の天気警報を取得して」(get_alerts CA)
    • 「ニューヨーク市の天気予報を取得して」(get_forecast 40.7128 -74.0060)

これで正常に動作すれば、Python環境とMCPの基本セットアップは完了です。

5. csvツールのセットアップ

weather.pyが正常に動作することを確認できたら、csvツールを追加します。Python環境は既に正常に動作しているため、ここではcsvツール固有の設定に集中できます。

csvツールのダウンロード

  1. csvプロジェクト用フォルダを作成(例:C:\Users\[ユーザー名]\Documents\csv_analysis
  2. GitHubからserver_db.pyをダウンロード
  3. 作成したフォルダに保存

プロジェクトのセットアップ

cd C:\Users\[ユーザー名]\Documents\csv_analysis
uv venv
uv add "mcp[cli]" httpx
uv add pandas

注意:SQLite3はPython標準ライブラリのため、追加インストールは不要です。

フォルダ構成の準備

C:\Users\[ユーザー名]\Documents\csv_analysis\
├── server_db.py
├── pyproject.toml
└── csv\
    └── (ここにcsvファイルを配置)

Claude Desktop設定の更新

%APPDATA%\Claude\claude_desktop_config.jsonを以下のように更新:

{
  "mcpServers": {
    "csv-reader": {
      "command": "C:\\Users\\[ユーザー名]\\AppData\\Roaming\\Python\\Scripts\\uv.exe",
      "args": [
        "--directory",
        "C:\\Users\\[ユーザー名]\\Documents\\csv_analysis",
        "run",
        "python",
        "server_db.py"
      ]
    }
  }
}

csv機能の動作確認

  1. 分析したいcsvファイル(複数可)をC:\Users\[ユーザー名]\Documents\csv_analysis\csvフォルダに配置
  2. Claude Desktopを再起動 (起動時にcsvファイルをデータに読み込むのでツールが有効化されるまでに少し時間がかかります)
  3. ハンマーアイコンで「get_table_names」「get_table_schema」「execute_sql_query」が表示されるか確認
  4. 「テーブル一覧を取得して」で動作確認

使い方

1. csvファイルの準備

分析したいcsvファイルをC:\Users\[ユーザー名]\Documents\csv_analysis\csvフォルダに配置します。

  • ファイル名は英数字推奨
  • 1行目はヘッダー行にする
  • 文字コードはUTF-8

2. Claude Desktopでの操作

基本的な使い方

テーブル一覧を取得して

→ 読み込まれたcsvファイル(テーブル)の一覧が表示されます

○○テーブルのスキーマを教えて

→ 指定したテーブルの列情報が表示されます

○○テーブルの最初の10行を表示して

→ データの中身を確認できます

3. 分析レポートの作成例

人口データの分析

人口テーブルから年代別の人口推移グラフを作成してください。
また、前年比の増減率も計算して表にまとめてください。

予算データの分析

予算テーブルから部門別の予算配分を円グラフで表示し、
前年度との比較分析レポートを作成してください。

ダッシュボードの作成

市民アンケートテーブルから、年代別・地域別の満足度を
インタラクティブに確認できるダッシュボードを作成してください。

実用例

ここでの例はかなり丁寧な指示をClaudeに行ってますが、もう少し雑でもちゃんと動きます。MCP toolをうまく使ってくれない場合は明示的に「連携したtoolを使ってデータベースの中を分析してください」と追加指示することで期待通りに動くことが多いです。

例1: 住民基本台帳データの分析

データ: 年齢別人口.csv

年齢,男性,女性,合計
0-4,245,231,476
5-9,267,251,518
...

指示例:

年齢別人口データから以下を作成してください:
1. 人口ピラミッドのグラフ
2. 高齢化率の計算
3. 将来人口予測のシミュレーション
4. 地域比較ダッシュボード

例2: 施設利用状況の分析

データ: 施設利用.csv

日付,施設名,利用者数,利用時間
2024-01-01,公民館,45,6
2024-01-01,図書館,128,8
...

指示例:

施設利用データから月次レポートを作成してください:
1. 施設別利用者数の推移グラフ
2. 稼働率の計算と可視化
3. 利用パターンの分析
4. 改善提案の自動生成

例3: 複数csvファイルの横断分析(JOIN活用例)

データ構成:

  • 住民基本台帳.csv(住民ID、年齢、性別、地域)
  • 施設利用履歴.csv(利用ID、住民ID、施設名、利用日)
  • アンケート回答.csv(住民ID、満足度、要望)

指示例:

以下の横断分析を実行してください:
1. 年代別・地域別の施設利用率の分析
2. 利用頻度と満足度の相関分析
3. 地域ごとの利用傾向と住民要望のクロス集計
4. インタラクティブなダッシュボードとして可視化

住民IDをキーとして3つのテーブルをJOINして分析してください

この場合、Claudeが以下のようなSQLを生成する可能性があります(実際の生成内容は指示によって変わります):

SELECT 
    住民基本台帳.年齢,
    住民基本台帳.地域,
    COUNT(施設利用履歴.利用ID) as 利用回数,
    AVG(アンケート回答.満足度) as 平均満足度
FROM 住民基本台帳 
LEFT JOIN 施設利用履歴 ON 住民基本台帳.住民ID = 施設利用履歴.住民ID
LEFT JOIN アンケート回答 ON 住民基本台帳.住民ID = アンケート回答.住民ID
GROUP BY 住民基本台帳.年齢, 住民基本台帳.地域

アーティファクト機能の活用例

Claude Desktopでは分析結果が以下の形式で作成されます:

Markdownレポート(編集・保存・共有が容易):

# 月次施設利用分析レポート
## サマリー
- 総利用者数: 1,234名
- 前月比: +15%
...

HTMLダッシュボード(そのままWebで表示可能):

  • インタラクティブなグラフ
  • フィルター機能付きの表
  • リアルタイムでデータを切り替え可能

これらのアーティファクトは即座に編集・カスタマイズでき、そのまま会議資料や報告書として活用できます。

トラブルシューティング

段階的な問題の切り分け

第1段階: weather.pyサーバーが動作するか

  • Python 3.10以上がインストールされているか
  • uvパッケージマネージャーが動作するか
  • weather.pyのツールが認識されるか
  • 天気予報の取得が動作するか

問題がある場合:

  • Python、uvのバージョン確認
  • 仮想環境の再作成:C:\Users\[ユーザー名]\Documents\mcp_test\weatheruv sync
  • 依存パッケージの再インストール

第2段階: csvツールが認識されるか

  • pandasライブラリがインストールされているか:C:\Users\[ユーザー名]\Documents\csv_analysisuv add pandas
  • server_db.pyが正しく配置されているか
  • Claude Desktopでcsvツールが表示されるか

第3段階: csvファイルが読み込まれるか

  • csvフォルダにファイルが正しく配置されているか
  • ファイル形式がUTF-8になっているか
  • テーブル一覧の取得が動作するか

よくあるエラー

「Python 3.10以上が必要」

  • Pythonのバージョンを確認:python --version
  • 古いバージョンの場合は最新版をインストール

「uvコマンドが見つからない」

  1. uvがインストールされているか確認:where uv
  2. 表示されたパスをclaude_desktop_config.jsonの"command"に指定
  3. PATHの設定確認(必要に応じて)

「MCPツールが利用できません」

  • claude_desktop_config.jsonの記述確認
  • パスが正しいか確認
  • Claude Desktopの完全再起動
  • csvファイルが大きすぎて起動失敗している場合は、利用するcsvファイルを小さなものに変更(もしくはよりスペックの高いPCを利用)

「テーブルが見つかりません」

  • csvファイルがcsvフォルダに正しく配置されているか確認
  • ファイル名にスペースや特殊文字が含まれていないか確認

文字化けが発生する

  • csvファイルをUTF-8で保存し直す
  • Excelで開いてCSV(UTF-8)形式で保存

ログの確認方法

設定に問題がある場合、以下の場所でログを確認できます:

  • Windows: %APPDATA%\Claude\logs\

パフォーマンスの最適化

  • 大きなファイル(10万行以上)は事前に必要な列のみに絞る
  • 日付データは YYYY-MM-DD 形式に統一
  • 数値データに不要な文字(カンマ、円記号など)が含まれていないか確認

まとめ

この仕組みを使うことで、従来Excel等で時間をかけて行っていたデータ分析作業を、自然言語での指示だけで自動化できます。特に以下のような場面で効果的です:

従来の方法との比較

  • Excel: 複数ファイルの関連付けが困難、大容量データの処理が重い
  • 今回の手法: JOINで複数csvを横断分析、SQLiteで中規模データを効率処理

特に優れている点

  • 複数データソースの統合分析:共通キーがあれば異なるcsvファイルを一つの分析で処理
  • スケーラビリティ:ローカルデータベース化により中規模データも効率的に処理(PCスペックに依存)
  • 成果物の質:アーティファクト機能により、コピー&ペーストで活用できる形でレポートやダッシュボードが作成される
  • 対話型の改善:「もう少し詳細に」「別の角度から」などの追加指示で段階的に分析を深化

まず公式のweather.pyサーバーでPython環境の動作を確認し、その後csvツールを追加することで、問題が発生した際の切り分けが容易になります。慣れてきたら、より複雑な分析や、複数のcsvファイルを組み合わせた横断分析も可能になります。

定期的な報告書作成、データの可視化作業、複数部署のデータを統合した分析などの業務効率化に、ぜひご活用ください。

参考リンク

注意事項

  • インターネット接続: Claude利用時はインターネット接続が必要です
  • 処理能力: データ処理能力はPCのスペック(CPU、メモリ)に依存します
  • データ形式: csvファイルは適切な形式(ヘッダー行、文字コードUTF-8等)で準備してください
3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?