数据分析与探索性数据分析的区别及Python实践

在数据科学领域,很多人刚开始时并不清楚数据分析(Data Analysis)和探索性数据分析(Exploratory Data Analysis, EDA)之间的区别。虽然两者之间的差异不大,但它们各自有着不同的目标和应用场景。

探索性数据分析(EDA)

探索性数据分析是统计推断的补充,它相对于后者来说更加灵活,不拘泥于规则和公式。在高级应用中,EDA涉及到从不同角度观察和描述数据集,然后对其进行总结。

数据分析

数据分析则是利用统计学和概率论来识别数据集中的趋势。它通过使用一些分析工具来展示历史数据,帮助深入挖掘信息,将度量、事实和数字转化为改进措施。

使用Python进行探索性数据分析

将探索一个数据集,并在Python中执行探索性数据分析。可以参加在线Python课程来学习Python。

  • 处理缺失值
  • 删除重复项
  • 异常值处理
  • 归一化和缩放(数值变量)
  • 编码分类变量(虚拟变量)
  • 双变量分析

将使用pandas库加载EDA汽车Excel文件,使用read_excel函数。

import pandas as pddata = pd.read_excel('cars.xlsx')

在这一步,将执行以下操作来检查数据集包含的内容。将检查以下事项:

  • 数据集的头部
  • 数据集的形状
  • 数据集的信息
  • 数据集的摘要

head函数将显示数据集中的顶部记录。默认情况下,Python只显示前5条记录。

print(data.head())

shape属性告诉数据集中有多少观测值和变量。它用于检查数据的维度。汽车数据集有303个观测值和13个变量。

print(data.shape)

info()用于检查数据的信息以及每个属性的数据类型。

data.info()

通过查看head函数和info中的数据,知道Income和travel time变量的数据类型是float而不是object。因此,将它们转换为float。此外,数据中还有一些无效值,如@@和*,将这些视为缺失值。

data['Income'] = data['Income'].astype(float)data['TravelTime'] = data['TravelTime'].astype(float)

describe方法将帮助了解数值数据的分布情况。可以清楚地看到最小值、均值、不同百分位的值和最大值。

print(data.describe())

可以看到,在相应的列中存在各种缺失值。处理数据集中的缺失值有多种方法,具体使用哪种技术实际上取决于处理的数据类型。

  • 删除缺失值:在这种情况下,从那些变量中删除缺失值。如果缺失值很少,可以删除这些值。
  • 用均值填充:对于数值列,可以用均值替换缺失值。在用均值替换之前,建议检查变量是否不应有极端值,即异常值。
  • 用中位数填充:对于数值列,也可以用中位数替换缺失值。如果有极端值,如异常值,建议使用中位数方法。
  • 用众数填充:对于分类列,可以用众数值替换缺失值,即频繁出现的值。

在这个练习中,将用中位数值替换数值列,对于分类列,将删除缺失值。

data.fillna(data.median(), inplace=True)data.dropna(subset=['CategoricalColumn'], inplace=True)

由于数据集中有14条重复记录,将从数据集中删除这些记录,以便只得到不同的记录。删除重复项后,将检查数据集中是否已经删除了重复项。

data.drop_duplicates(inplace=True)print(data.duplicated().sum())

异常值作为最极端的观测值,可能包括样本最大值或样本最小值,或两者都有,这取决于它们是否远离其他观测值。然而,样本最大值和最小值并不总是异常值,因为它们可能并不异常远离其他观测值。

通常使用箱线图来识别异常值,因此箱线图显示了一些数据点超出了数据的范围。

import seaborn as snssns.boxplot(data=data['INCOME'])

查看箱线图,似乎变量INCOME中存在异常值。这些异常值需要处理,处理它们有几种方法:

  • 删除异常值
  • 使用IQR替换异常值
Q1 = data['INCOME'].quantile(0.25)Q3 = data['INCOME'].quantile(0.75)IQR = Q3 - Q1data = data[~((data['INCOME'] < (Q1 - 1.5 * IQR)) |(data['INCOME'] > (Q3 + 1.5 * IQR)))]

当谈论双变量分析时,意味着分析两个变量。由于知道有数值变量和分类变量,有一种方法可以分析这些变量,如下所示:

  • 数值 vs 数值
  • 分类 vs 数值
  • 两个分类变量

如果需要找到相关性,可以计算所有变量之间的相关性。

correlation_matrix = data.corr()

通常,数据集中的变量处于不同的尺度,即一个变量以百万计,而其他变量只有100。例如,在数据集中,Income的值以千计,而年龄只有两位数。由于这些变量的数据范围可能差异很大,因此在数据预处理中,使用机器学习算法时,这是一个必要的步骤。

特征缩放(也称为数据归一化)是一种将具有不同测量尺度的变量转换为单一尺度的方法。由于数据的值范围可能差异很大,因此在数据预处理中,使用机器学习算法时,这是一个必要的步骤。

在这种方法中,将具有不同尺度测量的变量转换为单一尺度。StandardScaler使用公式(x-均值)/标准差来归一化数据。只对数值变量执行此操作。

from sklearn.preprocessing import StandardScalerscaler = StandardScaler()data['Income'] = scaler.fit_transform(data[['Income']])data['Age'] = scaler.fit_transform(data[['Age']])

One-Hot-Encoding用于创建虚拟变量,将分类变量中的类别替换为每个类别的特征,并根据记录中是否存在分类值使用1或0来表示。

这是因为机器学习算法只处理数值数据。因此,需要将分类列转换为数值列。

get_dummies方法是为每个分类变量创建虚拟变量的方法。

data = pd.get_dummies(data)

Ritika Singh - 数据科学家

是一名专业的数据科学家,也是一名热情的博客。已经在机器学习项目上工作了两年多。在这里,将找到关于“机器学习、统计学、深度学习、自然语言处理和人工智能”的文章。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485