这几天学习特征工程,主要是了解工具的使用
首先导入各种模块
import pandas as pd
import numpy as np
import matplotlib
import matplotlib.pyplot as plt
import seaborn as sns
from operator import itemgetter
今天遇到一个问题就是路径中使用了一个path变量,但是导入的时候出现了路径错误,那就是要在导入文件的时候,把路径与文件名称之间假如两个反斜杠转译一下,不然会造成一个路径错误。
Train_data = pd.read_csv('C:\\Users\\acer\\Desktop\\used_car_train_20200313.csv', sep=' ')
Test_data = pd.read_csv('C:\\Users\\acer\\Desktop\\used_car_testA_20200313.csv', sep=' ')
print(Train_data.shape)
print(Test_data.shape)
print(Train_data.head())
print(Train_data.columns)
展示文件中的数据
这里定义一个函数用来删除一些异常值(函数来源于天池,目前我尚未全部理解)
ef outliers_proc(data, col_name, scale=3):
def box_plot_outliers(data_ser, box_scale):
iqr = box_scale * (data_ser.quantile(0.75) - data_ser.quantile(0.25))
val_low = data_ser.quantile(0.25) - iqr
val_up = data_ser.quantile(0.75) + iqr
rule_low = (data_ser < val_low)
rule_up = (data_ser > val_up)
return (rule_low, rule_up), (val_low, val_up)
data_n = data.copy()
data_series = data_n[col_name]
rule, value = box_plot_outliers(data_series, box_scale=scale)
index = np.arange(data_series.shape[0])[rule[0] | rule[1]]
print("Delete number is: {}".format(len(index)))
data_n = data_n.drop(index)
data_n.reset_index(drop=True, inplace=True)
print("Now column number is: {}".format(data_n.shape[0]))
index_low = np.arange(data_series.shape[0])[rule[0]]
outliers = data_series.iloc[index_low]
print("Description of data less than the lower bound is:")
print(pd.Series(outliers).describe())
index_up = np.arange(data_series.shape[0])[rule[1]]
outliers = data_series.iloc[index_up]
print("Description of data larger than the upper bound is:")
print(pd.Series(outliers).describe())
fig, ax = plt.subplots(1, 2, figsize=(10, 7))
sns.boxplot(y=data[col_name], data=data, palette="Set1", ax=ax[0])
sns.boxplot(y=data_n[col_name], data=data_n, palette="Set1", ax=ax[1])
return data_n
Train_data = outliers_proc(Train_data, 'power', scale=3)
对数据进行删除处理可以使我们得到的结果更加准确,特征工程还有特征构造和特征筛选。
特征构造使用的包比较多,所需要的知识比较广泛,由于所学知识的限制,没法全部理解。继续加油。
come from大一的小白