数据分析是现代数据科学中不可或缺的一部分,它帮助我们理解数据、发现模式并做出明智的决策。本文将分享两个实战案例:鸢尾花数据集分析和乳腺癌数据集预处理,展示如何使用Python进行数据探索和可视化。
鸢尾花数据集分析
数据加载与基本统计
我们首先从UCI机器学习库加载著名的鸢尾花数据集:
data = pd.read_csv('http://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data', header=None)
data.columns = ['花萼长度', '花萼宽度', '花瓣长度', '花瓣宽度', '类别']
数据集包含150个样本,每个样本有4个特征(花萼长度、花萼宽度、花瓣长度、花瓣宽度)和1个类别标签(3种鸢尾花)。
我们对数值型特征进行基本统计:
for col in data.columns:if is_numeric_dtype(data[col]):print('%s:' % (col))print('\t 平均值 = %.2f' % data[col].mean())print('\t 标准差 = %.2f' % data[col].std())print('\t 最小值 = %.2f' % data[col].min())print('\t 最大值 = %.2f' % data[col].max())
数据可视化
- 直方图:展示花萼长度的分布
data['花萼长度'].hist(bins=8)
plt.title('花萼长度分布直方图')
- 箱线图:比较四个特征的分布
numeric_data.boxplot()
plt.title('鸢尾花数据箱线图')
- 散点图矩阵:展示特征间的关系
fig, axes = plt.subplots(3, 2, figsize=(12, 12))
# 绘制所有两两特征的散点图
- 平行坐标图:展示多变量数据
parallel_coordinates(data_zh, '类别')
plt.title('鸢尾花数据平行坐标图')
乳腺癌数据集预处理
数据加载与初步探索
data = pd.read_csv('https://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer-wisconsin/breast-cancer-wisconsin.data', header=None)
data.columns = ['Sample code', 'Clump Thickness', 'Uniformity of Cell Size', 'Uniformity of Cell Shape','Marginal Adhesion', 'Single Epithelial Cell Size', 'Bare Nuclei', 'Bland Chromatin','Normal Nucleoli', 'Mitoses','Class']
数据清洗
- 处理缺失值:
data = data.replace('?',np.NaN)
print('Number of missing values:')
for col in data.columns:print('\t%s: %d' % (col,data[col].isna().sum()))
- 填充缺失值:
data2 = data2.fillna(pd.to_numeric(data2, errors='coerce').median())
- 处理离群值:
Z = (data2-data2.mean())/data2.std()
Z2 = Z.loc[((Z > -3).sum(axis=1)==9) & ((Z <= 3).sum(axis=1)==9),:]
- 处理重复值:
dups = data.duplicated()
data2 = data.drop_duplicates()
数据采样与分箱
- 随机采样:
sample = data.sample(n=3) # 简单随机采样
sample = data.sample(frac=0.01, random_state=1) # 按比例采样
sample = data.sample(frac=0.01, replace=True, random_state=1) # 有放回采样
- 数据分箱:
bins = pd.cut(data['Clump Thickness'],4) # 等宽分箱
bins = pd.qcut(data['Clump Thickness'],4) # 等频分箱
图像数据降维
我们尝试对食物图片进行PCA降维:
numComponents = 2
pca = PCA(n_components=numComponents)
pca.fit(imgData)
projected = pca.transform(imgData)
通过散点图可视化降维结果,可以看到不同类别食物在PCA空间中的分布。
在数据科学和机器学习的世界中,数据预处理和可视化是构建有效模型的基础步骤。本文将通过实例,深入探讨数据预处理的关键技术和强大的可视化方法,帮助您更好地理解和处理数据。
1. 数据预处理:解决数据质量问题
1.1 处理缺失值
在真实数据集中,缺失值是一个常见问题。以乳腺癌威斯康星数据集为例,我们可以看到"Bare Nuclei"属性中存在缺失值(用问号表示)。
处理缺失值的常见方法:
- 中位数/均值替换:用属性的中位数或均值替换缺失值
- 丢弃记录:删除包含缺失值的整条记录
# 将'?'替换为NaNdata = data.replace('?', np.NaN)# 使用中位数替换缺失值data['Bare Nuclei'] = data['Bare Nuclei'].fillna(pd.to_numeric(data['Bare Nuclei'], errors='coerce').median())# 或者丢弃缺失值记录data_no_na = data.dropna()
1.2 识别和处理异常值
# 使用Z分数识别异常值Z = (data_numeric - data_numeric.mean()) / data_numeric.std()# 移除Z分数绝对值大于3的异常值data_clean = Z.loc[((Z > -3).sum(axis=1) == 9) & ((Z <= 3).sum(axis=1) == 9), :]
异常值会显著影响统计分析和模型性能。使用箱线图和Z分数是检测异常值的有效方法。
1.3 处理重复数据
数据集中的重复记录会导致模型过拟合特定实例,影响泛化能力
# 检测重复行dups = data.duplicated()print('重复行数 = %d' % (dups.sum()))# 移除重复行data_unique = data.drop_duplicates()
2. 数据转换与采样技术
2.1 数据聚合
数据聚合可以减少数据波动,提供更清晰的趋势视图。以底特律降水量数据为例,我们可以从每日数据聚合到月度或年度视图。
# 按月聚合monthly = daily.groupby(pd.Grouper(freq='M')).sum()# 按年聚合annual = daily.groupby(pd.Grouper(freq='Y')).sum()
每个级别的聚合都显示不同波动程度的趋势,年度数据的方差显著小于每日数据。
2.2 数据采样
在处理大型数据集时,采样可以减少计算负担:
# 不放回采样sample = data.sample(frac=0.01, random_state=1)# 放回采样sample = data.sample(frac=0.01, replace=True, random_state=1)
2.3 数据离散化
将连续属性转换为离散值有助于减少过拟合并提高模型解释性:
# 等宽离散化bins = pd.cut(data['Clump Thickness'], 4)# 等频离散化bins = pd.qcut(data['Clump Thickness'], 4)
3. 数据降维技术
3.1 主成分分析(PCA)
PCA是降低数据维度的强大工具,特别适用于高维数据如图像:
numComponents = 2pca = PCA(n_components=numComponents)pca.fit(imgData)projected = pca.transform(imgData)
通过降维,我们可以在低维空间中识别不同类别的项目,如食物图像分类中的汉堡、饮料、意大利面和鸡肉。
4. 数据可视化技术
在探索鸢尾花数据集时,我们使用了多种可视化技术:
4.1 单变量可视化
直方图和箱线图展示单个属性的分布:
# 直方图data['花萼长度'].hist(bins=8)# 箱线图numeric_data.boxplot()
4.2 多变量可视化
散点图和平行坐标图帮助理解属性间的关系:
·
# 不同类别的散点图for cls in data['类别'].unique():subset = data[data['类别'] == cls]plt.scatter(subset[data.columns[i]], subset[data.columns[j]], label=cls)# 平行坐标图parallel_coordinates(data_zh, '类别')
这些可视化方法揭示了鸢尾花品种间的差异和属性间的相关性。例如,花瓣长度和宽度在区分品种上比花萼尺寸更有效。
5. 实践应用案例
5.1 气候数据分析
通过底特律机场的降水数据(DTW_prec.csv),我们可以观察不同时间尺度的气候模式:
- 日降水量显示高度变异性
- 月度和年度聚合展示更清晰的季节性和年度趋势
5.2 鸢尾花分类
鸢尾花数据集分析显示:
- 三个品种在花瓣尺寸上有明显区别
- 平行坐标图清晰展示了各属性在品种间的变化
- 散点图矩阵揭示了哪些属性组合最有效区分品种
总结
数据预处理和可视化是数据科学工作流中不可或缺的环节。通过适当的预处理技术,我们可以处理现实数据中的各种问题;通过有效的可视化方法,我们能更深入地理解数据结构和模式。这些基础技能不仅对数据分析至关重要,也是构建可靠机器学习模型的前提条件。
总结
本文通过两个经典数据集展示了数据分析的全流程:
- 数据探索:了解数据结构和基本统计量
- 数据清洗:处理缺失值、离群值和重复值
- 数据可视化:使用多种图表揭示数据特征
- 数据预处理:采样、分箱和降维
这些技术是数据科学项目的基础,掌握它们将帮助你更好地理解和处理各种数据集。