「日拱一码」020 机器学习——数据处理

目录

数据清洗

缺失值处理

删除缺失值:

填充缺失值:

重复值处理

检测重复值

处理重复值

异常值处理

Z-score方法

IQR方法(四分位距)

数据一致性检查

数据转换

规范化(归一化)

Min-Max归一化

MaxAbsScaler

标准化

离散化

等宽离散化

等频离散化


数据清洗

数据清洗是数据处理的第一步,目的是去除噪声数据、处理缺失值和异常值,使数据更加干净、可用

缺失值处理

删除缺失值:

如果数据集中缺失值较少,可以直接删除包含缺失值的行或列

python 复制代码
## 数据清洗
# 缺失值处理
# 删除缺失值
import pandas as pd

# 创建一个包含缺失值的DataFrame
data = {'A': [1, 2, None, 4], 'B': [5, None, 7, 8]}
df = pd.DataFrame(data)

# 删除包含缺失值的行
df_dropped = df.dropna(axis=0)
print("删除缺失值后的数据:")
print(df_dropped)
#      A    B
# 0  1.0  5.0
# 3  4.0  8.0
填充缺失值:

如果删除缺失值会导致数据量损失过多,可以选择填充缺失值。常见的填充方法包括使用均值、中位数、众数或前向/后向填充

python 复制代码
# 填充缺失值
# 使用均值填充缺失值
df_mean = df.fillna(df.mean())
print("使用均值填充后的数据:")
print(df_mean)
#           A         B
# 0  1.000000  5.000000
# 1  2.000000  6.666667
# 2  2.333333  7.000000
# 3  4.000000  8.000000

df_mode = df.fillna(df.mode())
print("使用众数填充后的数据:")
print(df_mode)
#      A    B
# 0  1.0  5.0
# 1  2.0  7.0
# 2  4.0  7.0
# 3  4.0  8.0

# 使用前向填充
df_ffilled = df.fillna(method='ffill')
print("使用前向填充后的数据:")
print(df_ffilled)
#      A    B
# 0  1.0  5.0
# 1  2.0  5.0
# 2  2.0  7.0
# 3  4.0  8.0

重复值处理

在数据处理中,重复值可能会对模型训练和分析结果产生误导性的影响,因此需要进行检测和处理

检测重复值

在处理重复值之前,首先需要检测数据中是否存在重复的行或列

python 复制代码
# 重复值处理
# 检测重复值
import pandas as pd

# 创建一个包含重复行的 DataFrame
data = {'A': [1, 2, 3, 2, 1], 'B': [4, 5, 6, 5, 4]}
df = pd.DataFrame(data)

# 检测重复行
duplicates = df.duplicated()
print("重复行:")
print(duplicates)
# 0    False
# 1    False
# 2    False
# 3     True
# 4     True
# dtype: bool

# 显示重复的行
print("重复的行数据:")
print(df[duplicates])
#    A  B
# 3  2  5
# 4  1  4

# 检测重复列
duplicates_columns = df.T.duplicated()
print("重复列:")
print(duplicates_columns)
# A    False
# B    False
# dtype: bool

# 显示重复的列
print("重复的列数据:")
print(df.loc[:, duplicates_columns])
# Empty DataFrame
# Columns: []
# Index: [0, 1, 2, 3, 4]
处理重复值

处理重复值的方法通常包括删除重复值或保留一条重复记录

python 复制代码
# 处理重复值
# 删除重复行
df_cleaned = df.drop_duplicates()
print("删除重复行后的数据:")
print(df_cleaned)
#    A  B
# 0  1  4
# 1  2  5
# 2  3  6

# 删除重复列
df_cleaned_columns = df.loc[:, ~duplicates_columns]
print("删除重复列后的数据:")
print(df_cleaned_columns)
#    A  B
# 0  1  4
# 1  2  5
# 2  3  6
# 3  2  5
# 4  1  4

# 保留第一条重复记录
df_keep_first = df.drop_duplicates(keep='first')
print("保留第一条重复记录后的数据:")
print(df_keep_first)
#    A  B
# 0  1  4
# 1  2  5
# 2  3  6

# 保留最后一条重复记录
df_keep_last = df.drop_duplicates(keep='last')
print("保留最后一条重复记录后的数据:")
print(df_keep_last)
#    A  B
# 2  3  6
# 3  2  5
# 4  1  4

异常值处理

异常值是指数据中明显偏离正常范围的值,需要进行检测和处理

Z-score方法

通过标准化方法检测异常值

python 复制代码
# 异常值处理
# Z-score
from scipy import stats
import numpy as np

data = [1, 2, 3, 4, 100]
z_scores = stats.zscore(data)
print("Z-scores:", z_scores)
# [-0.53828462 -0.51265202 -0.48701942 -0.46138681  1.99934286]

# 检测异常值(Z-score大于1或小于-1)
threshold = 1
outliers = np.where(np.abs(z_scores) > threshold)
print("异常值索引:", outliers)
# (array([4], dtype=int64),)
IQR方法(四分位距)

通过四分位数检测异常值

python 复制代码
# IQR方法(四分位距)
Q1 = np.percentile(data, 25)
Q3 = np.percentile(data, 75)
IQR = Q3 - Q1

lower_bound = Q1 - 1.5 * IQR
upper_bound = Q3 + 1.5 * IQR

print("下界:", lower_bound) # -1.0
print("上界:", upper_bound) # 7.0

outliers = [x for x in data if x < lower_bound or x > upper_bound]
print("异常值:", outliers) # [100]

数据一致性检查

确保数据在逻辑上是合理的,例如日期格式、数值范围等

python 复制代码
# 数据一致性检查
# 检查日期格式
import pandas as pd

data = {'date': ['2025-01-01', '2025-02-30', '2025-03-15']}
df = pd.DataFrame(data)

# 尝试将日期列转换为日期格式,错误的日期会报错
df['date'] = pd.to_datetime(df['date'], errors='coerce')
print("转换后的数据:")
print(df)
#         date
# 0 2025-01-01
# 1        NaT
# 2 2025-03-15

数据转换

数据转换是将数据转换为适合模型处理的格式,常见的方法包括规范化、标准化、离散化等

规范化(归一化)

将数据缩放到指定范围,如0, 1或-1, 1

Min-Max归一化

将数据缩放到0, 1区间

python 复制代码
## 数据转换
# 规范化(归一化)
# Min-Max归一化
from sklearn.preprocessing import MinMaxScaler

data = [[1], [2], [3], [4]]
scaler = MinMaxScaler()
normalized_data = scaler.fit_transform(data)
print("归一化后的数据:")
print(normalized_data)
# [[0.        ]
#  [0.33333333]
#  [0.66666667]
#  [1.        ]]
MaxAbsScaler

将数据缩放到-1, 1区间

python 复制代码
# MaxAbsScaler
from sklearn.preprocessing import MaxAbsScaler

scaler = MaxAbsScaler()
normalized_data = scaler.fit_transform(data)
print("MaxAbsScaler归一化后的数据:")
print(normalized_data)
# [[0.25]
#  [0.5 ]
#  [0.75]
#  [1.  ]]

标准化

将数据转换为均值为0、标准差为1的分布

python 复制代码
# 标准化
from sklearn.preprocessing import StandardScaler

data = [[1], [2], [3], [4]]
scaler = StandardScaler()
standardized_data = scaler.fit_transform(data)
print("标准化后的数据:")
print(standardized_data)
# [[-1.34164079]
#  [-0.4472136 ]
#  [ 0.4472136 ]
#  [ 1.34164079]]

离散化

将连续数据划分为离散区间

等宽离散化

将数据划分为等宽的区间

python 复制代码
# 离散化
# 等宽离散化
import pandas as pd

data = {'score': [85, 90, 78, 92, 88, 76, 95, 89, 77, 82]}
df = pd.DataFrame(data)
df['score_discret'] = pd.cut(df['score'], bins=3, labels=False)
print("等宽离散化后的数据:")
print(df)
#    score  score_discret
# 0     85              1
# 1     90              2
# 2     78              0
# 3     92              2
# 4     88              1
# 5     76              0
# 6     95              2
# 7     89              2
# 8     77              0
# 9     82              0
等频离散化

将数据划分为等数量的区间

python 复制代码
# 等频离散化
df['score_discret'] = pd.qcut(df['score'], q=3, labels=False)
print("等频离散化后的数据:")
print(df)
#    score  score_discret
# 0     85              1
# 1     90              2
# 2     78              0
# 3     92              2
# 4     88              1
# 5     76              0
# 6     95              2
# 7     89              1
# 8     77              0
# 9     82              0
相关推荐
木枷9 分钟前
NAS-Bench-101: Towards Reproducible Neural Architecture Search
人工智能·物联网
算法_小学生34 分钟前
支持向量机(SVM)完整解析:原理 + 推导 + 核方法 + 实战
算法·机器学习·支持向量机
BAOYUCompany36 分钟前
暴雨服务器更懂人工智能+
运维·服务器·人工智能
飞哥数智坊36 分钟前
Coze实战第17讲:工资条自动拆分+一对一邮件发送
人工智能·coze
cwn_39 分钟前
自然语言处理NLP (1)
人工智能·深度学习·机器学习·自然语言处理
点云SLAM1 小时前
PyTorch中flatten()函数详解以及与view()和 reshape()的对比和实战代码示例
人工智能·pytorch·python·计算机视觉·3d深度学习·张量flatten操作·张量数据结构
智海观潮1 小时前
Unity Catalog与Apache Iceberg如何重塑Data+AI时代的企业数据架构
大数据·人工智能·ai·iceberg·catalog
爱分享的飘哥1 小时前
第三篇:VAE架构详解与PyTorch实现:从零构建AI的“视觉压缩引擎”
人工智能·pytorch·python·aigc·教程·生成模型·代码实战
算法_小学生1 小时前
逻辑回归(Logistic Regression)详解:从原理到实战一站式掌握
算法·机器学习·逻辑回归
柏峰电子2 小时前
市政道路积水监测系统:守护城市雨天出行安全的 “智慧防线”
大数据·人工智能·安全