数据预处理清洗方法总结(一)

以house price为例


1. Train_df.head(n)

通过查看表格头部几行元素来观察数据的大致组成。


2. prices = pd.DataFrame({“price”:train_df[“SalePrice”],”log(price+1)”:np.log1p(train_df[“SalePrice”])})

Prices.hist()

数据预处理清洗方法总结(一)

price即数据的label本身不是平滑的,通常为了分类器学习的准确性,会首先把label“平滑化”,即呈现正态分布。在这里通常使用log1p,即log(x+1),避免了负值的问题。

最后也要把预测的平滑数据给变回去,需要使用expm1()


3. 合并操作:

all_df = pd.concat((train_df,test_df), axis = 0 )


4.  house price predictionMSSubClass的值其实应该是category,使用DF的时候,这类数字符号会被默认记成数字。因此我们需要把它变回string

Input  >> all_df[‘MSSubClass’].dtypes

Output >> dtype(‘int64’)

因此进行操作:

all_df[‘MSSubClass’] = all_df[‘MSSubClass’].astype(str)


5. category的变量转换成numerical表达形式

当我们用numerical来表达category 时要注意,数字本身有大小的含义,所以使用数字会给以后的模型学习带来困难,于是我们可以用One-Hot向量表示category

一键One-Hot的方法:

all_dummy_df = pd.get_dummies(all_df))


6. 缺失值的处理:

1查看有哪些特征有缺失值

all_dummy_df.isnull().sum().sort_values(ascending=False).head(10

处理这些缺失的信息,一般来说,数据集的描述里会写的很清楚,这些缺失都代表着什么。否则我们根据自己的选择来填充缺失值

(2)在这里,我们用平均值来填满这些空缺。

mean_cols = all_dummy_df.mean()

all_dummy_df = all_dummy_df.fillna(mean_cols)


7. 标准化numerical数据

这一步并不是必要,但要看你想用的分类器是什么。一般来说regression的分类器最好把源数据放在一个标准分布内,不要让数据间的差距过大。

这里,不需要把One-Hot的数据标准化,应该把本来就是numerical的数据标准化。

首先,判断哪些时numerical的数据:

numeric = all_df.columns[all_df.types != ‘object’]

然后计算标准分布:(X-X’)/s,让我们的数据点更加平滑,便于计算。

注意这里可以继续使用loc的。

Numeric_col_means = all_dummy_df.loc[:,numeric_cols].mean()

Numeric_col_std = all_dummy_df.loc[:,numeric_cols].std()

All_dummy_df.loc[:,numeric_cols] = (all_dummy_df.loc[:, numeric_cols] - numeric_col_means/ numeric_col_std