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