第九届泰迪杯数据挖掘挑战赛
在这里分享一下,我参加的第九届泰迪杯数据挖掘挑战赛的一下小小的经验!!!
我们小组在这次比赛中选择的赛题是A题。
对于数据挖掘,我们小组就是那种纯属小白的,菜鸟中的菜鸟。。。。。
进入正题:
参加数据挖掘挑战赛,首先要搞清楚数据挖掘的整个过程。
数据预处理在数据挖掘中是非常非常重要的
就拿我们这次的 A题来说,题目所给的数据一共有两万多条,有360多个指标,
拿到数据首先做的就是预处理了
1.空值处理
主要是针对A题做的预处理。拿到A题数据,首先发现有很多指标是没有值的,因为我们要做的是更具已有数据,预测造假公司的情况,有的指标是空值,说明有的公司在这个指标上本身就是不存在值的,那么要做的空值处理就是给这些空指标赋值为0,如果我们随意的给这些空指标赋予其他值,可能会导致数据不准确,最后预测出来的结果会出现很大的错误。对于缺失值大于80%的,这里直接选择删除,缺失值达到80%,证明这个指标是没有很大的实际意义的
def clear80(sum):
#删除80%空值的列
#复制一个sum_C,避免破坏原数据,True表示复制,Flase表示引用
sum_C2=sum.copy(deep=True)
#sum.shape[1]为列数,sum.shape[0]为行数
col=copy.copy(sum_C2.shape[1])
row=copy.copy(sum_C2.shape[0])
for i in range(col):
count=0
for j in range(row):
if pd.notnull(sum_C2.at[j,sum_C2.columns[i]]):
count=count+1
if (count/row)<0.2:
sum_C2.iloc[:,i] = 0
i=0
while i<col:
if sum_C2.iloc[:,i].sum(axis=0) == 0:
# print("已删除 ",end=' ')
# print(sum_C2.columns[i])
sum_C2=sum_C2.drop(columns=[sum_C2.columns[i]])
i=i-1#i--是因为sum_C也删除了一列,如果不i--则会漏一列没监测是否有80%数据
col=col-1#总列数-1
i+=1
sum_C2=sum_C2.drop(columns=['REPORT_TYPE','FISCAL_PERIOD','MERGED_FLAG','ACCOUTING_STANDARDS','CURRENCY_CD'])
#sum_C2=sum_C2.drop(columns=['报告类型','会计区间','合并标志:1-合并,2-母公司','会计准则','货币代码'])
print("有效数值少于80%的列已删除完毕...")
#填充nan值,二选一
#按列均值
#sum_C2=sum_C2.fillna(sum_C2.mean())
#填0
sum_CC=sum_C2.iloc[:,:-1].fillna(0)
sum_CC=sum_CC.join(sum_C2.iloc[:,-1])
print("均值填充完毕...")
return sum_CC
2.去量纲化
控制处理完毕之后,接下来就是去量纲化了。对于不同的指标,单位是不一样的,有的指标的单位是元,有的指标的单位是%。对于不同单位的指标是无法进行比较。比如说有一个指标的数据是123456789元,有一个指标的数据是98%,那么这两个指标就是无法比较的,所以需要去量纲化,将所有指标的单位都去掉,进行去量纲化处理。这里直接使用sklearn
库里的数据预处理方法来做数据的去量纲化。
def standard(data):
scaler = preprocessing.StandardScaler().fit(data)
data_x_stand = scaler.transform(data)
data_x_stand=pd.DataFrame(data_x_stand)
data_x_stand.columns=data.columns.to_list()
print("数据规范化处理完毕...")
return data_x_stand
总结
现在只讲了数据预处理的:去空值和去量纲化,我会在接下来的文章中介绍剩余的预处理方法。。。
数据处理(二)