【数据挖掘】数据预处理——以鸢尾花数据集为例

数据预处理------以鸢尾花数据集为例

一、实验手册

(一)实验目的
  1. 熟悉数据挖掘预处理的各种方法,包括数据清理、集成、变换和归约等。
  2. 能够识别数据中存在的噪声、缺失值、不一致性等问题,并运用合适的算法和技术进行处理。
  3. 掌握至少一种编程语言(如Python)及其相关库来实现数据挖掘预处理操作。
  4. 提高数据质量,为后续的数据挖掘任务奠定良好基础。
(二)实验原理
  1. 数据清理:通过填充缺失值(如使用均值、中位数、最可能的值等)、平滑噪声数据(如分箱、回归、离群点分析)、识别和删除离群点以及解决数据不一致性来改善数据质量。
  2. 数据集成:将多个数据源的数据合并成一个一致的数据存储,需处理实体识别、冗余和相关分析、元组重复以及数据值冲突等问题。
  3. 数据变换:对数据进行平滑、聚集、规范化、离散化等操作,将数据转换为适合挖掘的形式。
  4. 数据归约:采用维归约(如属性子集选择、主成分分析)、数量归约(如参数模型、非参数模型)和数据压缩等策略,得到数据集的压缩表示,同时保持分析结果的准确性。
(三)实验环境

建议使用Python语言,并安装以下常用库:

  • pandas:用于数据的读取、处理和分析。
  • numpy:提供数值计算功能。
  • scikit-learn:包含丰富的数据预处理和机器学习工具。
(四)实验步骤
  1. 数据加载 :使用pandas库读取数据集,例如读取CSV文件:
python 复制代码
import pandas as pd
data = pd.read_csv('your_data.csv')
  1. 数据探索
    • 查看数据的基本信息,如形状、列名、数据类型等:
python 复制代码
print(data.shape)
print(data.columns)
print(data.dtypes)
复制代码
- 查看数据的前几行和后几行:
python 复制代码
print(data.head())
print(data.tail())
复制代码
- 统计数据的描述性信息:
python 复制代码
print(data.describe())
  1. 数据清理
    • 缺失值处理
      • 查看缺失值的分布情况:
python 复制代码
print(data.isnull().sum())
复制代码
  - 使用均值填充数值型变量的缺失值:
python 复制代码
data['numeric_column'] = data['numeric_column'].fillna(data['numeric_column'].mean())
复制代码
  - 使用众数填充分类型变量的缺失值:
python 复制代码
data['categorical_column'] = data['categorical_column'].fillna(data['categorical_column'].mode()[0])
复制代码
- **噪声数据处理**:
  - 采用分箱法进行数据平滑,例如等宽分箱:
python 复制代码
import numpy as np
data['column_to_smooth'] = pd.cut(data['column_to_smooth'], bins=5)
复制代码
  - 使用`scikit-learn`的`IsolationForest`检测并删除离群点:
python 复制代码
from sklearn.ensemble import IsolationForest
clf = IsolationForest(contamination=0.1)
outliers = clf.fit_predict(data[['column_to_check_outliers']])
data = data[outliers == 1]
  1. 数据集成(假设从多个CSV文件集成数据)
python 复制代码
data1 = pd.read_csv('data1.csv')
data2 = pd.read_csv('data2.csv')
combined_data = pd.concat([data1, data2], axis=0)  # 按行合并
  1. 数据变换
    • 规范化 :使用scikit-learnMinMaxScaler将数据缩放到0, 1区间:
python 复制代码
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
data[['column_to_normalize']] = scaler.fit_transform(data[['column_to_normalize']])
复制代码
- **离散化**:将数值型变量转换为分类型变量,例如根据数值范围进行划分:
python 复制代码
data['age_group'] = pd.cut(data['age'], bins=[0, 18, 30, 50, 100], labels=['Child', 'Young Adult', 'Middle - Aged', 'Senior'])
  1. 数据归约
    • 属性子集选择:选择部分重要的属性:
python 复制代码
selected_data = data[['important_column1', 'important_column2']]
复制代码
- **主成分分析(PCA)降维**:
python 复制代码
from sklearn.decomposition import PCA
pca = PCA(n_components=0.95)  # 保留95%的方差
reduced_data = pca.fit_transform(data.drop('target_column', axis=1))
(五)实验报告要求
  1. 实验目的和原理的阐述。
  2. 详细描述实验步骤,包括使用的方法和代码。
  3. 展示数据预处理前后的对比结果,如数据的统计信息、缺失值数量变化等。
  4. 分析预处理过程中遇到的问题及解决方法。
  5. 总结数据挖掘预处理对后续数据挖掘任务的影响。

二、案例代码(以鸢尾花数据集为例)

python 复制代码
import pandas as pd
import numpy as np
from sklearn.preprocessing import MinMaxScaler, StandardScaler
from sklearn.impute import SimpleImputer
from sklearn.decomposition import PCA
from sklearn.ensemble import IsolationForest

# 1. 数据加载
data = pd.read_csv('https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data',
                   header=None, names=['sepal_length', 'sepal_width', 'petal_length', 'petal_width', 'class'])

# 2. 数据探索
print("数据形状:", data.shape)
print("列名:", data.columns)
print("数据类型:", data.dtypes)
print("前5行数据:\n", data.head())
print("描述性统计信息:\n", data.describe())

# 3. 数据清理
# 3.1 缺失值处理(假设无缺失值,这里仅为示例)
# 如果有缺失值,例如对sepal_length列进行均值填充
imputer = SimpleImputer(strategy='mean')
data['sepal_length'] = imputer.fit_transform(data[['sepal_length']])

# 3.2 噪声数据处理
# 使用IsolationForest检测离群点
clf = IsolationForest(contamination=0.05)
outliers = clf.fit_predict(data[['sepal_length', 'sepal_width', 'petal_length', 'petal_width']])
data = data[outliers == 1]

# 4. 数据变换
# 4.1 规范化
scaler = MinMaxScaler()
data[['sepal_length', 'sepal_width', 'petal_length', 'petal_width']] = scaler.fit_transform(
    data[['sepal_length', 'sepal_width', 'petal_length', 'petal_width']])

# 4.2 离散化(这里对petal_length进行离散化示例)
data['petal_length_group'] = pd.cut(data['petal_length'], bins=3, labels=['short','medium', 'long'])

# 5. 数据归约
# 主成分分析降维
pca = PCA(n_components=2)
reduced_features = pca.fit_transform(data[['sepal_length', 'sepal_width', 'petal_length', 'petal_width']])
reduced_data = pd.DataFrame(reduced_features, columns=['PC1', 'PC2'])
reduced_data['class'] = data['class']

print("预处理后的数据:\n", reduced_data.head())

这个案例代码展示了对鸢尾花数据集进行数据挖掘预处理的常见操作,包括数据加载、探索、清理、变换和归约等步骤 。

相关推荐
有Li21 分钟前
通过渐进式域变换实现组织分类的无监督单域泛化文献速递/基于多模态的医学影像分割与理解
人工智能·学习·分类·数据挖掘·文献·医学生
YangYang9YangYan2 小时前
2026信息管理与信息系统毕业学数据分析的价值
数据挖掘·数据分析
王莎莎-MinerU3 小时前
解析回归集:RAG 和 Agent 上线前,先把表格、公式、版面测清楚
人工智能·算法·数据挖掘·回归·pdf·ocr
科技大视界18 小时前
投资AI项目,传统尽调不够用了——李章虎律师拆解算法、数据、算力三大雷区
人工智能·算法·数据挖掘
STLearner2 天前
ICML 2026 | LLM×Graph论文总结[1]【图基础模型,文本属性图,多模态属性图,图对齐,图提示学习,关系深度学习
论文阅读·人工智能·python·深度学习·学习·机器学习·数据挖掘
m0_547486662 天前
《面向对象分析设计与建模》全套PPT课件
人工智能·数据挖掘·uml
qq_355357022 天前
SKC智能知识管理系统-设计分享 之 知识聚类图谱
机器学习·数据挖掘·聚类
ClickHouseDB2 天前
简化 Langfuse 的规模化应用
人工智能·数据挖掘
babe小鑫2 天前
2026机械专业想进智能制造学数据分析的价值分析
数据挖掘·数据分析·制造
YangYang9YangYan3 天前
2026年二本电子工程与信息技术专业就业数据分析实用指南
数据挖掘·数据分析