探索性数据分析 (EDA) 简介

发布于:2024-10-18 ⋅ 阅读:(14) ⋅ 点赞:(0)

一、介绍

探索性数据分析是研究或理解数据并提取洞察数据集以识别数据模式或主要特征的过程。EDA 通常分为两种方法,即图形分析和非图形分析。

EDA 非常重要,因为在开始工作之前首先了解问题陈述和数据特征之间的各种关系是一种很好的做法。

在本文中,EDA 注释对于总结发现至关重要。EDA 有助于有效地发现模式、趋势和见解。“eda notes”和“eda”是指导分析过程的关键词,可确保以全面、有条理的方式进行数据探索。

二、探索性数据分析 (EDA)

从技术上讲,EDA 的主要目的是

  • 检查数据分布
  • 处理数据集的缺失值(每个数据集最常见的问题)
  • 处理异常值
  • 删除重复数据
  • 对分类变量进行编码
  • 规范化和缩放
    注意——如果您不熟悉上述某些术语,请不要担心,我们将详细了解每一个术语。

三、探索性数据分析的类型

3.1 单变量分析

单变量分析侧重于一次分析单个变量。它旨在描述数据并发现模式,而不是建立因果关系或关系。使用的技术包括:

描述性统计数据(平均值、中位数、众数、标准差等)
频率分布(直方图、条形图等)

3.2 双变量分析

双变量分析探索两个变量之间的关系。它有助于发现变量对之间的相关性、关系和依赖关系。技术包括:

  • 散点图
  • 相关性分析

3.3 多元分析

多元分析将双变量分析扩展为包括两个以上的变量。它侧重于理解多个变量之间复杂的相互作用和依赖关系。技术包括:

  • 热图
  • 散点图矩阵
  • 主成分分析(PCA)

四、理解 EDA

为了了解探索性数据分析所涉及的步骤,我们将使用 Python 作为编程语言和 Jupyter Notebooks,因为它是开源的,它不仅是一个出色的 IDE,而且非常适合可视化和演示。

步骤 1
首先,我们将导入所需的所有 Python 库,包括用于数值计算和科学计算的NumPy 、用于处理数据的Pandas以及用于可视化的Matplotlib和Seaborn。

步骤 2
然后我们将数据加载到Pandas数据框中。为了进行分析,我们将使用“世界幸福报告”的数据集,该数据集包含以下列:人均 GDP、家庭、预期寿命、自由、慷慨、信任政府腐败等,以描述这些因素对评估幸福感的贡献程度。

步骤3
我们可以通过使用head()方法检查几行来观察数据集 ,该方法返回数据集的前五条记录。

步骤4
利用形状,我们可以观察数据的维度。

步骤5
info()方法显示数据的一些特征,例如列名、列的非空值数量、数据的 Dtype 和内存使用情况。
Python代码:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

happinessData = pd.read_csv('happiness.csv')
print(happinessData.head())
print("-------------------------")
print("-------------------------")
print(f"Shape of the data: {happinessData.shape}")
print("-------------------------")
print("-------------------------")
print(happinessData.info())

由此,我们可以观察到,我们拥有的数据没有任何缺失值。在这种情况下我们非常幸运,但在现实生活中,数据通常有缺失值,我们需要处理这些缺失值才能使我们的模型准确工作。(注意 - 稍后,我将向您展示如果数据中有缺失值,如何处理)

第 6 步
我们将使用describe()方法,它显示每个数值特征(int64 和 float64 类型)的基本统计特征:非缺失值的数量、平均值、标准差、范围、中位数、0.25、0.50、0.75 四分位数。
在这里插入图片描述
步骤7
处理数据集中的缺失值。幸运的是,此数据集没有任何缺失值,但现实世界并不像我们的情况那么简单。

因此我故意删除了一些值只是为了描述如何处理这种特殊情况。

我们可以通过以下命令检查数据是否包含空值
在这里插入图片描述
我们可以看到,“幸福感分数”和“自由度”特征各有 1 个缺失值。

如何使用一些技巧处理缺失值
删除缺失值——如果数据集很大而缺失值很少,那么我们可以直接删除这些值,因为它不会产生太大影响。
用平均值替换——我们可以用平均值替换缺失值,但如果数据有异常值,则不建议这样做。
用中值替换——我们可以用中值替换缺失值,如果数据有异常值,建议这样做。
用模式值替换——对于分类特征,我们可以这样做。
回归——可以使用数据集中的其他细节来预测空值。
对于我们的情况,我们将用中值替换缺失值来处理缺失值。

幸福感中位数
现在,我们可以再次检查缺失值是否已被处理。
在这里插入图片描述
现在我们可以看到我们的数据集现在没有任何空值。

步骤8
我们可以检查数据集中的重复值,因为重复值的存在会影响我们的 ML 模型的准确性。
在这里插入图片描述
我们可以使用drop_duplicates()删除重复值
在这里插入图片描述
我们可以看到重复值现在已经被处理了。

步骤9

处理数据中的异常值,即数据中的极值。我们可以使用箱线图找到数据中的异常值。
在这里插入图片描述
从上面的箱线图中我们可以看出,数据的正常范围位于块内,异常值则用图最末端的小圆圈表示。

因此,为了处理它,我们可以删除异常值或使用IQR(四分位距法)替换异常值。

在探索性数据分析数据集中,为了识别模式,IQR 被计算为数据的第 25 百分位数和第 75 百分位数之间的差值。百分位数可以通过对特定索引的选择值进行排序来计算。IQR 用于通过定义样本值的限制来识别异常值,这些限制是 IQR 的因子 k。因子 k 的常见值为 1.5。
在这里插入图片描述
现在我们可以再次绘制箱线图并检查异常值是否已被处理。
在这里插入图片描述
第 10 步

规范化和缩放——数据规范化或特征缩放是标准化数据特征范围的过程,因为范围可能有很大差异。所以我们可以使用 ML 算法预处理数据。因此,我们将使用StandardScaler来处理数值,其公式为x-mean/std 偏差。
在这里插入图片描述
我们可以看到,“幸福指数”一栏已经标准化了。

步骤11
我们可以使用corr()方法找到数据不同列之间的 成对相关性。(注意 - 所有非数字数据类型列将被忽略。)

happinessData.corr() 用于查找数据框中所有列的两两相关性。任何“nan”值都会被自动排除。

结果系数是 -1 到 1 之间的值(含 -1 和 1),其中:

1:总正线性相关
0:没有线性相关性,两个变量很可能不会互相影响
-1:总负线性相关性
皮尔逊相关系数是函数“corr”的默认方法。

现在,我们将使用 Seaborn 创建热图来可视化数据不同列之间的相关性:
在这里插入图片描述
从上面的相关性热图中我们可以看出,以下两个因素之间存在很高的相关性:

幸福指数 – 经济(人均 GDP)= 0.78
幸福指数 – 家庭 = 0.74
幸福指数 – 健康(预期寿命) = 0.72
经济(人均 GDP)– 健康(预期寿命)= 0.82
步骤12
现在,我们将使用 Seaborn 通过回归图来可视化经济(人均 GDP)与幸福指数之间的关系。我们可以看到,随着经济的增长,幸福指数也会增加,并呈现出正相关关系。
在这里插入图片描述
现在,我们将使用回归图来直观地展示家庭和幸福指数之间的关系。
在这里插入图片描述

现在,我们将使用回归图来直观地展示健康(预期寿命)和幸福指数之间的关系。我们可以看到,幸福取决于健康,也就是说,健康状况越好,一个人就越幸福。
在这里插入图片描述
现在,我们将使用回归图来可视化自由度和幸福感得分之间的关​​系。我们可以看到,由于这两个参数之间的相关性较小,因此图表更加分散,两者之间的依赖性较小。
在这里插入图片描述
我希望我们现在都对如何执行探索性数据分析(EDA)有一个基本的了解。

因此,以上是我个人遵循的探索性数据分析步骤,但还有各种其他图表和命令,我们可以使用它们来进一步探索数据。

五、结论

探索性数据分析 (EDA) 包括通过单变量、双变量和多变量分析技术检查数据集以发现模式。这些方法依次集中于单个变量、配对变量和多个变量。EDA 还涉及处理缺失值,通常使用均值或中位数插补和预测建模等方法来解决缺失值问题,以确保数据完整性。