Re非官方入门指南bug更正
首先感谢oilbeater热情提供代码,像我这种一点都不会的靠着研究oilbeater的代码也算知道了点比赛该怎么做,谢谢~
然后就说正题,我也发现oilbeater的代码有些小bug,列出来一下:
1.原代码:
if len(entry_date) == 5:
day = 10 * int(entry_date[2]) + int(entry_date[3])
我没有改成>6,而是改成了
if len(entry_date) == 6:
答案算出来也是可以的
2.原代码:
for line in raw_file.readlines():
entry = line.split(",")
entry_date = datetime(*parse_date(entry[3]))
date_delta = (entry_date - begin_date).days
if date_delta < seperate_day:
train.write(",".join(entry[:3]) + "," + str(date_delta) + "\n")
elif int(entry[2]) == 1:
validation.write(",".join(entry[:2]) + "\n")
validation.write("99999999999,9"+ "\n")
train.close()
validation.close()
加粗的是我添加的一行,因为发现在generate_result函数中会把validation.csv的最后一行忽略掉,也就是代码result.write(cur_id + "\t" + ",".join(set(cur_result)) + "\n"),看它往result.txt写入的是cur_id的数据而不是uid的数据,这样就会出现最后一行数据和前一行不同时数据无法被记录的情况。小白在多次调试后才找到了这个错误,不知道怎么聪明的改代码,就加了一行多余的记录来避免这个问题。
def generate_result(validation):
entrys = validation.readlines()
entrys.sort(key=lambda x: x.split(",")[0])
result = open("result.txt", "w")
for index, entry in enumerate(entrys):
uid, tid = entry.strip().split(",")
if index == 0:
cur_id = uid
cur_result = [tid]
elif uid == cur_id:
cur_result.append(tid)
else:
result.write(cur_id + "\t" + ",".join(set(cur_result)) + "\n")
cur_id = uid
cur_result = [tid]
result.close()
3.原代码:
f = open("predict.txt")
for line in f.readlines():
uid, bid = line.split("\t")
bid = bid.strip('\n')
bid = bid.split(",")
predict_num += len(bid)
加粗的是我添加的代码,不然predict里面是‘200\n’,而result里面是‘200’的时候,就hit不上了。
楼主的代码还是很不错的,教会了我很多。顺路去楼主博客看看了看,楼主比较牛啊,以后要向楼主多学习学习。一会发完帖子,去加楼主QQ,望同意啊。