数据预处理学习

文章介绍了数据预处理的关键步骤,包括使用前向填充填充缺失值,通过四分位数识别和处理异常值,以及数据的转换方法如映射、replace函数和LabelEncoder进行类别编码。此外,还提到了独热编码和两种标准化方法——Z-score和最小-最大规范化,以及数据集的划分策略。
摘要由CSDN通过智能技术生成

1.查找缺失值

null_values = df.isnull().sum()
df.fillna(method='ffill', inplace=True)#采用前向填充的方式将缺失值填充

2.异常值处理

查找异常值
q1 = data.quantile(q=0.25)
q3 = data.quantile(q=0.75)
iqr = q3 - q1
threshold = 1.5
outliers = data[(data < (q1 - threshold * iqr)) | (data > (q3 + threshold * iqr))]

计算数据集的上下四分位数,可以使用 pandas 库中的 quantile() 方法。该方法可以计算指定数据集的分位数,包括中位数、四分位数等。

q1 = data.quantile(q=0.25) 计算了数据集的下四分位数。
q3 = data.quantile(q=0.75) 计算了数据集的上四分位数。
iqr = q3 - q1 计算了四分位距(IQR),即箱线图中的箱子高度。
threshold = 1.5 指定了离群值判定标准,通常取1.5。
outliers = data[(data < (q1 - threshold * iqr)) | (data > (q3 + threshold * iqr))] 找出了数据集中的所有离群值

3.数据转换

 1.map 映射 可用于数据量化处理。

原始数据

sex

female

male

male

male

female

 
f1 = tips.copy()

dict1 = {'Male':0,'Female':1}       # 设置字典参数
df1.sex = df1.sex.map(dict1)        #使用 map() 函数和 dict1 字典来映射 df1 中 'sex' 列中的值
dict2 = {'No':0,'Yes':1}
df1.smoker = df1.smoker.map(dict2)
dict3 = {'Sun':6, 'Sat':5, 'Thur':3, 'Fri':4}
df1.day = df1.day.map(dict3)
dict4 = {'Dinner':0, 'Lunch':1}
df1.time = df1.time.map(dict4)

df1.head()

处理后的数据

sex

1

0

0

0

1

 

2.replace函数

f2 = tips.copy()  

df2.sex = df2.sex.replace(df2.sex.unique(),[0,1])
df2.smoker = df2.smoker.replace(df2.smoker.unique(),[0,1])
df2.day = df2.day.replace(df2.day.unique(),[6,5,3,4])
df2.time = df2.time.replace(df2.time.unique(),[0,1])

df2.head()

unique()函数只统计数据中出现的数据,不统计次数。

所以实际上df2.sex.unique()=[male,female]

3.机器学习 labelEncoder

LabelEncoder 可以将类别型数据映射到整数型数据,映射规则是将类别按照字典序排序后,依次映射到整数 0, 1, 2, ...,以此类推。例如,如果有三个类别 A、B、C,按照字典序排序后,映射规则为 A->0, B->1, C->2。

from sklearn.preprocessing import LabelEncoder
import pandas as pd

# 读取数据集
df = pd.read_csv('data.csv')

# 创建 LabelEncoder 对象
le = LabelEncoder()

# 拟合数据
le.fit(df['column_name'])

# 转换数据
df['column_name'] = le.transform(df['column_name'])

其中,column_name 表示需要转换的列名。fit() 方法用于拟合数据,transform() 方法用于转换数据。经过 LabelEncoder 处理后,类别型数据将被转换为整数型数据,可以用于后续的分析和建模。

4.get_dummies()函数 独热编码,二进制输出

它可以将类别型数据转换为数值型数据,以便进行后续的分析和建模。独热编码将每个类别映射到一个二进制向量,向量的长度是所有类别的数量,向量中的元素为 0 或 1,表示该类别是否出现。

import pandas as pd

# 创建数据集
df = pd.DataFrame({'color': ['red', 'green', 'blue', 'red', 'green']})

# 进行独热编码
one_hot = pd.get_dummies(df['color'])

# 输出结果
print(one_hot)

   blue  green  red
0     0      0    1
1     0      1    0
2     1      0    0
3     0      0    1
4     0      1    0
 

标准化处理

标准化数据是将数据进行统一的处理,使得不同变量具有可比性。这样做的好处有三个:

一是可以在不同的变量之间进行比较和分析;

二是可以计算数据点之间的距离或相似度;

三是可以提高机器学习模型的表现和预测能力。

1.Z-score方法

Z-score标准化处理的公式为:(x - mean) / std,其中x是原始数据,mean是均值,std是标准差。如果x的值小于mean,那么(x - mean)的结果就是负数,从而导致整个式子的值也为负数。

如果原始数据的分布不是正态分布或者有很多离群点存在,那么转换后的数据可能会出现负值。所以这种标准化的方式适用于正态分布的数据

from sklearn.datasets import load_iris      #sklearn自带的鸢尾花数据
import pandas as pd
import numpy as np

def z_score(data):#用函数定义一个z_score方法
    mean = np.mean(data, axis=0) #平均值
    std = np.std(data, axis=0) #标准差
    z = (data - mean) / std
    return z


# 加载数据集
iris = load_iris()
# print(iris)


# 将数据转换为pandas DataFrame
df = pd.DataFrame(data=iris.data, columns=iris.feature_names)

# 打印前5行数据
print(df.head())

# 对数据进行Z-score标准化
z_data = z_score(df.values)

# 将标准化后的数据转换为DataFrame并打印前5行
z_df = pd.DataFrame(data=z_data, columns=df.columns)
print(z_df.head())
  sepal length (cm)  sepal width (cm)  petal length (cm)  petal width (cm)
0                5.1               3.5                1.4               0.2
1                4.9               3.0                1.4               0.2
2                4.7               3.2                1.3               0.2
3                4.6               3.1                1.5               0.2
4                5.0               3.6                1.4               0.2
   sepal length (cm)  sepal width (cm)  petal length (cm)  petal width (cm)
0          -0.900681          1.019004          -1.340227         -1.315444
1          -1.143017         -0.131979          -1.340227         -1.315444
2          -1.385353          0.328414          -1.397064         -1.315444
3          -1.506521          0.098217          -1.283389         -1.315444
4          -1.021849          1.249201          -1.340227         -1.315444

2.

Min-Max标准化的公式:z = (x - min) / (max - min),其中,z的取值范围在[0, 1]之间。

最小-最大规范化还可以消除异常值和缺失值对数据分布的影响,提高模型的稳定性和精度。

适用于大部分数据

from sklearn.datasets import load_iris
import pandas as pd

# 加载数据集
iris = load_iris()
df = pd.DataFrame(data=iris.data, columns=iris.feature_names)

# 对数据进行最小-最大规范化
for feature in df.columns:
    max_val = df[feature].max()  # 获取该列数据的最大值
    min_val = df[feature].min()  # 获取该列数据的最小值
    df[feature] = (df[feature] - min_val) / (max_val - min_val)  # 对该列数据进行最小-最大规范化处理

# 打印标准化后的前5行数据
print(df.head())

数据集的划分

数据集的划分是将原始数据集按照一定比例分成训练集、验证集和测试集三个部分。常用的划分比例为6:2:2或7:2:1。有两种常用的数据集划分方法:简单随机划分和分层抽样划分。简单随机划分是从原始数据集中随机选择一定比例的样本作为训练集、验证集和测试集,适用于数据量较大的情况。分层抽样划分是根据原始数据集的分布特征,将样本按照某种规则划分成训练集、验证集和测试集,可以避免数据集不均衡的问题,但需要对数据集的分布有一定了解。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值