mcpField
E
exploratory-data-analysis

exploratory-data-analysis

github.com/seb1nデータ・データベース236127 回インストール12 週間前に更新
リポジトリ

exploratory-data-analysis について

表形式のデータを対象に、品質確認から結果のレポート作成まで、AIエージェントによる探索的データ分析を支援するスキルです。統計要約、可視化、変数間の関係分析、異常検知を扱います。

主な機能

  1. 01データの形状と型を確認
  2. 02欠損値と重複行を評価
  3. 03分布とカテゴリを要約
  4. 04相関と変数間の関係を分析
  5. 05外れ値と異常を検出
  6. 06構造化されたEDAレポートを作成

活用シーン

  1. 01モデリング前のデータ確認
  2. 02欠損値や疑わしい型の特定
  3. 03変数間の関係の探索
  4. 04レポートで分析結果を共有

インストール

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

$npx skills add https://github.com/seb1n/awesome-ai-agent-skills --skill exploratory-data-analysis

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

詳細

探索的データ分析

このスキルを使うと、AI エージェントはあらゆる表形式データセットに対して、体系的な探索的データ分析(EDA)を実行できます。エージェントはデータの形状と型を体系的にプロファイリングし、分布を調べ、相関を計算し、外れ値を検出して、調査結果の概要を作成します。EDA はモデリングやレポート作成の前に行う重要な最初のステップです。データに含まれている実際の内容と、含まれていると想定されている内容の違いを明らかにします。

ワークフロー

  1. 基本構造を読み込んで調べます。 データセットを読み込み、すぐに形状(行数、列数)、列名、データ型、メモリ使用量を報告します。先頭の 5 行と末尾の 5 行を表示し、ヘッダーの問題、末尾の不要な行、エンコーディングの問題を検出します。これには 1 秒もかかりませんが、その後の作業で何時間も混乱するのを防げます。

  2. データ品質を評価します。 列ごとの null 値の数を、実数と割合の両方で数えます。値に変化がない列(定数値)、カーディナリティの高いカテゴリ列(例:行ごとに値が異なる「notes」フィールド)、複数の型が混在する列を特定します。品質に関する簡潔なスコアカードを作成します。5%を超える欠損値がある列、型に疑いのある列、重複行数を記載します。

  3. 個々の変数の分布を分析します。 数値列について、平均、中央値、標準偏差、歪度、尖度を計算します。ヒストグラムまたは KDE プロットを作成します。カテゴリ列については、値の数と上位 10 カテゴリの割合を表示します。偏りが大きい分布(例:一方のクラスが 5%未満の二値ターゲット)にはフラグを付けます。

  4. 変数間の関係を調べます。 数値列の相関行列全体を計算し、ヒートマップとして可視化します。カテゴリ変数と数値変数の関係には、グループ化した箱ひげ図またはバイオリンプロットを使用します。カテゴリ変数同士の関係には、分割表またはモザイクプロットを使用します。相関が 0.7 を超える、または -0.7 を下回る組み合わせを強調します。

  5. 外れ値と異常値を検出します。 すべての数値列に IQR 法を適用し、外れ値の数と割合を報告します。箱ひげ図で外れ値を可視化します。列をまたいで外れ値を照合します。複数の列で同時に外れ値となっている行は、データ入力ミスや実際に異常な観測値である可能性が高いです。

  6. 調査結果をまとめて EDA レポートを作成します。 データセットの概要、判明した品質上の問題、主要な分布特性、注目すべき相関、外れ値の概要、おすすめの次のステップ(例:削除する列、適用する変換、予測に役立つ可能性の高い特徴量)を含む、構成の整った概要を作成します。

対応技術

  • pandas — データの読み込みとプロファイリング
  • matplotlib / seaborn — 分布と相関の可視化
  • ydata-profiling(旧 pandas-profiling)— EDA レポートの自動生成
  • scipy.stats — 分布分析のための統計的検定

使用方法

エージェントにデータセットのファイルパスを指定します。必要に応じて、対象とするターゲット列、カテゴリ変数で表示するカテゴリの最大数、自動 HTML レポートを生成するかどうかも指定できます。エージェントは可視化結果と調査結果のテキスト要約の両方を返します。

例

例 1:データセット全体の EDA
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

df = pd.read_csv("employee_attrition.csv")

# Step 1: Structure
print(f"Shape: {df.shape}")               # Shape: (1470, 35)
print(f"Dtypes:\n{df.dtypes.value_counts()}")
# int64      26
# object      9

# Step 2: Data quality
print(f"\nNull counts:\n{df.isnull().sum().loc[lambda x: x > 0]}")
# monthly_income    12
# years_at_company   8
print(f"Duplicates: {df.duplicated().sum()}")  # Duplicates: 3

# Step 3: Distributions
print(f"\nNumeric summary:\n{df[['age', 'monthly_income', 'years_at_company']].describe()}")
#        age  monthly_income  years_at_company
# mean  36.9         6502.93              7.01
# std    9.1         4707.96              6.13
# min   18.0         1009.00              0.00
# 50%   36.0         4919.00              5.00
# max   60.0        19999.00             40.00

print(f"\nAttrition distribution:\n{df['attrition'].value_counts(normalize=True)}")
# No     0.839
# Yes    0.161    <-- imbalanced target

# Step 4: Correlations
corr = df.select_dtypes(include="number").corr()
high_corr = corr.where(
    (corr.abs() > 0.7) & (corr != 1.0)
).stack().dropna()
print(f"\nHigh correlations:\n{high_corr}")
# monthly_income  job_level           0.95
# total_working_years  job_level      0.78
# years_at_company  years_in_role     0.76

# Step 5: Outlier summary
for col in ["monthly_income", "years_at_company"]:
    Q1, Q3 = df[col].quantile(0.25), df[col].quantile(0.75)
    IQR = Q3 - Q1
    outliers = ((df[col] < Q1 - 1.5 * IQR) | (df[col] > Q3 + 1.5 * IQR)).sum()
    print(f"{col}: {outliers} outliers ({outliers/len(df)*100:.1f}%)")
# monthly_income: 0 outliers (0.0%)
# years_at_company: 47 outliers (3.2%)

# Visualization: correlation heatmap
plt.figure(figsize=(12, 10))
sns.heatmap(corr, cmap="coolwarm", center=0, annot=False, square=True)
plt.title("Feature Correlation Matrix")
plt.tight_layout()
plt.savefig("eda_correlation_heatmap.png", dpi=150)
例 2:EDA レポートの自動生成
from ydata_profiling import ProfileReport
import pandas as pd

df = pd.read_csv("employee_attrition.csv")

# Generate a comprehensive HTML report
profile = ProfileReport(
    df,
    title="Employee Attrition EDA Report",
    explorative=True,
    correlations={
        "pearson": {"calculate": True},
        "spearman": {"calculate": True},
        "phi_k": {"calculate": True}
    },
    missing_diagrams={
        "bar": True,
        "matrix": True,
        "heatmap": True
    }
)

profile.to_file("eda_report.html")
# Generates a full interactive report including:
# - Dataset overview (size, types, missing cells, duplicates)
# - Per-variable analysis (stats, histogram, common/extreme values)
# - Correlation matrices (Pearson, Spearman, Phi-K)
# - Missing value patterns (bar chart, matrix, nullity heatmap)
# - Sample rows and duplicate detection
print("Report saved to eda_report.html")

ベストプラクティス

  • 特徴量エンジニアリングやモデリングの前に EDA を実行します。データ品質に関する想定は、検証するまではほとんどの場合、誤っています。
  • 要約統計量を読むだけでなく、分布を可視化します。二峰性分布と正規分布は、平均と標準偏差が同じ場合があります。
  • EDA の際にデータリークを確認します。ある特徴量がターゲットと完全、またはほぼ完全に相関している場合、未来の情報が含まれている可能性があります。
  • 分布の裾を必ず調べます。最も興味深く、問題のあるデータは、極端な値に含まれていることがよくあります。
  • 共同作業者が推論を確認できるよう、共有可能な形式(HTML レポートまたはノートブック)で EDA の調査結果を記録します。
  • 大規模なクリーニングの後には EDA を再実行し、変換が意図した効果をもたらしたことを確認します。

エッジケース

  • 数百列あるデータセット。 列ごとの可視化は省略し、ydata-profiling による自動プロファイリングに重点を置きます。相関のしきい値を使用して、特に興味深いペアのみを抽出します。
  • 目的変数に著しい不均衡がある場合。 この点を明示的に示し(例:「陽性クラスはわずか 2.3%」)、後続のモデリングには層化サンプリングまたはリバランス手法を推奨します。
  • すべての値が null の列、または分散がゼロの列。 EDA 中に自動的に削除し、分析上の価値がないことを調査結果に記録します。
  • 実際には数値である文字列列。 値の 90% 超を数値として解析できる列を検出し、統計分析に進む前に型変換することを推奨します。
  • タイムゾーンの考慮が必要な日時列。 データセットに複数の地域のレコードが含まれている場合は、タイムゾーン情報のない日時列を明示し、意図しない集計エラーを防ぎます。

コメント