news 2026/7/5 12:10:22

UCI 玻璃数据集多分类实战:Pandas 数据清洗与 3 种可视化方法解析

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
UCI 玻璃数据集多分类实战:Pandas 数据清洗与 3 种可视化方法解析

UCI玻璃数据集深度解析:从数据清洗到可视化洞察的完整指南

1. 初识UCI玻璃数据集:法医化学的数字化密码

当犯罪现场散落的玻璃碎片成为破案关键时,化学成分类别分析就成为了现代法医学的重要工具。UCI玻璃数据集正是这样一个独特的化学分析数据集,它记录了214个玻璃样本的9种化学成分含量及对应的用途分类。这个看似简单的数据集背后,隐藏着材料科学、刑事侦查和工业质检等多领域的应用价值。

玻璃作为非晶态固体,其物理特性与化学成分有着直接关联。通过测量以下关键指标,我们可以建立化学成分与用途之间的关联模型:

  • 折射率(RI):光线在玻璃中的弯曲程度
  • 氧化物含量:Na(钠)、Mg(镁)、Al(铝)、Si(硅)、K(钾)、Ca(钙)、Ba(钡)、Fe(铁)的重量百分比

玻璃类型被编码为1-7的整数,涵盖了建筑窗户、车辆玻璃、容器玻璃等多种用途。在实际案件中,分析玻璃碎片的化学成分可以帮助确定其来源,比如判断车祸现场的玻璃是来自车辆前挡风玻璃还是建筑物的窗户玻璃。

import pandas as pd # 从UCI机器学习仓库加载原始数据 url = "https://archive.ics.uci.edu/ml/machine-learning-databases/glass/glass.data" columns = ['Id','RI','Na','Mg','Al','Si','K','Ca','Ba','Fe','Type'] glass_df = pd.read_csv(url, header=None, names=columns) print(f"数据集维度:{glass_df.shape}") print("前5条样本:") print(glass_df.head())

输出示例:

数据集维度:(214, 10) 前5条样本: Id RI Na Mg Al Si K Ca Ba Fe Type 0 1 1.52101 13.64 4.49 1.10 71.78 0.06 8.75 0.0 0.0 1 1 2 1.51761 13.89 3.60 1.36 72.73 0.48 7.83 0.0 0.0 1 2 3 1.51618 13.53 3.55 1.54 72.99 0.39 7.78 0.0 0.0 1 3 4 1.51766 13.21 3.69 1.29 72.61 0.57 8.22 0.0 0.0 1 4 5 1.51742 13.27 3.62 1.24 73.08 0.55 8.07 0.0 0.0 1

2. 数据清洗实战:打造高质量分析基础

原始数据就像未经打磨的钻石,需要经过精细切割才能展现其真正价值。UCI玻璃数据集虽然结构良好,但仍存在一些需要处理的问题点:

2.1 缺失值与异常值检测

首先检查数据的完整性:

# 检查缺失值 print("缺失值统计:") print(glass_df.isnull().sum()) # 描述性统计 print("\n描述性统计:") print(glass_df.describe())

关键发现:

  • 数据集中没有缺失值,这在真实场景中非常罕见
  • 某些元素如Ba(钡)和Fe(铁)在很多样本中含量为0
  • K(钾)的最大值(6.21)与75%分位数(0.61)差距悬殊,可能存在异常值

2.2 特征工程与数据标准化

不同化学成分的测量单位和量纲差异很大,需要进行标准化处理:

from sklearn.preprocessing import StandardScaler # 移除ID列 data = glass_df.drop('Id', axis=1) # 分离特征和目标变量 X = data.drop('Type', axis=1) y = data['Type'] # 标准化特征 scaler = StandardScaler() X_scaled = scaler.fit_transform(X) X_scaled = pd.DataFrame(X_scaled, columns=X.columns) # 添加目标列 processed_df = X_scaled.copy() processed_df['Type'] = y.values print("\n标准化后的数据:") print(processed_df.head())

2.3 类别分布分析

玻璃类型分布极不均衡,这会影响后续建模:

import matplotlib.pyplot as plt # 类别分布可视化 type_counts = glass_df['Type'].value_counts().sort_index() plt.figure(figsize=(10,6)) bars = plt.bar(type_counts.index.astype(str), type_counts.values, color='skyblue') # 添加数值标签 for bar in bars: height = bar.get_height() plt.text(bar.get_x() + bar.get_width()/2., height, f'{int(height)}', ha='center', va='bottom') plt.title('玻璃类型分布', fontsize=15) plt.xlabel('玻璃类型', fontsize=12) plt.ylabel('样本数量', fontsize=12) plt.xticks(fontsize=11) plt.yticks(fontsize=11) plt.grid(axis='y', linestyle='--', alpha=0.7) plt.show()

类型分布特点:

  • 类型1(建筑窗户-浮法)和类型2(建筑窗户-非浮法)占主导
  • 类型3(车辆窗户-浮法)仅有17个样本
  • 类型7(头灯玻璃)仅有9个样本

3. 三维可视化解析:化学指纹的多角度观察

3.1 箱线图矩阵:元素分布的直观对比

箱线图是展示数据分布的强大工具,特别适合比较不同特征的统计特性:

plt.figure(figsize=(15,10)) processed_df.drop('Type', axis=1).plot(kind='box', vert=False, patch_artist=True) plt.title('标准化后的特征箱线图', fontsize=15) plt.xlabel('标准化值', fontsize=12) plt.grid(axis='x', linestyle='--', alpha=0.7) plt.show()

关键发现:

  • Mg(镁)和Ba(钡)的分布呈现明显的双峰特征
  • K(钾)存在多个离群点
  • 大多数元素的标准化值集中在[-2,2]区间内

3.2 平行坐标图:多维特征的关系网络

平行坐标图可以揭示高维数据中的模式和聚类:

from pandas.plotting import parallel_coordinates plt.figure(figsize=(15,10)) parallel_coordinates(processed_df, 'Type', colormap='viridis', alpha=0.5) plt.title('玻璃化学成分平行坐标图', fontsize=15) plt.xlabel('化学元素', fontsize=12) plt.ylabel('标准化值', fontsize=12) plt.xticks(rotation=45) plt.grid(linestyle='--', alpha=0.7) plt.legend(loc='upper right', bbox_to_anchor=(1.15, 1)) plt.show()

模式识别:

  • 类型1和类型2在某些元素上非常相似,但在Mg含量上有明显区别
  • 类型6(容器玻璃)在Ba含量上有独特特征
  • 类型7(头灯玻璃)在Fe含量上与其他类型区分明显

3.3 热力图:元素间的相关性网络

化学元素间的相互作用关系可以通过相关性热图直观展示:

import seaborn as sns plt.figure(figsize=(12,10)) corr_matrix = processed_df.drop('Type', axis=1).corr() sns.heatmap(corr_matrix, annot=True, cmap='coolwarm', center=0, linewidths=0.5) plt.title('化学成分相关性热图', fontsize=15) plt.xticks(rotation=45, fontsize=10) plt.yticks(fontsize=10) plt.show()

显著相关性:

  • RI(折射率)与Ca(钙)呈现强正相关(0.81)
  • Mg(镁)与Ba(钡)呈现负相关(-0.49)
  • Al(铝)与Ba(钡)呈现正相关(0.48)

4. 高级分析技巧:从可视化到业务洞察

4.1 主成分分析(PCA):降维观察

将9维数据降维到2维,观察样本分布:

from sklearn.decomposition import PCA pca = PCA(n_components=2) principal_components = pca.fit_transform(X_scaled) pca_df = pd.DataFrame(data=principal_components, columns=['PC1', 'PC2']) pca_df['Type'] = y.values plt.figure(figsize=(12,8)) sns.scatterplot(x='PC1', y='PC2', hue='Type', data=pca_df, palette='viridis', s=100, alpha=0.7) plt.title('玻璃数据PCA降维(方差解释率:%.2f)' % sum(pca.explained_variance_ratio_), fontsize=15) plt.xlabel(f'PC1 ({pca.explained_variance_ratio_[0]:.1%})', fontsize=12) plt.ylabel(f'PC2 ({pca.explained_variance_ratio_[1]:.1%})', fontsize=12) plt.grid(linestyle='--', alpha=0.5) plt.legend(title='玻璃类型') plt.show()

PCA发现:

  • 前两个主成分解释了约50%的方差
  • 类型6和类型7在二维平面上有较好的分离性
  • 类型1和类型2有较大重叠

4.2 t-SNE可视化:非线性结构探索

对于更复杂的非线性关系,t-SNE通常能提供更好的可视化效果:

from sklearn.manifold import TSNE tsne = TSNE(n_components=2, perplexity=30, random_state=42) tsne_results = tsne.fit_transform(X_scaled) tsne_df = pd.DataFrame(data=tsne_results, columns=['TSNE1', 'TSNE2']) tsne_df['Type'] = y.values plt.figure(figsize=(12,8)) sns.scatterplot(x='TSNE1', y='TSNE2', hue='Type', data=tsne_df, palette='viridis', s=100, alpha=0.7) plt.title('玻璃数据t-SNE可视化', fontsize=15) plt.xlabel('TSNE1', fontsize=12) plt.ylabel('TSNE2', fontsize=12) plt.grid(linestyle='--', alpha=0.5) plt.legend(title='玻璃类型') plt.show()

t-SNE观察:

  • 类型6(容器玻璃)形成了明显的独立簇
  • 类型7(头灯玻璃)也有较好的聚集性
  • 建筑窗户玻璃(类型1和2)仍然存在较多重叠

4.3 特征重要性分析

使用随机森林评估各化学成分对分类的重要性:

from sklearn.ensemble import RandomForestClassifier rf = RandomForestClassifier(n_estimators=100, random_state=42) rf.fit(X_scaled, y) importance = pd.DataFrame({ 'Feature': X.columns, 'Importance': rf.feature_importances_ }).sort_values('Importance', ascending=False) plt.figure(figsize=(10,6)) sns.barplot(x='Importance', y='Feature', data=importance, palette='viridis') plt.title('化学成分分类重要性', fontsize=15) plt.xlabel('重要性得分', fontsize=12) plt.ylabel('化学元素', fontsize=12) plt.grid(axis='x', linestyle='--', alpha=0.7) plt.show()

关键发现:

  • Mg(镁)是最具区分力的特征
  • RI(折射率)和Al(铝)次之
  • K(钾)和Fe(铁)的区分能力较弱

5. 实战建议与经验分享

在实际项目中处理类似数据集时,有几个关键点值得特别注意:

数据标准化策略选择

  • 当特征间量纲差异大时,标准化是必须的
  • 对于含有大量零值的稀疏特征(如Ba、Fe),RobustScaler可能比StandardScaler更合适
  • 考虑在标准化前去除或填补异常值

处理类别不平衡的技巧

  • 过采样少数类或欠采样多数类
  • 使用类别权重调整模型
  • 尝试分层抽样确保每类都有代表
  • 评估指标选择F1分数或AUC-ROC而非准确率

可视化优化经验

  • 平行坐标图中类别过多会导致视觉混乱,可先聚焦主要类别
  • 热力图的颜色映射应突出关键相关性区间
  • 交互式可视化(如Plotly)有助于探索高维数据
  • 保存可视化配置便于后续分析复用
# 示例:使用Plotly创建交互式平行坐标图 import plotly.express as px fig = px.parallel_coordinates(processed_df, color='Type', dimensions=list(X.columns), color_continuous_scale=px.colors.diverging.Tealrose, labels={'Type': '玻璃类型'}, title='玻璃化学成分交互式平行坐标图') fig.show()

建模方向建议

  • 先尝试树模型(随机森林、XGBoost)处理非线性关系
  • 对于重叠严重的类别(如类型1和2),可考虑聚类分析
  • 神经网络可能在小数据集上表现不稳定
  • 集成多种模型的结果可能提高鲁棒性
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/5 12:10:23

AI视频创作工具Seedance 2.0核心功能与实战指南

1. Seedance 2.0 项目概述Seedance 2.0 是字节跳动Seed团队推出的新一代AI视频创作工具,它彻底改变了传统视频制作流程。作为一名从事影视制作超过10年的从业者,我亲身体验了这个工具后可以明确地说:这确实让视频创作的门槛降低到了前所未有的…

作者头像 李华
网站建设 2026/7/5 12:09:55

Isolation Forest 异常检测实战:sklearn 0.24.2 参数调优与 3 类数据场景对比

Isolation Forest 参数调优实战:从基础配置到多场景优化异常检测作为数据科学中的关键任务,直接影响着模型效果和业务决策。在众多算法中,Isolation Forest因其线性时间复杂度和无需标注数据的特性,成为工业界处理大规模数据的首选…

作者头像 李华
网站建设 2026/7/5 12:05:24

高效笔记管理方案:Zotero-Better-Notes双向同步完整指南

高效笔记管理方案:Zotero-Better-Notes双向同步完整指南 【免费下载链接】zotero-better-notes Everything about note management. All in Zotero. 项目地址: https://gitcode.com/gh_mirrors/zo/zotero-better-notes Zotero-Better-Notes是一款强大的Zoter…

作者头像 李华
网站建设 2026/7/5 12:04:56

PUBG后坐力控制算法深度解析:Lua脚本实现与模块化架构设计

PUBG后坐力控制算法深度解析:Lua脚本实现与模块化架构设计 【免费下载链接】logitech-pubg PUBG no recoil script for Logitech gaming mouse / 绝地求生 罗技 鼠标宏 项目地址: https://gitcode.com/gh_mirrors/lo/logitech-pubg 在FPS竞技游戏《绝地求生》…

作者头像 李华
网站建设 2026/7/5 12:04:24

神经网络回归任务实战:从数据准备到模型部署

1. 神经网络训练流程全景解析作为一名长期奋战在深度学习一线的算法工程师,我完整经历了从TensorFlow 1.x到PyTorch 2.0的技术迭代。今天想和大家分享一个完整的神经网络训练流程,特别是针对回归任务的实战经验。不同于教科书式的理论讲解,这…

作者头像 李华
网站建设 2026/7/5 12:02:08

Spark MLlib ALS 实战:隐式反馈数据下的矩阵分解推荐系统构建

Spark MLlib ALS 实战:隐式反馈数据下的矩阵分解推荐系统构建在当今数据爆炸的时代,推荐系统已成为电商、内容平台和社交网络的核心组件。面对海量用户行为数据,如何高效挖掘用户潜在偏好成为关键挑战。本文将深入探讨基于Spark MLlib的ALS&a…

作者头像 李华