数据处理

57 阅读1分钟

数据处理往往是机器学习的第一个步骤。

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]