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

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

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

      • 一、实验手册
        • (一)实验目的
        • (二)实验原理
        • (三)实验环境
        • (四)实验步骤
        • (五)实验报告要求
      • 二、案例代码(以鸢尾花数据集为例)

一、实验手册

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

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

  • pandas:用于数据的读取、处理和分析。
  • numpy:提供数值计算功能。
  • scikit-learn:包含丰富的数据预处理和机器学习工具。
(四)实验步骤
  1. 数据加载:使用pandas库读取数据集,例如读取CSV文件:
import pandas as pd
data = pd.read_csv('your_data.csv')
  1. 数据探索
    • 查看数据的基本信息,如形状、列名、数据类型等:
print(data.shape)
print(data.columns)
print(data.dtypes)
- 查看数据的前几行和后几行:
print(data.head())
print(data.tail())
- 统计数据的描述性信息:
print(data.describe())
  1. 数据清理
    • 缺失值处理
      • 查看缺失值的分布情况:
print(data.isnull().sum())
  - 使用均值填充数值型变量的缺失值:
data['numeric_column'] = data['numeric_column'].fillna(data['numeric_column'].mean())
  - 使用众数填充分类型变量的缺失值:
data['categorical_column'] = data['categorical_column'].fillna(data['categorical_column'].mode()[0])
- **噪声数据处理**:
  - 采用分箱法进行数据平滑,例如等宽分箱:
import numpy as np
data['column_to_smooth'] = pd.cut(data['column_to_smooth'], bins=5)
  - 使用`scikit-learn`的`IsolationForest`检测并删除离群点:
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文件集成数据)
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]区间:
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
data[['column_to_normalize']] = scaler.fit_transform(data[['column_to_normalize']])
- **离散化**:将数值型变量转换为分类型变量,例如根据数值范围进行划分:
data['age_group'] = pd.cut(data['age'], bins=[0, 18, 30, 50, 100], labels=['Child', 'Young Adult', 'Middle - Aged', 'Senior'])
  1. 数据归约
    • 属性子集选择:选择部分重要的属性:
selected_data = data[['important_column1', 'important_column2']]
- **主成分分析(PCA)降维**:
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. 总结数据挖掘预处理对后续数据挖掘任务的影响。

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

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())

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

相关文章:

  • 网络空间安全(41)权限维持
  • 蓝桥与力扣刷题(蓝桥 立方变自身)
  • DeepBI:重构流量逻辑,助力亚马逊广告实现高效流量增长
  • UML中的类图、时序图等常见图形的作用和基本元素
  • nginx 反向代理 ubuntu
  • c#难点2
  • 【芯片设计- RTL 数字逻辑设计入门 9.3 -- SoC 设计中的 Macro】
  • 经典笔试题 小于 n 的最大整数 贪心 回溯
  • vulnhub-Tr0ll ssh爆破、wireshark流量分析,exp、寻找flag。思维导图带你清晰拿到所以flag
  • 2025年上半年NPDP报名已开启,附报名流程!
  • 家庭 企业数据仓库:如何配置和管理 NAS 系统
  • @AuthenticationPrincipal user null
  • 当全球化成为商业常态,Shopify 如何为品牌生意铺平出海之路?
  • Windows10安装cuda10.2以及cudnn v7.6.5教程
  • Flink CDC 与 SeaTunnel CDC 简单对比
  • Blender配置渲染设置并输出动画
  • 【Linux 维测专栏 5 -- linux pstore 使用介绍】
  • 【AI论文】DeepMesh:基于强化学习的自回归艺术家网格创建
  • 3月21号
  • HeyGem.ai 全离线数字人生成引擎加入 GitCode:开启本地化 AIGC 创作新时代
  • 白天气温超30℃的北京,晚间下起了冰雹
  • 梅花奖在上海丨陈丽俐“婺剧折戏专场”:文戏武做,武戏文唱
  • 深圳中院回应“退休夫妻月入1.2万负债1.2亿”:其自述因经营不善负债
  • 三亚通报救护车省外拉警报器开道旅游:违规违法,责令公司停业整顿
  • 牧原股份子公司与养殖户种猪买卖纠纷案一审胜诉
  • 习近平将出席中国—拉美和加勒比国家共同体论坛第四届部长级会议开幕式并发表重要讲话