本次研究使用的数据集是2015年上海SODA竞赛的城市数据集,拿到数据后我就确立了本次数据挖掘的题目——对于上海市道路交通拥堵指数的分析,并实现不同位置在一定精度(80%)下的交通拥堵指数的预测。
根据主观感觉,一个位置特定时间的交通拥堵指数可能跟这个路段的天气情况(降水、温度、风向、能见度等)、空气质量(PM2.5指数)和道路情况相关,所以本次数据分析选用的数据集有城市交通拥堵指数.csv、空气质量状况.csv以及网络搜集所得天气数据三个数据集,拿到数据集后各数据集的特征情况以及处理目标如下:
Preprocessing
step by step!对数据集的预处理一个一个来
城市交通数据集
首先对城市数据集的区域特征进行处理。关于区域的特征有区域名和区域编号两个,故大胆猜测他们两个之间存在着某种关系,要找到这种关系。
区域编号的命名存在着某种规律,做了统计之后发现区域编号总共有XN、XZ、XW、DN、DZ、DW六种类型,接着我在百度地图上对着不同区域号的区域名做了个标记图(下面放出XN类型的标记图):
emmm似乎这些地点都在黄浦江西,并且靠近上海市的中心地带,那会不会X代表黄埔江西,D代表黄浦江东,N、Z、W分别代表城市的内环、中环和外环呢。尽管无法验证,但是这个猜想基本和实际的标记图一致。接下来做出这不同区域的分布:
虽然通过上面的实践我们找到了区域编号的命名规律,但是似乎到这里就必须做出选择了——将预测问题转换为大的区域的交通指数预测问题 or 精确度更高的交通指数预测。在这里我决定预测大的区域的交通指数,因为我们数据集的样本比较少,具体到某一时间某个精确地点的样本只有200条左右,模型拟合地不好。因此在这时调整目标为预测不同区域不同时间的拥堵指数。
除此之外,还做了一些特征,通过人工打标的方式,对不同区域的属性值做出了划分,如教学区(SchoolArea)、生活区(LivingArea)、商业区(ShoppingArea)等等
接下来对时间这一条特征进行处理。从原来的特征中提取出小时作为新的特征Hour,让模型的预测时间精度在一个小时以内,也方便后期的训练。
将日期提取出来,转化为一年中的第多少天作为新的特征Days。
创建新的复合特征IsRushHour表示这个小时是否是高峰期,IsFestival表示这天是不是节日(包括所有的法定节日和情人节、圣诞节这种可能会增加拥堵指数的节日),IsWeekend表示这天是否是周末等等
好了,处理差不多了我们来看一下拥堵指数(预测目标)的分布情况
上图表示了不同年份(2014、2015)交通指数的分布情况,可以看出大多数的交通拥堵指数都在15~50的区间内,且2015年的拥堵指数对比2014年的拥堵指数有左移的趋势,这是不是说明15年的拥堵情况减轻了呢
上图是不同天数的拥堵指数平均值,上面是2014年的、下面是15年的,可以看出不管是14年还是15年的拥堵指数都以七天为一个周期进行有规律的小波动,尤其在周末拥堵指数较低,在平日拥堵指数较高,或许上海市民在周末的主要活动是以休息为主吧。此外在14年270天左右出现的明显高峰,对应着的是国庆节假日出游人数的增多。数据整体较符合生活规律
空气质量数据集
空气质量数据集最明显的特点是同样表示空气质量等级的特征有三个AQI、Grade和AIRQUALITY。三个特征如果相关性比较紧密,就需要去除两个冗余的特征,减小模型的计算量,避免Overfitting。在这里使用了两种方法来分析特征之间的相关性: Spearman S p e a r m a n 分析和 P