原创内容
No.773
数据分人必知必会 | 分析方法:可视化探索(EDA)
敲黑板划重点:这可能是最最最常用的一种数据分析方法了,没有之一!
图片由夸克AI绘制
在数分人必知必会这个系列内容中,陆陆续续介绍了很多常用的分析方法(请忽略我专栏内容断断续续的问题),相比其他的分析方法,不得不说,EDA才是我们在做数据分析的时候的核心技术。
按照惯例,在介绍一个分析方法之前还是先来一个官方一点的介绍:
可视化探索(Exploratory Data Analysis,简称EDA)是数据科学和统计分析中的一个关键步骤,它通过图表、图形和其他可视化工具,帮助我们深入理解数据的结构、特征和潜在模式。EDA 的核心目标是在建模或假设检验之前,发现数据中的规律、异常值、缺失值、变量之间的关系等,从而为后续分析提供依据。
这段话可能有点难懂,我之所以说EDA是最重要的分析方法没有之一,是因为EDA是一个完整的数据分析项目的开端。
之前的一些系列文章中介绍过,我其实是个文科生,一开始其实做那种给业务出决策建议的偏业务的数据分析师的,后来渐渐从偏业务向着偏技术越走越深了。这个转变的过程其实就和可视化探索EDA有着很深厚的关系:可视化探索的过程中,一个高效的可视化探索工具非常重要,出于提高可视化探索效率的需求,渐渐在BI工具的道路上越走越远。
我们说回EDA的话题,一个数据分析项目的起点是EDA是因为在EDA的过程中我们可以做这样五件事,或者说可视化探索分析有这么五个非常重要的核心目标:
1.理解数据分布:通过直方图、箱线图等,了解每个变量的集中趋势、离散程度和分布形状。
2.发现异常值:识别远离大部分数据的异常点,避免其对后续模型产生干扰。
3.探索变量关系:通过散点图、热力图等,分析变量间的相关性或潜在因果关系。
4.检测缺失值:可视化数据缺失的模式(如热力图),决定如何填充或处理缺失数据。
5.验证假设:例如,通过可视化初步验证“收入与消费是否呈正相关”等假设。
因为EDA的核心是作图,因此,掌握各种图表和分析之间的关系就非常重要了,Excel和BI工具作图都比较简单,就不废话了,我们来介绍一下常用的Python中的可视化包和一些没有那么热门场景的图表吧:
通常情况下,一个标准的EDA流程是这样的:
step1,数据概览
使用 df.head()、df.info()、df.describe() 快速了解数据结构和统计摘要。
step2,单变量分析
直方图:查看分布(如“用户年龄”是否呈正态分布)。
箱线图:检查“销售额”是否存在极端异常值。
step3,双变量分析
散点图:观察“广告支出”与“销售额”是否线性相关。
分组箱线图:对比“不同地区的平均收入”差异。
step4,多变量分析
热力图:分析“温度、湿度、风速”与“空调销量”的相关性。
成对散点图(Pairplot):探索高维数据中所有变量的两两关系。
step5,交互式探索
使用 Plotly等工具动态调整参数(如筛选时间范围),深入挖掘细节。
从工具上来说,除了第一步使用Python比较便捷之外,其他步骤在实操过程中都是BI工具的效率要高出很多。
这里随手给一个使用Python进行泰坦尼克号生存率分析的项目:
import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd
# 加载数据(以泰坦尼克号数据集为例)
df = sns.load_dataset('titanic')
# 1. 数据概览
print(df.info()) # 查看缺失值和数据类型
print(df.describe()) # 数值型变量的统计摘要
# 2. 单变量分析:年龄分布
plt.figure(figsize=(8, 4))
sns.histplot(df['age'], bins=30, kde=True)
plt.title('年龄分布')
plt.show()
# 3. 双变量分析:船舱等级与生存率的关系
plt.figure(figsize=(6, 4))
sns.barplot(x='pclass', y='survived', data=df)
plt.title('不同舱位等级的生存率')
plt.show()
# 4. 相关系数热力图(数值变量)
plt.figure(figsize=(8, 6))
corr = df[['age', 'fare', 'pclass', 'survived']].corr()
sns.heatmap(corr, annot=True, cmap='coolwarm')
plt.title('变量相关性热力图')
plt.show()
总的来说EDA本身是比较简单的,因为在实操的过程中我们有很多工具都可以用来做图表的绘制,因此从技术难度上来说是基本没什么难度的。哪怕是相对有一定门槛的Python方法,从上面的code大家也可以看出来,其实很简单。
不过对于EDA,也有一些重要的注意事项需要提出来。
首先就是要避免过度可视化。
在EDA的过程中,我们做图表是为了看数据的情况,而不是为了图表好看,因此在这个过程中分清主次还是很重要的。对于所有的可视化工具而言,做出一个图表是简单的,但是做出一个好看的图表要花费的功夫是做出图表的很多倍。在这个过程中分清主次还是很重要的,尤其是对一些有审美强迫的人来说(比如我,以及根据对周围人的观察来说,女生有这种行为还是挺普遍的)。
第二就是有时候还需要结合一下统计检验的结果,因为纯粹的可视化可能引起一些误导。说到这里就不得不提到商业分析中和统计分析的一个很核心的差别点了,在商业分析中统计检验的结果重要但是没有想象中那么重要——统计检验不显著的从来不会成为影响商业决策的依据。但是我们在执行分析的时候依然需要对结论进行假设检验,目标是防止误导非专业的人员通过图表得出一个错误的结论。
最后就是对超大数据集使用抽样或聚合(如绘制数据密度图而非散点图,这个考虑更多的是偏性能方面的考虑了,如果大家的设备能抗住的话,不遵守这一条其实也没有什么问题。
本期的分析方法小讲就到这里,欢迎大家留言讨论。此外,唠嗑群也在持续招募中,欢迎私聊。