最近在做天池的一个比赛,真是应了那句俗语‘一窍不得,少挣几百’。在寻找缺失值的时候看到了队友写的代码,感触颇多,想记录下来。
缺失值处理一直是影响模型效果的重要因素,听过好多前辈说过好的模型不如好的数据。
这次比赛是时间序列的比赛,为了尽可能达到数据的稳定。我们在分析了数据之后,决定对每个date的brand进行补充,补充的结果达到每一天都含有所有的brand。
ps:数据结构(dataframe)
1.首先这是我的:
for index in train.index:
if(train.loc[index][‘brand‘] != (i+1)):
if(train.loc[index][‘date‘] !=j):
for m in range(5-i):
num = num + 1
train.loc[num] = {‘date‘:train.loc[index][‘date‘],
‘day_of_week‘:train.loc[index][‘day_of_week‘],
‘brand‘:m+1,
‘cnt‘:med[m]}
i = 0
else:
for m in range(train.loc[index][‘brand‘]-i-1):
num = num + 1
print(train.loc[num-1])
data_new = pd.DataFrame({‘date‘:train.loc[index][‘date‘],
‘day_of_week‘:train.loc[index][‘day_of_week‘],
‘brand‘: m+1+i,
‘cnt‘:med[m+i]},
columns=[‘date‘,‘day_of_week‘,‘brand‘,‘cnt‘])
i = train.loc[index][‘brand‘]
i = (i + 1) % 5
j = train.loc[index][‘date‘]
我的想法是遍历dataframe,然后对不符合的数进行记录,插入到dataframe后,然后进行排序。具体就不多说了
2.这是队友的
trs = train[[‘date‘,‘day_of_week‘]].drop_duplicates()
dt = trs[‘date‘].tolist()
dw = trs[‘day_of_week‘].tolist()
db = []
dts = []
dws = []
for i in range(len(dt)):
for m in range(1,6):
dts.append(dt[i])
db.append(m)
dws.append(dw[i])
try_data = pd.DataFrame({‘date‘:dts,‘day_of_week‘:dws,‘brand‘:db})
comb = pd.merge(try_data,train,how=‘left‘,on=[‘date‘,‘day_of_week‘,‘brand‘])
队友的想法是生成两个dataframe,然后合并,缺失值自然为none。
还是要好好向他学习
good lock to us