探索性数据分析(EDA)在数据科学项目中的应用

探索性数据分析(EDA)是数据科学项目中一个被低估且使用不足的方法。它是数据科学家进行的第一步,通过研究数据并从中提取有价值的信息和非显而易见的洞察,这最终有助于模型构建。在对数据进行建模和测试之前,需要与数据建立关系。可以通过探索数据、将数据与目标变量绘制在一起并观察数据的行为来建立这种关系。这种在建模之前的分析过程被称为探索性数据分析。

本文将对Kaggle上的一个复杂数据集(高级房价预测)进行实际操作的EDA。数据集的链接如下:

数据科学项目的生命周期包括以下步骤:

  1. 探索性数据分析
  2. 特征工程
  3. 特征选择
  4. 超参数调优
  5. 模型构建与部署

将对一个包含大约81个独立特征和1个目标变量(销售价格)的复杂数据集进行操作。这是一个回归问题。EDA将包含一些基本步骤,如分析缺失值、数值和分类特征的分布、异常值、多重共线性等。将逐一查看每个步骤。

缺失值分析

获得的数据大多包含缺失值,需要找出缺失数据与销售价格(目标变量)之间是否存在任何关系。根据这个关系,可以用该列的中位数等值替换缺失值。以下是Python代码,用于捕获大型数据集中的缺失值,并将其替换为1,将非缺失值替换为0,并绘制与销售价格中位数的关系图,以查看是否存在缺失值与目标变量之间的关系。

# 假设df是包含数据的DataFrame missing_values = df.isnull().astype(int) missing_values['LotFrontage'].plot(kind='scatter', x='LotFrontage', y='SalePrice')

从图中可以看出,LotFrontage特征的缺失值对目标变量有影响,因为它随着销售价格的增加而增加。因此,存在两者之间的关系,需要用该特征的中位数等实质性的值替换缺失值。

数值特征分析

由于这是一个大型数据集,需要可视化不同类型的变量,如日期时间(年份)、离散和连续数值特征、分类特征及其与目标变量的行为。数据集中有39个数值特征。字符串或数字和字符串混合的数据类型被给定为对象,可以使用types属性进行检查。

# 检查数据类型 print(df.dtypes)

以下是Python代码,用于查找年份特征,并查看这些四个特征与目标变量的行为。

# 假设df是包含数据的DataFrame df['YearSold'] = pd.to_datetime(df['YearSold']).dt.year df.groupby('YearSold')['SalePrice'].mean().plot(kind='line')

从图中可以看出,随着销售年份的增加,成本降低。这必须是一个异常,因为这是不可能的,所以需要进行更多的分析并得出更好的结论。这只是显示了EDA的重要性以及它如何影响结论。

异常值分析

异常值是位于数据集分布之外的任何数据点。数据集中的异常值可能会影响模型的准确性。线性回归等算法对异常值非常敏感,因此需要小心处理。

标准差方法是识别和替换异常值的常用方法,任何位于3个标准差之外的数据点都被认为是异常值。尽管该阈值标准差可以根据数据集的大小而变化。

在EDA中,让使用箱线图分析数据集中的异常值。

# 假设df是包含数据的DataFrame df.boxplot(column='SalePrice')

黑色点表示存在的异常值,它们远离分布。矩形框的下线是25%ile,上线是75%ile。因此,这些黑色点是需要移除或替换的值,将在特征工程中看到。

分类特征的数据类型是对象,可以使用pandas的types属性进行检查。通常将特征的分类值转换为虚拟变量,以便算法理解。这被称为独热编码。如果特定类别的基数非常高,则不使用独热编码,因为它可能导致维度的诅咒。

# 假设df是包含数据的DataFrame df['MSZoning'] = pd.get_dummies(df['MSZoning'], drop_first=True)

以下是Python代码,用于检查分类特征与目标变量中位数之间的关系。

# 假设df是包含数据的DataFrame for column in categorical_columns: plt.scatter(df[column], df['SalePrice']) plt.title(column) plt.show()

选择的类别阈值是10,以执行独热编码。现在让检查分类特征与目标变量中位数之间是否存在任何关系。

在任何数据集中,当独立特征内部相互关联时,它会降低模型的准确性,因为无法获得特征的个体贡献。这被称为多重共线性。

# 假设df是包含数据的DataFrame corr_matrix = df.corr() sns.heatmap(corr_matrix, annot=True)
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485