「日拱一码」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
相关推荐
九年义务漏网鲨鱼2 小时前
【大模型学习 | MINIGPT-4原理】
人工智能·深度学习·学习·语言模型·多模态
元宇宙时间2 小时前
Playfun即将开启大型Web3线上活动,打造沉浸式GameFi体验生态
人工智能·去中心化·区块链
开发者工具分享2 小时前
文本音频违规识别工具排行榜(12选)
人工智能·音视频
产品经理独孤虾2 小时前
人工智能大模型如何助力电商产品经理打造高效的商品工业属性画像
人工智能·机器学习·ai·大模型·产品经理·商品画像·商品工业属性
老任与码2 小时前
Spring AI Alibaba(1)——基本使用
java·人工智能·后端·springaialibaba
蹦蹦跳跳真可爱5893 小时前
Python----OpenCV(图像増强——高通滤波(索贝尔算子、沙尔算子、拉普拉斯算子),图像浮雕与特效处理)
人工智能·python·opencv·计算机视觉
nananaij3 小时前
【Python进阶篇 面向对象程序设计(3) 继承】
开发语言·python·神经网络·pycharm
雷羿 LexChien3 小时前
从 Prompt 管理到人格稳定:探索 Cursor AI 编辑器如何赋能 Prompt 工程与人格风格设计(上)
人工智能·python·llm·编辑器·prompt
两棵雪松3 小时前
如何通过向量化技术比较两段文本是否相似?
人工智能
heart000_13 小时前
128K 长文本处理实战:腾讯混元 + 云函数 SCF 构建 PDF 摘要生成器
人工智能·自然语言处理·pdf