4、探索性数据分析(EDA):描述性统计、数据分布可视化、相关性矩阵与热力图
各位同学,咱们今天聊点实在的。拿到一批质量检测数据,你第一件事会做什么?
我见过不少新人,上来就撸袖子建模,结果跑出来的模型一塌糊涂。为什么?因为根本不了解自己的数据长什么样。这就好比你去相亲,连对方名字都不知道,就急着问人家要不要结婚——太急了。
EDA,说白了就是跟数据「交朋友」的过程。你得先知道它脾气怎么样、有没有坏习惯、哪些地方藏着坑。今天我就带大家走一遍我平时做EDA的标准流程。
4.1 描述性统计:先给数据「体检」
拿到数据,我习惯先跑一个 df.describe()。这就像去医院做常规体检,看看各项指标是否正常。
import pandas as pd
import numpy as np
# 假设这是某条产线的质量检测数据
df = pd.read_csv('quality_inspection.csv')
print(df.describe())
输出结果里,我最关注三个东西:
- 均值与中位数:如果两者差距太大,说明数据有偏态。我在汽车零部件项目里遇到过,某个尺寸的均值是10.2mm,中位数却是9.8mm,后来发现是设备老化导致部分产品偏大。
- 标准差:这个值太大,说明过程不稳定。你想想看,如果一批螺丝的直径标准差是0.5mm,那装配的时候肯定出问题。
- 四分位数:Q1和Q3之间的差距,能告诉你大部分数据集中在哪个范围。我曾经用这个发现了一批异常值——Q3以上的数据突然跳变,后来查到是传感器故障。
重要提醒:描述性统计只能告诉你「数据长什么样」,但没法告诉你「为什么长这样」。别只看数字,要结合业务去理解。
4.2 数据分布可视化:用图说话
数字是冷冰冰的,但图表会说话。我个人习惯先画直方图,看看数据分布的形状。
import matplotlib.pyplot as plt
import seaborn as sns
plt.figure(figsize=(10, 6))
sns.histplot(df['thickness'], bins=30, kde=True)
plt.title('厚度分布直方图')
plt.xlabel('厚度 (mm)')
plt.ylabel('频次')
plt.show()
嗯,这里要注意。如果直方图出现双峰,那大概率是两种不同的生产过程混在一起了。我在电子元器件厂遇到过这种情况,后来发现是两条产线的设备校准参数不一样。
除了直方图,我还喜欢用箱线图。它能直观地显示异常值。
plt.figure(figsize=(8, 4))
sns.boxplot(x=df['hardness'])
plt.title('硬度箱线图')
plt.show()
箱线图里那些「小圆点」就是异常值。但别急着删!我曾经犯过这个错——看到异常值就删,结果发现那些「异常值」其实是良品,只是工艺允许的波动范围比较大。所以,异常值不一定是坏数据,可能是你没理解业务。
小技巧:如果数据量很大(比如超过10万条),直方图的分箱数(bins)可以设大一点,比如50-100,否则细节会被淹没。
4.3 相关性矩阵:找「亲戚关系」
质量检测数据里,很多变量之间是有关联的。比如温度升高,硬度可能会下降;进料速度加快,表面粗糙度可能会变大。相关性矩阵就是帮我们找这些关系的。
# 计算相关性矩阵
corr_matrix = df.corr()
print(corr_matrix)
相关系数的取值范围是-1到1。绝对值越接近1,关系越强。正数表示正相关,负数表示负相关。
| 相关系数范围 | 相关强度 | 实际含义 |
|---|---|---|
| 0.8 ~ 1.0 | 极强相关 | 一个变量几乎能完全预测另一个 |
| 0.5 ~ 0.8 | 强相关 | 有明显线性关系 |
| 0.3 ~ 0.5 | 中等相关 | 有一定关系,但不稳定 |
| 0.0 ~ 0.3 | 弱相关或无关 | 基本没关系 |
但光看数字不够直观。我建议你画热力图,一眼就能看出哪些变量「抱团」了。
4.4 热力图:一眼看穿全局
plt.figure(figsize=(12, 8))
sns.heatmap(corr_matrix, annot=True, cmap='coolwarm', fmt='.2f',
linewidths=0.5, square=True)
plt.title('质量检测指标相关性热力图')
plt.show()
热力图里,颜色越深的地方,相关性越强。红色表示正相关,蓝色表示负相关。
我一般会重点关注两类情况:
- 高度正相关(比如0.9以上):说明这两个变量可能测量的是同一个东西,或者有因果关系。这时候可以考虑只保留一个,避免多重共线性。
- 高度负相关(比如-0.8以下):说明一个变量增大,另一个必然减小。这在工艺控制里很有用——比如你想提高硬度,就得接受韧性下降。
避坑指南:相关性不等于因果!我曾经在项目里看到「温度」和「缺陷率」高度相关,就以为是温度导致缺陷。后来查了工艺记录才发现,是那段时间换了原材料,温度只是跟着变了而已。所以,发现强相关后,一定要去现场验证。
4.5 实战案例:某注塑件质量检测
讲个真实案例吧。去年我帮一家注塑厂做质量分析,数据里有10个变量:温度、压力、速度、冷却时间、密度、硬度、表面粗糙度、尺寸偏差、收缩率、缺陷数。
第一步,跑描述性统计。发现「收缩率」的标准差特别大,说明过程不稳定。
第二步,画直方图。发现「收缩率」的分布是双峰的——这不对劲。后来查了生产记录,发现是两台注塑机的模具磨损程度不一样。
第三步,画热力图。发现「温度」和「收缩率」的相关系数是0.82,强正相关。但「压力」和「收缩率」只有0.12,基本无关。这说明控制温度比控制压力更有效。
最后,我建议他们把温度控制在±2°C范围内,收缩率立刻下降了30%。你看,EDA做得好,问题解决得就快。
4.6 总结与建议
EDA不是走过场,它是数据挖掘的「地基」。地基没打好,上面盖的房子再漂亮也会塌。
我给大家三个建议:
- 先看分布,再看关系:别一上来就画热力图。先搞清楚每个变量自己的脾气,再去看它们之间的互动。
- 异常值要谨慎处理:别用统计学方法一刀切。我建议你先把异常值标出来,然后去问工艺工程师——他们往往知道原因。
- 可视化要简洁:一张图里不要塞太多信息。我见过有人把20个变量的热力图放在一张图里,根本看不清。分批次画,或者只选关键变量。
好了,这一章就到这里。下一章我们会讲数据预处理——怎么处理缺失值、怎么做特征工程。到时候我会分享一些我在实战中踩过的坑,保证让你少走弯路。
核心要点回顾:
- 描述性统计:均值、中位数、标准差、四分位数
- 数据分布:直方图看形状,箱线图看异常值
- 相关性矩阵:找变量间的线性关系
- 热力图:可视化相关性,快速定位关键变量
公众号:蓝海资料掘金营,微信deep3321