路况状态时空预测首日基线
来源: | 作者:木贼 | 发布时间: 2020-10-21 | 2566 次浏览 | 分享到:

一个无脑的规则

#predict.py
#0.55033999
import pandas

訓練表 = None
for 甲 in range(1, 31):
	檔案 = open("traffic/201907%02d.txt" % 甲)
	道路標識清單 = []
	標籤清單 = []
	當前時間片清單 = []
	待測時間片清單 = []

	for 列 in 檔案:
		列分割 = 列.split(";")
		列分割0分割 = 列分割[0].split(" ")
		道路標識清單 += [int(列分割0分割[0])]
		標籤清單 += [int(列分割0分割[1])]
		當前時間片清單 += [int(列分割0分割[2])]
		待測時間片清單 += [int(列分割0分割[3])]

	訓練表 = pandas.concat((訓練表, pandas.DataFrame({"日序": 甲 - 31, "道路標識": 道路標識清單, "標籤": 標籤清單, "當前時間片": 當前時間片清單, "待測時間片": 待測時間片清單})))
	檔案.close()
訓練表 = 訓練表.loc[訓練表.標籤 > 0].reset_index(drop=True)
訓練表.loc[訓練表.標籤 > 3, "標籤"] = 3

檔案 = open("test.txt")
道路標識清單 = []
標籤清單 = []
當前時間片清單 = []
待測時間片清單 = []
for 列 in 檔案:
	列分割 = 列.split(";")
	列分割0分割 = 列分割[0].split(" ")
	道路標識清單 += [int(列分割0分割[0])]
	標籤清單 += [int(列分割0分割[1])]
	當前時間片清單 += [int(列分割0分割[2])]
	待測時間片清單 += [int(列分割0分割[3])]
測試表 = pandas.DataFrame({"日序": 0, "道路標識": 道路標識清單, "標籤": 標籤清單, "當前時間片": 當前時間片清單, "待測時間片": 待測時間片清單})
檔案.close()

測訓交叉表 = 測試表.loc[:, ["道路標識", "當前時間片", "待測時間片"]].merge(訓練表.rename({"當前時間片": "訓練當前時間片", "待測時間片": "訓練待測時間片"}, axis=1), on="道路標識")
測訓交叉表["權重"] = 1 / (1 + abs(測訓交叉表["待測時間片"] - 測訓交叉表["訓練待測時間片"]))
測訓交叉表 = 測訓交叉表.groupby(["道路標識", "當前時間片", "待測時間片", "標籤"]).aggregate({"權重": "sum"}).reset_index().rename({"權重": "打分"}, axis=1)

預測表 = 測試表
for 甲 in range(1, 4):
	預測表 = 預測表.merge(測訓交叉表.loc[測訓交叉表.標籤 == 甲, ["道路標識", "當前時間片", "待測時間片", "打分"]].rename({"打分": "打分%d" % 甲}, axis=1), on=["道路標識", "當前時間片", "待測時間片"], how="left")
預測表 = 預測表.fillna(0)

係數 = [(訓練表.標籤 == 3).sum() / 訓練表.shape[0], (訓練表.標籤 > 1).sum() / 訓練表.shape[0]]
預測表["預測"] = 1
預測表 = 預測表.sort_values("打分3", ascending=False).reset_index(drop=True)
預測表.loc[:int(係數[0] * 預測表.shape[0]), "預測"] = 3
預測表 = 預測表.sort_values(["預測", "打分2"], ascending=False).reset_index(drop=True)
預測表.loc[int(係數[0] * 預測表.shape[0]):int(係數[1] * 預測表.shape[0]), "預測"] = 2
預測表 = 預測表.loc[:, ["道路標識", "當前時間片", "待測時間片", "預測"]]

提交表 = 預測表.loc[:, ["道路標識", "當前時間片", "待測時間片", "預測"]].copy()
提交表.columns = ["link", "current_slice_id", "future_slice_id", "label"]
提交表.to_csv("result.csv", index=False)