Python,数据挖掘之EDA(Exploratory Data Analysis)及EDA懒人工具
一、EDA 是什么EDA 全称Exploratory Data Analysis探索性数据分析是数据挖掘、机器学习建模前必须做的前置流程。 核心目的不靠复杂模型只用统计、图表、简单运算看懂数据本身摸清数据规律、问题、特征关系为后续清洗、特征工程、建模铺路。EDA 核心 4 大目标了解数据结构行列、字段类型、缺失值、异常值单变量分布每个特征自身的取值分布、集中趋势、离散程度多变量关系特征与特征、特征与标签的相关性发现数据问题缺失、重复、离群、偏态、多重共线性等隐患EDA 在数据挖掘里的实际价值提前规避建模翻车不做 EDA 很容易踩坑大量缺失数据、极端异常值、高度相关特征导致模型过拟合。指导数据清洗策略根据缺失率决定填充 / 删除根据箱线图识别并处理离群点。指导特征工程分布偏态数据做 log 变换强相关特征考虑降维类别不均衡决定采样策略。二、EDA 两大分类1. 单变量分析Univariate只看单个字段不考虑其他变量数值型均值、中位数、方差、四分位数、直方图、箱线图分类型计数、频次、饼图、柱状图2. 多变量分析Multivariate同时看两个及以上字段挖掘关联数值 × 数值相关系数、散点图、热力图数值 × 分类分组均值、小提琴图、箱线分组对比分类 × 分类交叉表、堆叠柱状图三、Python 做 EDA 常用工具栈pandas数据读取、基础统计、缺失值、交叉表matplotlib / seaborn绘图可视化EDA 主力plotly交互式图表可选sweetviz / pandas-profiling一键自动生成完整 EDA 报告四、标准 EDA 完整步骤Python 实操流程步骤 1加载数据查看基础信息import pandas as pd df pd.read_csv(data.csv) # 基础信息 print(df.shape) # 样本数、特征数 print(df.info()) # 字段类型、缺失值统计 print(df.head()) # 前5行 print(df.describe()) # 数值字段统计量 print(df.duplicated().sum()) # 重复行数量步骤 2缺失值分析数据挖掘高频问题# 缺失值数量占比 miss df.isnull().sum() miss_rate miss / len(df) print(pd.DataFrame({缺失数量:miss, 缺失占比:miss_rate}))步骤 3单变量分布分析import seaborn as sns import matplotlib.pyplot as plt # 直方图核密度图 sns.histplot(df[price], kdeTrue) plt.show() # 箱线图查看异常值 sns.boxplot(xdf[price]) plt.show()分类特征# 类别计数 print(df[gender].value_counts()) # 柱状图 sns.countplot(xgender, datadf) plt.show()步骤 4多变量相关性分析# 1. 相关系数矩阵 corr df.corr(numeric_onlyTrue) # 热力图 sns.heatmap(corr, annotTrue, cmapcoolwarm) plt.show() # 2. 特征与标签散点关系 sns.scatterplot(xage, yincome, huelabel, datadf) plt.show() # 3. 分类分组对比 sns.boxplot(xcategory, ytarget, datadf) plt.show()五、自动一键 EDA懒人工具主流两套工业级一键 EDA 工具ydata-profiling原 pandas-profiling、sweetviz还有轻量替代dtale。一、ydata-profiling最常用报告最全1. 简介前身pandas-profiling改名后为 ydata-profiling生成独立 HTML 完整分析报告覆盖 EDA 全部维度企业数据分析、竞赛标配。 自动输出内容数据集概览行数、列数、缺失、重复、内存占用、变量类型统计单变量分析数值型均值、中位数、标准差、四分位数、直方图、偏度、峰度、极值、零值数量分类型类别计数、占比、条形图、唯一值数量文本 / 日期字符长度分布、时间趋势缺失值专项缺失数量、缺失热力图、缺失相关性相关性矩阵皮尔逊、斯皮尔曼、肯德尔相关系数 热力图标注高相关特征多重共线性预警交互变量两两散点图样本预览前 10 行、后 10 行数据2. 安装# 新版包名 ydata-profiling pip install ydata-profiling3. 基础完整代码import pandas as pd from ydata_profiling import ProfileReport # 读取数据 df pd.read_csv(data.csv) # 生成报告对象 profile ProfileReport( df, title数据集EDA分析报告, # 网页标题 explorativeTrue, # 探索模式展示更多图表 minimalFalse, # False完整报告True轻量化快速报告 correlations{ # 自定义相关系数计算 pearson: {calculate: True}, spearman: {calculate: True}, }, missing_diagrams{heatmap: True} # 开启缺失热力图 ) # 导出HTML文件本地打开 profile.to_file(eda完整报告.html) # jupyter notebook 内直接嵌入展示 # profile.to_notebook_iframe()4. 进阶实用参数大数据加速样本量上万会卡# minimalTrue 关闭大量图表极速生成 profile ProfileReport(df, title轻量化报告, minimalTrue)分类任务传入标签列自动对比特征与目标关系profile ProfileReport(df, title分类EDA, target_namelabel)分对比两份数据集训练集 vs 测试集train pd.read_csv(train.csv) test pd.read_csv(test.csv) train_report ProfileReport(train) test_report ProfileReport(test) # 对比两份数据分布差异 compare_report train_report.compare(test_report) compare_report.to_file(train_test对比报告.html)5. 优缺点优点报告信息最全、可视化丰富、支持训练 / 测试集对比、可自定义配置 .缺点大数据10w 行 、50 特征以上生成速度慢、HTML 文件体积大、占用内存高二、Sweetviz速度更快对比功能更强1. 简介轻量型 EDA 工具生成简洁 HTML数据集对比功能碾压 profiling速度更快适合大数据快速筛查。 自动输出模块整体摘要缺失、重复、数值 / 分类字段统计每个特征独立面板分布、最大值最小值、缺失率目标变量关联分析自动计算特征与标签的关联强度两组数据分布差异对比训练 / 测试、正负样本2. 安装pip install sweetviz3. 三种使用场景代码场景 1单数据集 EDAimport sweetviz as sv import pandas as pd df pd.read_csv(data.csv) # 分析整张表 report sv.analyze(df) # 输出html report.show_html(sweetviz单数据集报告.html)场景 2指定目标变量分类 / 回归都支持# target参数填写标签列名自动计算特征与标签相关性 report sv.analyze(df, target_featy) report.show_html(带目标分析.html)场景 3两组数据对比最核心优势常用于训练集 vs 测试集、正常样本 vs 异常样本train pd.read_csv(train.csv) test pd.read_csv(test.csv) # compare([数据集A, 名称A], [数据集B, 名称B]) compare_report sv.compare([train, 训练集], [test, 测试集], target_featlabel) compare_report.show_html(训练测试分布对比.html)4. 优缺点优点运行速度快、HTML 体积小、对比功能强大、内存占用低、适合大数据粗筛缺点图表种类少于 ydata-profiling无详细相关系数热力图六、常见踩坑解决数据集过大生成报告卡死用sweetviz或profiling(minimalTrue)抽样后再生成报告df.sample(10000)中文乱码 绘图前设置全局字体import matplotlib.pyplot as plt plt.rcParams[font.sans-serif] [SimHei] plt.rcParams[axes.unicode_minus] False