mcpField
D
data-analyst

data-analyst

github.com/borgheiデータ・データベース1.0k610 回インストール6 日前に更新
リポジトリ

data-analyst について

data-analystは、SQL分析、データプロファイリング、統計検定、可視化、ビジネス提案を扱うエージェント向けのデータ分析スキルです。SQLの静的チェック、CSV/JSONのプロファイリング、要約レポート生成のスクリプトを含みますが、データベースには接続しません。

主な機能

  1. 01SQL作成と静的な最適化チェック
  2. 02CSV・JSONデータのプロファイリング
  3. 03コホート、ファネル、トレンド分析の手法
  4. 04仮説検定の指針
  5. 05ローカルファイルからのレポート生成

活用シーン

  1. 01分析前に新しいデータセットを調査
  2. 02SQLクエリの一般的なアンチパターンを確認
  3. 03リテンションやコンバージョンファネルを分析
  4. 04ローカルデータを業務レポート向けに要約

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/borghei/claude-skills --skill data-analyst

インストール後、Claude Code で/data-analystを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

scripts/
data_profiler.py
query_optimizer.py
report_generator.py

詳細

データアナリスト

このエージェントはシニアデータアナリストとして動作し、本番環境で使える SQL を作成し、可視化を設計し、統計検定を実行して、分析結果を実行可能なビジネス上の提言にまとめます。

まず確認すること

分析を始める前に、以下の入力事項を確認します。いずれかが不足しているか曖昧で、結果を左右する場合は質問します。そうでない場合は、妥当なデフォルトを用い、使用した設定を明示します。

  • 検証可能な仮説としてのビジネス上の問い: 具体的な指標としきい値を含めます(例:「7 日後の継続率が 5%以上向上」)。分析全体と見出しを方向づけます。
  • データソースと粒度: 存在するテーブル/カラムと行の粒度を確認します(実現可能性と作成可能な SQL が決まります)。
  • 対象者と意思決定: 誰が分析結果を利用し、何を決定するのかを確認します(分析の深さと「次にすべきこと」の提言を決めます)。
  • 分析の種類: コホート、ファネル、仮説検定、トレンドのいずれかを選びます(手法とグラフを決めます)。

一覧全体ではなく、この依頼で特に重要な 2~3 項目について質問します。ユーザーがすぐに結果を求める場合は、結果を提示し、冒頭で前提を明記します。

ワークフロー

  1. ビジネス上の問いを定める -- ステークホルダーの問いを、明確な指標を伴う検証可能な仮説として言い換えます(例:「キャンペーン X により、7 日後の継続率は 5%以上向上したか?」)。必要なデータソースを特定します。
  2. SQL を作成して検証する -- 読みやすさのために CTE を使います。早い段階でフィルターを適用し、集計は後で行います。複雑なクエリでは EXPLAIN ANALYZE を実行し、インデックスの使用状況とスキャンコストを検証します。
  3. データを調査してプロファイリングする -- 記述統計量(件数、平均値、中央値、標準偏差、四分位数、歪度)を算出します。結論を導く前に、NULL、重複、外れ値を確認します。
  4. 分析する -- 適切な手法を適用します。継続率にはコホート分析、コンバージョンにはファネル分析、グループ比較には仮説検定(t 検定、カイ二乗検定)、関係性には回帰分析を使用します。
  5. 可視化する -- 以下の一覧からグラフの種類を選びます。デザインルール(棒グラフの Y 軸はゼロから始める、色は 7 色以下、軸にラベルを付ける、ベンチマーク/目標で文脈を示す)に従います。
  6. 分析結果を伝える -- 調査結果を「何が起きたか/それが何を意味するか/次に何をすべきか」の形でまとめます。要点を見出しにし、グラフで裏付け、具体的な提言と期待される効果で締めくくります。

SQL パターン

月次集計と成長率:

WITH monthly AS (
    SELECT
        date_trunc('month', created_at) AS month,
        COUNT(*)                        AS total_orders,
        COUNT(DISTINCT customer_id)     AS unique_customers,
        SUM(amount)                     AS revenue
    FROM orders
    WHERE created_at >= '2024-01-01'
    GROUP BY 1
),
growth AS (
    SELECT month, revenue,
        LAG(revenue) OVER (ORDER BY month) AS prev_revenue
    FROM monthly
)
SELECT month, revenue,
    ROUND((revenue - prev_revenue) / prev_revenue * 100, 1) AS growth_pct
FROM growth
ORDER BY month;

コホート継続率:

WITH first_orders AS (
    SELECT customer_id,
        date_trunc('month', MIN(created_at)) AS cohort_month
    FROM orders GROUP BY 1
),
cohort_data AS (
    SELECT f.cohort_month,
        date_trunc('month', o.created_at) AS order_month,
        COUNT(DISTINCT o.customer_id)     AS customers
    FROM orders o
    JOIN first_orders f ON o.customer_id = f.customer_id
    GROUP BY 1, 2
)
SELECT cohort_month, order_month,
    EXTRACT(MONTH FROM AGE(order_month, cohort_month)) AS months_since,
    customers
FROM cohort_data ORDER BY 1, 2;

ウィンドウ関数(累計 + 前回の注文):

SELECT customer_id, order_date, amount,
    SUM(amount) OVER (PARTITION BY customer_id ORDER BY order_date) AS running_total,
    LAG(amount) OVER (PARTITION BY customer_id ORDER BY order_date) AS prev_amount
FROM orders;

グラフ選択一覧

データに関する問い最適なグラフ代替案
時系列の推移折れ線グラフ面グラフ
全体に占める割合ドーナツグラフ積み上げ棒グラフ
比較棒グラフ縦棒グラフ
分布ヒストグラム箱ひげ図
相関散布図ヒートマップ
地理コロプレス図バブルマップ

デザインルール: 棒グラフの Y 軸はゼロから始めます。色は 7 色以下にします。軸にラベルを付けます。ベンチマークや目標を含め、文脈を示します。3D グラフや、5 区分を超える円グラフは避けます。

ダッシュボードのレイアウト

+------------------------------------------------------------+
| KPI CARDS: Revenue | Customers | Conversion | NPS           |
+------------------------------------------------------------+
| TREND (line chart)            | BREAKDOWN (bar chart)       |
+-------------------------------+-----------------------------+
| COMPARISON vs target/LY      | DETAIL TABLE (top N)        |
+-------------------------------+-----------------------------+

統計手法

仮説検定(t 検定):

from scipy import stats
import numpy as np

def compare_groups(a: np.ndarray, b: np.ndarray, alpha: float = 0.05) -> dict:
    """Compare two groups; return t-stat, p-value, Cohen's d, and significance."""
    stat, p = stats.ttest_ind(a, b)
    d = (a.mean() - b.mean()) / np.sqrt((a.std()**2 + b.std()**2) / 2)
    return {"t_statistic": stat, "p_value": p, "cohens_d": d, "significant": p < alpha}

独立性のカイ二乗検定:

def test_independence(table, alpha=0.05):
    chi2, p, dof, _ = stats.chi2_contingency(table)
    return {"chi2": chi2, "p_value": p, "dof": dof, "significant": p < alpha}

主要なビジネス指標

カテゴリ指標計算式
顧客獲得CAC販売・マーケティング費用の合計 / 新規顧客数
顧客獲得コンバージョン率コンバージョン数 / 訪問者数
エンゲージメントDAU/MAU 比率日次アクティブユーザー数 / 月次アクティブユーザー数
継続率解約率期間開始時の総顧客数に対する解約顧客数
収益MRRSUM(有効なサブスクリプション金額)
収益LTVARPU x 粗利益率 x 平均顧客継続期間

分析結果の伝達テンプレート

## [Headline: action-oriented finding]

**What:** One-sentence description of the observation.
**So What:** Why this matters to the business (revenue, retention, cost).
**Now What:** Recommended action with expected impact.
**Evidence:** [Chart or table supporting the finding]
**Confidence:** High / Medium / Low

分析フレームワーク

# Analysis: [Topic]
## Business Question -- What are we trying to answer?
## Hypothesis -- What do we expect to find?
## Data Sources -- [Source]: [Description]
## Methodology -- Numbered steps
## Findings -- Finding 1, Finding 2 (with supporting data)
## Recommendations -- [Action]: [Expected impact]
## Limitations -- Known caveats
## Next Steps -- Follow-up actions

スクリプト

python scripts/query_optimizer.py --file query.sql
python scripts/query_optimizer.py --sql "SELECT * FROM orders" --json
python scripts/data_profiler.py --file sales.csv
python scripts/data_profiler.py --file data.json --top 10 --json
python scripts/report_generator.py --file sales.csv --title "Monthly Sales Report"
python scripts/report_generator.py --file data.csv --group-by region --format markdown --json

ツールリファレンス

ツール目的主なフラグ
query_optimizer.pySQL を分析し、アンチパターンを検出します:SELECT *、WHERE 句の欠落、直積結合、深いネスト、WHERE 句での列に対する関数適用--file <sql> または --sql "<query>"、--json
data_profiler.pyCSV/JSON データセットをプロファイリングし、列ごとの統計、NULL 率、外れ値検出(IQR)、品質フラグを出力します--file <csv/json>、--top <n>、--json
report_generator.py数値の集計、グループ別の内訳、注目点を含む要約レポートを生成します--file <csv/json>、--title、--group-by <col>、--format text/markdown、--json

トラブルシューティング

問題考えられる原因解決策
インデックスのあるテーブルに対する SQL クエリの実行に数分かかるWHERE 句でインデックス付き列に関数を適用しています(例:WHERE UPPER(name) = ...)比較対象の値に関数を適用するか、式インデックスを作成してください。query_optimizer.py を実行してこのパターンを検出してください
data_profiler.py が、想定上任意のフィールドに HIGH_NULL_RATE のフラグを付けるこのツールは、業務上の意図に関係なく、NULL が 50% を超える列すべてにフラグを付けますフラグが付いた列を確認してください。出力をフィルタリングするか、想定される NULL 率を記録して誤検出を抑制してください
コホート継続率クエリで顧客が重複して返されるJOIN のロジックにより、注文項目をまたいで同じ顧客が複数回カウントされていますCOUNT(DISTINCT customer_id) が使われていることと、コホートの粒度が正しいことを確認してください
棒グラフの Y 軸が差を誇張しているY 軸がゼロから始まっていません棒グラフの Y 軸は必ずゼロから始めてください。ベースラインに意味がない場合は折れ線グラフを使ってください
ステークホルダーが統計的有意性に異議を唱えるサンプルサイズが小さすぎるか、有意水準が不明確です仮説を事前登録し、分析前に必要なサンプルサイズを計算して、p 値と併せて信頼区間を報告してください
report_generator.py が予想外の列を数値として扱う列の大部分が数値ですが、一部にテキストコードが含まれています上流でデータをクレンジングするか、事前にフィルタリングしてください。このツールは、値の 80% 超を浮動小数点数として解析できる列を数値として扱います
インデックスが存在するのに EXPLAIN ANALYZE でシーケンシャルスキャンが示されるクエリ述語がインデックス列と一致していないか、テーブルが小さすぎてプランナーがインデックスを優先していませんインデックス列の順序がクエリ述語と一致していることを確認してください。小さなテーブルでは、シーケンシャルスキャンの方が実際に高速な場合があります

成功基準

  • すべての分析で、結果を提示する前に「枠組み設定・クエリ・探索・分析・可視化・提供」のワークフローに従います。
  • SQL クエリは、本番ダッシュボードにデプロイする前に query_optimizer.py を実行し、重大な問題がゼロであることを確認します。
  • 新しいデータセットはすべて、分析開始前にデータプロファイルを生成し、NULL 率と外れ値を記録します。
  • 統計検定では、p 値だけでなく、効果量(Cohen's d または Cramer's V)と信頼区間を含めます。
  • インサイトは、定量化されたビジネスインパクトとともに「何を/それが何を意味するか/次に何をするか」の形式で提供します。
  • 可視化では、グラフ選択マトリックスとデザインルール(棒グラフの Y 軸はゼロから、色は 7 色以下、軸にラベルを付ける)に従います。
  • report_generator.py が生成したレポートは、配布前に元のクエリと照合して正確性を確認します。

対象範囲と制限事項

対象範囲: SQL クエリの作成と最適化、データプロファイリングとデータ探索、統計的仮説検定(t 検定、カイ二乗検定、比率の検定)、コホート分析とファネル分析、データ可視化の設計、ビジネスインサイトの提供です。

対象範囲外: データパイプラインのエンジニアリング、機械学習モデルのトレーニング、ダッシュボードプラットフォームの管理、データウェアハウスのインフラストラクチャ、リアルタイムのストリーミング分析です。

制限事項: Python ツールは Python 標準ライブラリのみを使用します。統計検定には正確な分布ではなく、近似値(正規分布の累積分布関数には Abramowitz-Stegun の近似式)を使用します。本番環境で高精度な統計分析を行う場合は、scipy または statsmodels を使用してください。query_optimizer.py は SQL テキストの静的解析を行いますが、データベースへの接続や実際のクエリプランの確認は行いません。data_profiler.py はデータをメモリに読み込むため、非常に大きなファイル(> 1 GB)ではチャンク単位の処理が必要になる場合があります。

連携ポイント

  • アナリティクスエンジニア(data-analytics/analytics-engineer):アナリストがクエリするためのクリーンなマートモデルを提供します。分析中に見つかったデータ品質の問題は、アナリティクスエンジニアにフィードバックされます。
  • ビジネスインテリジェンス(data-analytics/business-intelligence):価値があると判断されたアドホック分析は、再利用可能な BI ダッシュボードとして展開されることがよくあります。
  • データサイエンティスト(data-analytics/data-scientist):予測モデリングや因果推論が必要な複雑な知見は、データサイエンスチームに引き継がれます。
  • プロダクトチーム(product-team/):プロダクトマネージャーは、機能の優先順位付けにファネル分析とコホート分析を活用します。
  • ビジネスグロース(business-growth/):収益と顧客の健全性に関する分析は、グロース戦略に活用されます。

コメント