数据处理往往是机器学习的第一个步骤。
1 缺失值处理
首先,我们需要查看数据中缺失值的情况,包括缺失值的分布、缺失原因等。
data=pd.read_csv('path')
# 首先,看看有哪些列包含缺失值
missing_values_count=data.isnull().sum()
#print(data.head(5))
#print(missing_values_count[:30])
total_missing = missing_values_count.sum()
total_cells=np.product(data.shape)
percent_missing = (total_missing/total_cells) * 100 # 计算缺失值的比例
# 然后,凭借自己的直觉对于数据做一个初步的判断,如果这个数据就是不存在的,那么我们应该保留空值,但是如果这个数据是没有记录到,那么我们就应该推测值是什么。
然后我们对于缺失值做相应的处理。
# 1 删除
re_data=data.dropna(axis=1) # 删除有缺失值的列
#print("Columns in original dataset: %d \n" % data.shape[1])
#print("Columns with na's dropped: %d" % re_data.shape[1])
# 2 填充
# data.fillna(0) # 直接全部填充为0
data.fillna(method='bfill', axis=0).fillna(0)
# bfill: 用下一个有效值来填充
# ffill:用前一个有效值来填充
2 Scale 和 Normalize
scale: SVM/KNN需要特定范围的数据,所以scale主要是让数据的范围能够符合某些模型的数据要求的。数据的shape是不变的。
# scale
original_goal_data = pd.DataFrame(data.goal) # 首先,选择数据中的某一列
scaled_goal_data = minmax_scaling(original_goal_data, columns=['goal'])
# normalization
index_of_goal=data.goal>0
positive_data=data.goal.loc[index_of_goal]
normalized_goal=pd.Series(stats.boxcox(positive_data)[0], name='goal', index=positive_data.index)
3 日期处理
# 查看是否Date中所有的数据格式都是一样的
date_lengths = data.Date.str.len()
date_lengths.value_counts()
# 然后找出格式不一致的
indices = np.where([date_lengths == 24])[1]
print('Indices with corrupted data:', indices)
data.loc[indices]