要是作深度学习的话,可以直接用tensoflow框架的预处理层,我试过,比PyTorch自己写出来的会好一点,主要是简单好用。处理CSV文件
它类别的处理逻辑是onehot,比较标准稀疏,数值的话就是归一化了。
有时候不需要这么麻烦,就数字就完事儿了。
def hk_list(a, b):
return [i for i in range(a, b)]
# df_1 就是一个原始数据,要分出来它的数值列和类别列
ca_list = df_1.columns[hk_list(2,10)+[114, 116, 138, 143,144]+ hk_list(120,129)+ hk_list(172, 175)].to_list()
num_list = df_1.columns[hk_list(11, 114)+[115] + hk_list(117, 120) + hk_list(129, 138) + hk_list(139,143)+ hk_list(145,172)].to_list()
df_2 = pd.DataFrame()
df_2[['id']] = df_1[['id']]
df_2[ca_list] = df_1[ca_list].apply(lambda x: x.astype('category').cat.codes)
通过这样的操作,数据就出来了,而且还能把空值也给处理了。
df_2[num_list] = df_1[num_list].apply(pd.to_numeric, errors='ignore')
df_2[num_list].fillna(0, inplace=True)
归一化的可以自己根据需要自己写了,有最大最小归一化,也有正态分布那种的。
from sklearn.preprocessing import MinMaxScaler, StandardScaler
# 最小-最大规范化
scaler = MinMaxScaler()
scaled_data = scaler.fit_transform(df['column_name'].values.reshape(-1, 1))
# Z-Score 归一化
scaler = StandardScaler()
scaled_data = scaler.fit_transform(df['column_name'].values.reshape(-1, 1))
最小-最大规范化将数值列中所有的数据映射到 [0, 1] 的范围内,公式如下:
x
n
o
r
m
=
(
x
−
x
m
i
n
)
/
(
x
m
a
x
−
x
m
i
n
)
x_{norm} = (x - x_{min}) / (x_{max} - x_{min})
xnorm=(x−xmin)/(xmax−xmin)
其中,x 是原始数据,x_min 和 x_max 分别是原始数据的最小值和最大值。这种方法适用于数据集没有明显的离群值的情况.
Z-Score 归一化将数值列中所有的数据转换为标准正态分布(均值为 0,方差为 1)的数值。公式如下:
x
n
o
r
m
=
(
x
−
m
e
a
n
)
/
s
t
d
x_{norm} = (x - mean) / std
xnorm=(x−mean)/std
其中,x 是原始数据,mean 和 std 分别是原始数据的均值和标准差。这种方法适用于数据集有明显离群值或者需要保留数据的分布信息的情况。