はじめに
この記事では、AIエージェント(Claude)を使って、csvファイルから自動的に分析レポートやインタラクティブなダッシュボードを作成する方法を説明します。
この記事の構成と狙い
この記事では最終的にcsvデータの分析を行いますが、そのために必要なPython環境の構築が最も問題の起きやすい部分です。そこで以下のような段階的アプローチを取ります:
- 公式のweather.pyサーバーで動作確認:Python環境が正しく構築できているかを検証
- csvツールの追加:weather.pyが動作すればPython環境は正常なので、csvツール固有の問題の切り分けが可能
- 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)の契約がほぼ必須となります。
Pro版の必要性
- 200K+トークン(約500ページのテキスト相当)のcontext window
- 無料版の5倍の使用量
- 5時間で最低45メッセージ(実際にはもっと多い場合も)
csvファイルのデータは分析のたびにcontext windowに読み込まれるため、以下のような場合はPro版が必要になります:
- 1,000行を超える中規模のcsvデータ
- 複数のcsvファイルを横断した分析
- 詳細な分析レポートの作成
1. Claude Desktopのインストール
Claude Desktopのダウンロード
- Claude公式サイトでアカウント作成
- 「Download for Windows」をクリックしてインストーラーをダウンロード
- ダウンロードしたファイルを実行してインストール
2. Pythonのインストール
Python 3.10以上が必要です。
Python 3.10以上をインストール
- Python公式サイトにアクセス
- 「Download Python 3.x.x」ボタンをクリック(3.10以上であることを確認)
- ダウンロードしたインストーラーを実行
- 重要: 「Add Python to PATH」にチェックを入れる
- 「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プロジェクトの作成
- 作業用フォルダを作成(例:
C:\Users\[ユーザー名]\Documents\mcp_test) - コマンドプロンプトでそのフォルダに移動:
cd C:\Users\[ユーザー名]\Documents\mcp_test
- プロジェクトを作成:
uv init weather
cd weather
- 仮想環境の作成と依存関係のインストール:
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設定の追加
- Windowsキー + R を押し、「%APPDATA%\Claude」と入力してEnter
- フォルダが存在しない場合は作成
-
claude_desktop_config.jsonというファイルを作成
uvの絶対パスを確認
Windowsでuvの絶対パスを確認:
where uv
例:C:\Users\[ユーザー名]\AppData\Roaming\Python\Scripts\uv.exe などが表示されます
- ファイルの内容(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ツール固有の問題だと判断できます。
- Claude Desktopを再起動
- 新しい会話を開始
- 画面右下にハンマーアイコンが表示されているか確認
- ハンマーアイコンをクリックして、「get_alerts」「get_forecast」ツールが表示されるか確認
- 以下のような指示を試す:
- 「カリフォルニア州の天気警報を取得して」(get_alerts CA)
- 「ニューヨーク市の天気予報を取得して」(get_forecast 40.7128 -74.0060)
これで正常に動作すれば、Python環境とMCPの基本セットアップは完了です。
5. csvツールのセットアップ
weather.pyが正常に動作することを確認できたら、csvツールを追加します。Python環境は既に正常に動作しているため、ここではcsvツール固有の設定に集中できます。
csvツールのダウンロード
- csvプロジェクト用フォルダを作成(例:
C:\Users\[ユーザー名]\Documents\csv_analysis) - GitHubからserver_db.pyをダウンロード
- 作成したフォルダに保存
プロジェクトのセットアップ
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機能の動作確認
- 分析したいcsvファイル(複数可)を
C:\Users\[ユーザー名]\Documents\csv_analysis\csvフォルダに配置 - Claude Desktopを再起動 (起動時にcsvファイルをデータに読み込むのでツールが有効化されるまでに少し時間がかかります)
- ハンマーアイコンで「get_table_names」「get_table_schema」「execute_sql_query」が表示されるか確認
- 「テーブル一覧を取得して」で動作確認
使い方
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\weatherでuv sync - 依存パッケージの再インストール
第2段階: csvツールが認識されるか
- pandasライブラリがインストールされているか:
C:\Users\[ユーザー名]\Documents\csv_analysisでuv add pandas - server_db.pyが正しく配置されているか
- Claude Desktopでcsvツールが表示されるか
第3段階: csvファイルが読み込まれるか
- csvフォルダにファイルが正しく配置されているか
- ファイル形式がUTF-8になっているか
- テーブル一覧の取得が動作するか
よくあるエラー
「Python 3.10以上が必要」
- Pythonのバージョンを確認:
python --version - 古いバージョンの場合は最新版をインストール
「uvコマンドが見つからない」
- uvがインストールされているか確認:
where uv - 表示されたパスをclaude_desktop_config.jsonの"command"に指定
- 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等)で準備してください