当前位置: 首页 > news >正文

数据分析与可视化实战:从鸢尾花到乳腺癌数据集

数据分析是现代数据科学中不可或缺的一部分,它帮助我们理解数据、发现模式并做出明智的决策。本文将分享两个实战案例:鸢尾花数据集分析和乳腺癌数据集预处理,展示如何使用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())

数据可视化

  1. ​直方图​​:展示花萼长度的分布
data['花萼长度'].hist(bins=8)
plt.title('花萼长度分布直方图')
  1. ​箱线图​​:比较四个特征的分布
numeric_data.boxplot()
plt.title('鸢尾花数据箱线图')
  1. ​散点图矩阵​​:展示特征间的关系
fig, axes = plt.subplots(3, 2, figsize=(12, 12))
# 绘制所有两两特征的散点图
  1. ​平行坐标图​​:展示多变量数据
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']

数据清洗

  1. ​处理缺失值​​:
data = data.replace('?',np.NaN)
print('Number of missing values:')
for col in data.columns:print('\t%s: %d' % (col,data[col].isna().sum()))
  1. ​填充缺失值​​:
data2 = data2.fillna(pd.to_numeric(data2, errors='coerce').median())
  1. ​处理离群值​​:
Z = (data2-data2.mean())/data2.std()
Z2 = Z.loc[((Z > -3).sum(axis=1)==9) & ((Z <= 3).sum(axis=1)==9),:]
  1. ​处理重复值​​:
dups = data.duplicated()
data2 = data.drop_duplicates()

数据采样与分箱

  1. ​随机采样​​:
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)  # 有放回采样
  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 鸢尾花分类

鸢尾花数据集分析显示:

  • 三个品种在花瓣尺寸上有明显区别
  • 平行坐标图清晰展示了各属性在品种间的变化
  • 散点图矩阵揭示了哪些属性组合最有效区分品种

总结

数据预处理和可视化是数据科学工作流中不可或缺的环节。通过适当的预处理技术,我们可以处理现实数据中的各种问题;通过有效的可视化方法,我们能更深入地理解数据结构和模式。这些基础技能不仅对数据分析至关重要,也是构建可靠机器学习模型的前提条件。

总结

本文通过两个经典数据集展示了数据分析的全流程:

  1. ​数据探索​​:了解数据结构和基本统计量
  2. ​数据清洗​​:处理缺失值、离群值和重复值
  3. ​数据可视化​​:使用多种图表揭示数据特征
  4. ​数据预处理​​:采样、分箱和降维

这些技术是数据科学项目的基础,掌握它们将帮助你更好地理解和处理各种数据集。

http://www.xdnf.cn/news/265177.html

相关文章:

  • 数据库基础-库,表的操作
  • 人工智能——层次聚类算法
  • JVM 一文详解
  • 普通IT的股票交易成长史--20250502 突破(2)
  • 【Net】DPDK
  • Vscode/Code-Server 安装中文包——CI/CD
  • PCIe | TLP 报头 / 包格式 / 地址转换 / 配置空间 / 命令寄存器 / 配置类型
  • JMM 与 JVM 运行时数据区有什么区别和联系?
  • 数字化转型进阶:26页华为数字化转型实践分享【附全文阅读】
  • 传奇各职业/战士/法师/道士/头盔爆率及出处产出地/圣战/法神/天尊/祈祷/斗笠/精灵
  • 面向对象编程简介
  • list的两种设计
  • MySQL 比较运算符详解
  • 穿越数据森林与网络迷宫:树与图上动态规划实战指南
  • 深拷贝与浅拷贝的核心区别
  • 【unity游戏开发——Animator动画】Animation动画资源节约、优化、编辑修改小技巧
  • 人工智能:如何快速筛选出excel中某列存在跳号的单元格位置?
  • Manus联合创始人:公司产品基于Claude和阿里千问大模型开发
  • Java开发经验——ali编码规范经验总结
  • java面向对象编程【高级篇】之特殊类
  • 【Java多线程】计时器Timer/ScheduledExecutorService的使用
  • mysql主从复制搭建,并基于‌Keepalived + VIP实现高可用
  • MARM:推荐系统中的记忆增强突破
  • C++ - 数据容器之 forward_list(创建与初始化、元素访问、容量判断、元素遍历、添加元素、删除元素)
  • Python爬虫实战:获取企信网指定公司基本工商数据并分析,为客户选择公司做参考
  • 封装pinia并引入pinia持久化工具(pinia-plugin-persistedstate)
  • HarmonyOS NEXT——DevEco Studio的使用(还没写完)
  • 如何基于HAL库进行STM32开发
  • 华为云Flexus+DeepSeek征文|DeepSeek-V3商用服务开通教程
  • Python 学习