本文目录导读:
数据挖掘实验二:探索性数据分析与数据预处理
本实验报告旨在介绍数据挖掘实验二中的探索性数据分析(EDA)和数据预处理步骤,通过对给定数据集进行深入分析,我们旨在发现数据中的潜在模式、关系和异常值,我们还将介绍如何进行数据清洗、转换和特征工程,以提高数据质量和可用性。
数据挖掘是从大量数据中发现隐藏模式和知识的过程,在进行数据挖掘之前,通常需要进行探索性数据分析和数据预处理,以了解数据的特征、分布和质量,并为后续的建模和分析做好准备。
实验环境与数据
本次实验使用 Python 编程语言和相关的数据挖掘库,如 Pandas、NumPy 和 Matplotlib,我们将使用一个虚构的数据集,该数据集包含了客户的购买行为和个人信息。
探索性数据分析
1、数据导入与初步观察
我们使用 Pandas 库将数据集导入到 Python 环境中,我们使用 head()函数查看数据集的前几行,以了解数据的结构和内容。
import pandas as pd data = pd.read_csv('customer_data.csv') data.head()
通过观察数据,我们可以发现以下信息:
- 数据集包含了 1000 个客户的记录,每个记录包含了客户的 ID、年龄、性别、收入、购买金额和购买日期等字段。
- 数据集中没有缺失值,但有些字段的数据类型需要进行转换。
- 购买金额和购买日期等字段的数据分布不均匀,需要进行进一步的分析。
2、数据描述性统计
我们使用 describe()函数计算数据集的描述性统计量,如均值、中位数、标准差、最小值和最大值等。
data.describe()
通过描述性统计,我们可以了解数据的集中趋势、离散程度和分布情况,我们可以发现客户的平均年龄为 35 岁,购买金额的中位数为 1000 元,标准差为 500 元等。
3、数据可视化
为了更直观地了解数据的分布和关系,我们可以使用数据可视化技术,在本次实验中,我们将使用 Matplotlib 库绘制直方图、箱线图和散点图等。
import matplotlib.pyplot as plt 绘制年龄直方图 plt.hist(data['age'], bins=20) plt.xlabel('Age') plt.ylabel('Frequency') plt.title('Histogram of Age') plt.show() 绘制购买金额箱线图 plt.boxplot(data['purchase_amount']) plt.xlabel('Purchase Amount') plt.ylabel('Value') plt.title('Boxplot of Purchase Amount') plt.show() 绘制年龄与购买金额散点图 plt.scatter(data['age'], data['purchase_amount']) plt.xlabel('Age') plt.ylabel('Purchase Amount') plt.title('Scatter Plot of Age and Purchase Amount') plt.show()
通过可视化分析,我们可以发现以下信息:
- 客户的年龄分布呈现正态分布,大部分客户的年龄在 25 岁到 45 岁之间。
- 购买金额的分布呈现右偏态,大部分客户的购买金额在 500 元到 2000 元之间。
- 年龄与购买金额之间存在正相关关系,即年龄越大的客户,购买金额越高。
4、异常值检测
在数据集中,可能存在一些异常值,这些异常值可能会对数据分析和建模产生影响,为了检测异常值,我们可以使用箱线图和 Z-score 方法。
使用箱线图检测异常值 Q1 = data['purchase_amount'].quantile(0.25) Q3 = data['purchase_amount'].quantile(0.75) IQR = Q3 - Q1 lower_bound = Q1 - 1.5 * IQR upper_bound = Q3 + 1.5 * IQR outliers = data[(data['purchase_amount'] < lower_bound) | (data['purchase_amount'] > upper_bound)] print('异常值数量:', outliers.shape[0]) outliers.head() 使用 Z-score 方法检测异常值 from scipy.stats import zscore z_scores = zscore(data['purchase_amount']) threshold = 3 outliers = data[(np.abs(z_scores) > threshold)] print('异常值数量:', outliers.shape[0]) outliers.head()
通过箱线图和 Z-score 方法,我们可以发现有 5 个异常值,这些异常值的购买金额远远高于其他客户。
数据预处理
1、数据清洗
在数据集中,可能存在一些缺失值、重复值和异常值,为了提高数据质量,我们需要进行数据清洗,在本次实验中,我们将使用 Pandas 库的 dropna()函数删除包含缺失值的行,使用 drop_duplicates()函数删除重复行。
删除包含缺失值的行 data = data.dropna() 删除重复行 data = data.drop_duplicates()
经过数据清洗,我们发现数据集没有缺失值和重复值。
2、数据转换
为了便于后续的建模和分析,我们需要对数据进行转换,在本次实验中,我们将使用 Pandas 库的 astype()函数将购买日期字段的数据类型转换为日期时间类型。
data['purchase_date'] = pd.to_datetime(data['purchase_date'])
经过数据转换,我们发现购买日期字段的数据类型已经转换为日期时间类型。
3、特征工程
特征工程是数据挖掘中的一个重要环节,它可以通过对原始数据进行变换和组合,提取出有意义的特征,从而提高模型的性能,在本次实验中,我们将使用 Pandas 库的 get_dummies()函数将性别字段进行独热编码,将年龄字段进行分箱处理。
对性别字段进行独热编码 data = pd.get_dummies(data, columns=['gender']) 对年龄字段进行分箱处理 bins = [0, 25, 35, 45, 55, 65, 100] labels = ['0-24', '25-34', '35-44', '45-54', '55-64', '65+'] data['age_group'] = pd.cut(data['age'], bins=bins, labels=labels)
经过特征工程,我们发现数据集的特征更加丰富和有意义。
通过本次数据挖掘实验,我们对给定的数据集进行了深入的探索性数据分析和数据预处理,通过数据分析,我们发现了数据中的潜在模式、关系和异常值,通过数据预处理,我们提高了数据的质量和可用性,为后续的建模和分析做好了准备,在后续的实验中,我们将使用这些预处理后的数据进行建模和分析,以挖掘出更多有价值的信息。
评论列表