关于 exploratory-data-analysis
这项技能引导 AI Agent 对表格数据进行结构化探索分析,从质量检查到整理发现。涵盖统计摘要、可视化、变量关系分析和异常检测。
主要功能
- 01检查数据集规模与类型
- 02评估缺失值和重复行
- 03汇总分布与类别
- 04分析相关性和变量关系
- 05检测离群值与异常
- 06生成结构化 EDA 报告
适用场景
- 01建模前检查数据
- 02查找缺失值和可疑类型
- 03探索变量间关系
- 04以报告分享分析结果
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ seb1n/ awesome-ai-agent-skills --skill exploratory-data-analysis安装后在 Claude Code 中输入/exploratory-data-analysis确认已加载。
详细介绍
探索性数据分析
此技能可让 AI Agent 对任何表格数据集执行结构化的探索性数据分析(EDA)。Agent 会系统地分析数据的形状和类型,检查分布,计算相关性,检测离群值,并汇总分析结果。EDA 是建模或报告之前至关重要的第一步——它能揭示数据实际包含的内容,以及人们假设它包含的内容。
工作流
-
加载并检查基本结构。 读取数据集后,立即报告其形状(行数、列数)、列名、数据类型和内存占用。显示前 5 行和最后 5 行,以发现表头问题、末尾的垃圾行或编码异常。这不到一秒即可完成,却能避免后续数小时的困惑。
-
评估数据质量。 以绝对值和百分比两种方式统计每列的空值。识别零方差列(常量值)、高基数类别列(例如每行的 "notes" 字段都具有唯一值)以及混合类型列。构建简明的质量评分卡:缺失值超过 5% 的列、类型可疑的列,以及重复行数。
-
分析各变量的分布。 对数值列计算均值、中位数、标准差、偏度和峰度。绘制直方图或 KDE 图。对类别列,显示排名前 10 的类别的值计数和占比。标记高度不平衡的分布(例如二元目标变量中某个类别占比低于 5%)。
-
探索变量之间的关系。 计算数值列的完整相关矩阵,并用热力图将其可视化。对于类别变量与数值变量之间的关系,使用分组箱线图或小提琴图。对于类别变量之间的关系,使用列联表或马赛克图。突出显示相关性高于 0.7 或低于 -0.7 的变量对。
-
检测离群值和异常情况。 对每个数值列应用 IQR 方法,并报告离群值的数量和占比。用箱线图可视化离群值。交叉检查各列中的离群值——如果某一行在多个列中同时是离群值,通常意味着存在数据录入错误,或该观测确实异乎寻常。
-
汇总结果并撰写 EDA 报告。 撰写结构化摘要,涵盖:数据集概览、发现的质量问题、关键分布特征、显著相关性、离群值摘要,以及建议的后续步骤(例如应删除的列、应应用的转换,以及可能具有预测能力的特征)。
支持的技术
- pandas — 数据加载和分析
- matplotlib / seaborn — 分布和相关性的可视化
- ydata-profiling(以前称为 pandas-profiling)— 自动生成 EDA 报告
- scipy.stats — 用于分布分析的统计检验
用法
向 Agent 提供数据集文件路径。也可选择指定感兴趣的目标列、类别变量要显示的最大类别数,以及是否生成自动化 HTML 报告。Agent 将返回可视化结果和文字摘要。
示例
示例 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%”),并建议在后续建模中使用分层抽样或重平衡技术。
- 全为空值列或零方差列。 在 EDA 期间自动删除这些列,并在分析结果中记录,因为它们不具备分析价值。
- 实际为数值的字符串列。 检测数值解析成功率超过 90% 的列,并建议在进行统计分析前转换数据类型。
- 需要考虑时区的日期时间列。 如果数据集包含来自多个地区的记录,则标记不带时区的日期时间列,以防止出现静默聚合错误。