[上分指南] 2020华为云大数据挑战赛热身赛如何轻松快速提高10分?baseline简单解读与优化思路分享第一弹

Viridis ·
更新时间:2024-09-21
· 988 次阅读

[上分指南] 2020华为云大数据挑战赛热身赛如何轻松快速提高10分?baseline简单解读与优化思路分享第一弹

你感受过长期35.6483的绝望吗?
如果你回答是,那么请阅读本文!!

写在前面:大家好!我是练习时长半年的在读本科生数据小白JerryX,各位数据挖掘大佬多多指教!!欢迎大家多多点赞,多多评论,多多批评指正!!

下面,我们一边研究下baseline,一边看看如何脱离35.6483的苦海。

import moxing as mox mox.file.shift('os', 'mox') import os import re import json import pandas as pd from pandas import to_datetime from sklearn.ensemble import GradientBoostingRegressor from sklearn.metrics import mean_squared_error from sklearn.model_selection import train_test_split from sklearn.externals import joblib from collections import OrderedDict

首先是常规操作,入一些必要的

# 获取竞赛数据集:将“obs-mybucket-bj4/myfolder”改成您的OBS桶名及文件夹 import moxing as mox mox.file.copy_parallel('s3://obs-bdc2020-bj4/traffic_flow_dataset', 's3://obs-mybucket-bj4/traffic_flow_dataset') print('Copy procedure is completed !')

我们再从华为云的OBS获取本次比赛的数据集traffic_flow_dataset并复制到本地路径下。

OBS_DATA_PATH = "s3://obs-mybucket-bj4/traffic_flow_dataset" LOCAL_DATA_PATH = './dataset/train' OBS_MODEL_DIR = "s3://obs-mybucket-bj4/modelfiles/model" OBS_MODEL_PATH = OBS_MODEL_DIR + "/modelfile.m" OBS_CONFIG_PATH = OBS_MODEL_DIR + "/config.json" LOCAL_MODEL_PATH = './modelfile.m' LOCAL_CONFIG_PATH = './config.json'

接下来,我们宏定义一些路径地址,包括后续调用数据集,保存模型等的路径。

# read data of one day and one direction def read_file(path, filename): calfile = os.path.join(path, filename) original = pd.read_csv(calfile, header=None) data = pd.DataFrame(columns=["time", "number"]) data["time"] = original[0] data["number"] = original[3] + original[4] return data

这个函数正如注释所解释的一样读取一个方向的一天的数据。其中"time"即当日的一些时间片的时间戳,而"number"则是某条路段的某个时间点的某个方向的左转和直行的车流量和

# read data of one day def read_data_day(path, date): day_data = pd.DataFrame(columns=["time","number"]) caldir = os.path.join(path, date) # read data of one day for f in os.listdir(caldir): if re.match(r'wuhe_zhangheng.*\.csv', f): day_data = day_data.append(read_file(caldir, f), ignore_index=True) return day_data

这一个函数则是读取某一天的数据,我们可以看到在baseline的实现中利用正则表达式匹配出了"wuhe_zhangheng"这一路口对应的信息,但是却没有考虑到其他路口的流量信息,那么后续如何将其他路口的流量信息引入,来更好地服务于五和张衡路口的流量预测呢?这是一个可以考虑的方向。

# get and preprocess data def get_data(path): raw_data = pd.DataFrame(columns=["time", "number"]) for day in os.listdir(path): raw_data = raw_data.append(read_data_day(path, day)) # encode time in raw data to weekday and timeindex(the n minutes of the day) df_dt = to_datetime(raw_data.loc[:, "time"], format="%Y/%m/%d %H:%M:%S") all_data = pd.DataFrame({ "weekday": df_dt.dt.weekday/6.0, "timeindex": (df_dt.dt.hour * 60 + df_dt.dt.minute)/(24*60.0), "number": raw_data["number"].astype(int)}) all_data = all_data.groupby(["weekday", "timeindex"]).mean().reset_index(level = ["weekday", "timeindex"]) return all_data

这个函数就是我们获取数据和构建数据集的一个主要函数了,其中我们可以注意到我们构建的数据集包含三大属性:
(1)weekday:即周次特征的归一化。
(2)timeindex: 即当天的时间戳。
(2)number: 从上面的子函数我们可以得知这一属性代表的是某条路段的某个时间点的某个方向的左转和直行的车流量和。
接下来,上分点来了!!!
注意:看下面这行代码

all_data = all_data.groupby(["weekday", "timeindex"]).mean().reset_index(level = ["weekday", "timeindex"])

这行代码达到的目的是什么呢,它将给定周次的给定时间戳的所有的流量信息做了分组的平均聚合。 换句话说,它将一个路口的几周的四个车流量做了平均。

平均。。这对吗??
原创文章 11获赞 24访问量 2万+ 关注 私信 展开阅读全文
作者:ICRAPursuer



华为云 数据 华为 优化 大数据

需要 登录 后方可回复, 如果你还没有账号请 注册新账号