【数据挖掘】基于Uber出租车数据分析NewYork市民空间行为特征以及一些空间分布探索性分析


1 研究区域概况

——以2014年kaggle数据集为例

首先,我们获取了关于uber-pickups数据(仅2014年),其大量的数据记录让我直观的产生两个问题。第一,什么样级别的城市才能产生如此大量的数据?第二,究竟是什么事情和什么地方是当地居民选择的热门?我们要明白为什么会有那么多的数据,必须先认识一下这个美国人口数量第一的城市。
下面是纽约基本情况,揭示出为何能够产生如此大的数据量,可以看也可以不看。

	区位:纽约市地处美国东北纽约州东南哈德森河口,大约在华盛顿特区和波士顿中间位置,紧邻的哈德逊河让纽约市享有运航之便,使其快速发展成为一个贸易重镇。纽约城区大多落在曼哈顿、斯塔滕岛和长岛,因为土地狭小所以人口密度很高。纽约市整体面积约1214平方公里(468.9平方英里),其中425平方公里(164.1平方英里)为水域,789平方公里(304.8平方英里)为陆地,濒临大西洋。它由五个区组成:==布朗克斯区==(The Bronx)、==布鲁克林区==(Brooklyn)、==曼哈顿==(Manhattan)、==皇后区(昆斯区)==(Queens)、==斯塔滕岛==(Staten Island)。全市总面积达==1214.4平方公里==。
	人口:纽约是全美人口最多的城市,也是个多族裔聚居的城市,拥有来自97个国家和地区的移民,截至2012年,纽约市人口约为834万人。2010年,纽约的人口密度为27,532人每平方英里(10630人每平方公里),在全美人口超过10万的城市中==排名第一==,但根据2000年数据,临近位于新泽西州哈德逊县的一些小城市(人口少于10万)人口密度要更高。曼哈顿(纽约县)的**人口密度为66,940人每平方英里**(25846人每平方公里),为全美人口最稠密的县,密度比任何一个美国城市都要大。
	经济:纽约是世界的经济中心,也是世界三大金融中心之一(另外两个为伦敦和香港)。据财经日报辛科迪亚斯统计,截至2008年底,纽约控制着全球40%的财政资金,是世界上最大的金融中心。纽约证券交易所拥有全球最大上市公司总市值,全球市值为15万亿美元。有超过==2800家公司==在此上市。根据美国联邦政府的报告,截止到2013年底,纽约市的所有财产总值为879万亿美元。在世界500强企业中,有73家企业位于纽约。曼哈顿中城是世界上最大的CBD及摩天大楼集中地,曼哈顿下城是全美第三大的CBD(仅次于芝加哥)。由于在2013年日元兑美元单边大幅度贬值20%等因素,2013年纽约GDP超越东京,现位居世界第一。人均==GDP13.88万美元==,居世界城市第一名。2010年大纽约都会区GDP为27544亿美元。在2013新华-道琼斯国际金融中心发展指数位居世界第一。
	艺术:纽约市拥有世界上一些最引人入胜的艺术博物馆和展览馆。为了从纽约世界级艺术体验中得到最大的收获,一定别忘了身尽其中。艺术馆大道:参观上东部(Upper East Side)艺术馆大道上这座城市的美术馆。由于这些美术馆相隔不过几个街区,穿越街道时可在中央公园或麦迪逊大道附近的咖啡馆稍作休息。在所罗门·R·古根海姆博物馆壮观的圆形大厅内,有一个不断更新的展台,其中的永久收藏包括马蒂斯和梵高的不朽作品。在大都会艺术博物馆精选几个展览馆和陈列馆,重点了解希腊和罗马陈列馆之类的新展。

纽约区位图1,来源www.openstreetmap.org纽约区位图2,;来源www.googlemap.com

2 明确空间数据挖掘任务

2.1实现出租车数据与纽约地图数据匹配

2.2分析空间分布特征,制作热度图分布图,实现可视化

2.3结合热度图,利用GIS空间分析方法,讨论乘车人口可能的空间行为特征

2.4分析出租车接客数据的时间序列特征,按照日、周、月、季时间尺度加以讨论

3 空间数据挖掘实现

3.1出租车数据与纽约地区数据的匹配

表3-1 Uber-pickups数据实例(部分
Date/Time Lat Lon Base
4/1/2014 0:11:00 40.7690 -73.9549 B02512
4/1/2014 0:17:00 40.7267 -74.0345 B02512
4/1/2014 0:21:00 40.7316 -73.9873 B02512
4/1/2014 0:28:00 40.7588 -73.9776 B02512
4/1/2014 0:33:00 40.7594 -73.9722 B02512
4/1/2014 0:33:00 40.7383 -74.0403 B02512
4/1/2014 0:39:00 40.7223 -73.9887 B02512
要想实现Uber的接客数据与地图数据匹配,需先了解两者之间的坐标和投影关系。Uber-pickups数据分为四列:第一列(Date/Time)为接客的时间,第二列、第三列为接客的维度和经度,第四列(Base)为客人上车的区域。
经过上述分析之后,我根据uber-pickups数据和任务要求,决定采用QGIS作为任务实现平台。首先,将openstreetmap加载到地图图层,如下图。
加载地图地图数据图层(QGIS)
图层openstreetmap显示
然后,再次回到DataSourceManager窗口,选择导入“分割文本文件”;点击扩展按钮加载我们之前下载好的uber-pickups数据(此处以uber-raw-data-may14.csv为例);在“记录和字段选项”选项卡中,已经自动选定首行包含字段名称,检测字段类型;在“几何图形定义”选项卡中,自动加载至点坐标,横、纵坐标自动填充经度和纬度,“几何坐标参照系”保留为默认的“EPSG:4326-WGS 84”;审查“数据样例”中的数据已经正确显示,然后点击添加,等数据全部加载完毕后,关闭此窗口。
此时,已经实现出租车的pickups数据与纽约地图的匹配,如下图。
比例尺在1:200000下的数据图层
比例尺1:20000下的数据图层
比例尺1:5000下的数据图层

3.2实现pickups数据的可视化

3.2.1热图(Heatmap)的概念

在制作热力图时常采用核密度分析方法,在核密度分析中,设置的搜索半径越大,生成的密度栅格越平滑且概化程度越高,值越小,生成的栅格显示的信息越详细。
在计算密度时,仅考虑落入邻域范围的点或线段,如果没有电或线段落入特定像元的邻域范围内,则为该像元分配Nodata。
我们根据平台提示可知,输入的数据的投影坐标系为“ESPG:4326”,即WGS-84坐标系。

3.2.2不同参数下生成的热力图对比

在QGIS中制作Heatmap,需要选择一个Radius(此值是根据载入数据选定的地图相对值,不同),此参数确定改点对其产生影响的每个点周围的圆形区域,此值很大程度上取决于输入数据的类型。生成Heatmap最重要和最关键的在于如何确定参数和选定的内核:(1)事件会影响多大的范围;(2)多少影响将保留在原始位置,以及多少影响将在整个带宽间隔内分散。
不同核密度分析半径下的热力图比较
由上图可以看出,在R=20时,数据显示过于集中,基本上无法有效地分辨出数据点的空间关系;在R=10,出现较为集中的热力聚集现象,但是在市区仍然较为集中,其它数据集中区域虽有显示,但是不算太明显;在R=5时,在市区中出现可以分别的数据聚集,同时其周边机场等人流量较多的地区也出现易于分别的数据聚集;在R=1时,数据聚集明显,部分地区达到热力亮度的最高值,但是与周围的相互影响无法显示出来。
结合生成的热力图效果和图层渲染时间,决定采用R=5生成全部月份的热力图,热力图透明度设置为75%。

3.3结合热度图和GIS空间分析方法分析居民可能的空间行为特征

各个月份的出租车数据热图(比例尺1:100000

Apr
May
Jun
Jul
Aug
Sep
在小比例尺情况下,通过热力图的显示,可以看出,大量的乘车数据集中在纽约市的城区,且城区对周边产生较大的影响,同时部分数据也集中在拉瓜迪亚机场、约翰·菲兹杰拉德·肯尼迪国际机场,这与纽约这个国际化的金融、经济、文化中心有关。
在大比例尺情况下,通过热力图的显示(以当年五月份为例),可以看出,pickups数据大多集中于旅游景点、餐饮中心、休闲公园等公共场所。
热力图集中地点——餐饮中心
热力图集中地点——医疗中心
热力图集中地点商业大道
热力图集中地点整体显示

3.4时空特征分析

3.4.1数据字段分析

首先,根据提供的对所有的数据进行一个统一化汇总,以便从各个方面对数据进行分析。建立一个列表List=[‘uber-raw-data-apr14.csv’, ‘uber-raw-data-may14.csv’, ‘uber-raw-data-jun14.csv’, ‘uber-raw-data-jul14.csv’, ‘uber-raw-data-sep14.csv’, ‘uber-raw-data-aug14.csv’],经过合并计算,得到结果,共4534327条数据,4列

// 数据字段
filenames=[]
pri_name="uber-raw-data-"
last_name="14.csv"
months=['apr','may','jun','jul','sep','aug']
for month in months:
    filename=pri_name+month+last_name
    filenames.append(filename)
print(filenames)
big_df=[]#creat list to store all the dataframe
for filename in filenames:
    uberdata=pd.read_csv('./InputData/'+filename)
    big_df.append(uberdata)
uber_data=pd.concat(big_df)

3.4.2基于周的数据特征分析

// An highlighted block
def filter_weekday(dataset, num):
    data = []
    for index in range(0, len(dataset)):
        if dataset['weekday'][index] == num:
            target_data = dataset['Base'][index]
            data.append(target_data)
    return data
weekday_data = []
for i in range(0,7):
    data = filter_weekday(agg_weekday, i)
    weekday_data.append(data)
# create chart for visualization 
months = ['Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep']
fig = go.Figure(data = [
    go.Bar(name = 'Sunday', x = months, y = weekday_data[0]),
    go.Bar(name = 'Monday', x = months, y = weekday_data[1]),
    go.Bar(name = 'Tuesday', x = months, y = weekday_data[2]),
    go.Bar(name = 'Wednesday', x = months, y = weekday_data[3]),
    go.Bar(name = 'Thursday', x = months, y = weekday_data[4]),
    go.Bar(name = 'Friday', x = months, y = weekday_data[5]),
    go.Bar(name = 'Saturday', x = months, y = weekday_data[6])
])

基于四月份对每周七天客流量统计
序号 Weekday 客流量
0 Sunday 60861
1 Monday 91185
2 Tuesday 108631
3 Wednesday 85067
4 Thursday 90303
5 Friday 77218
6 Saturday 51251
在这里插入图片描述

3.4.3基于日的数据特征分析

// 
agg_day = all_data.groupby(['day'], as_index = False)['Base'].count()

序号 day 客流量
00 01 127430
01 02 143201
02 03 142983
03 04 140923
04 05 147054
05 06 139886
06 07 143503
07 08 145984
08 09 155135
09 10 152500
10 11 148860
11 12 160606
12 13 156892
13 14 140148
14 15 153726
15 16 158921
16 17 152524
17 18 151319
18 19 153088
19 20 144179
20 21 141112
21 22 146952
22 23 156032
23 24 144169
24 25 152667
25 26 153405
26 27 145652
27 28 141157
28 29 149086
29 30 167160
30 31 78073
注:此处在前几行,序号出现00,01,02等纯粹是在博客中为了显示整齐人为加的0(稍微有一点强迫症@—@),在程序处理中序号并没有0;但是在日期day中根据自己需要可以设置成前面有0或没0。
在这里插入图片描述

3.4.4基于地区的数据特征分析

下面展示一些 内联代码片

// 
agg_base=all_data['Base'].value_counts()

不同地区乘车数据雷达图

在这里插入图片描述

3.4.5基于不同地区和月份的联合数据分析

// An highlighted block
all_data['counter'] = 1
basename = uber_data.Base.unique()
agg_BaseMonth = all_data.groupby(['month', 'Base'], as_index = False)['counter'].count()
# print(agg_BaseMonth)
months = ['Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep']
# create list for label of base 
option = []
for label in uber_data.Base.unique():
    option.append(label)    
# dropdown list for bases
origin = widgets.Dropdown(
    options=option,
    value='B02512',
    description='Base Name:',
)

在这里插入图片描述
在这里插入图片描述
由上面统计图可以看出,对于六个月的时间跨度,B02512、B02598、B02682地区客流量基本不变;但是有两个比较异常的现象,对于四月、五月两个月在B02617地区客流量较少,但是在六月、七月、八月、九月时客流量逐步增大;前五个月份B02764地区客流量都不算很大,但是在九月份时,客流量出现猛然增长。
在这里插入图片描述
在地区B02598、B02512、B02682,六个月份客流量波动不大,因此,建议公司保持在这样的出租车投放量;对于B02617地区,客流量在持续增增长,说明该地区需求不断变大,因此公司需要及时增加该地区的出租车投放量;在地区B02764,九月份客流量突然增加,与上面分析形成交叉验证,说明该地区在这个时间段内有大事件发生,建议充分考虑客流量增加的原因,不能盲目地直接增加该地区的出租车数量来满足一时的需求。

4 利用QGIS中TimeManagement进行数据动态变化演示

利用time management插件可以实现,在不同时间尺度上数据的动态变化,这样有利于我们更为直观有效地看出在不同时间段的市民出行规律,能够明显地看出在什么时间什么地点会聚集较多的客流量。
QGIS中导入time management 插件
如下图所示,导入插件之后,我们可以进行相应的参数设置,比如我们导入的是九月的接客数据,设置相应的图层,设置起始和终止时间,时间序列设置比较灵活可以为一天也可以设置为一周,还可以是分秒,但是考虑计算机性能对渲染速度的影响,基本上不设置分秒。
参数设置面板
时间序列下的数据变化
根据上面的设置,可以按指定时间间隔进行显示,实现数据动态的显示。

5 利用格网对时空特征分析优化生成“格网路径”

根据研究区范围和数据情况,我们建立100m×100m的六边形格网,用于对热力图的进一步分析。
比例尺1:125000下的格网分析
比例尺1:40000下的格网分析
比例尺1:10000下的格网分析
建立不同尺寸的格网允许我们将一整个区域分割成不同的子区域,同样也可以采取不同的格网分割方法,例如矩形、点状、等边三角形等,利用格网可以让我们的分析和计算更上一个台阶,我们可以将落入每个格网点的数量进行统计,然后赋予格网相应的属性,研究它与周围格网之间的关系,发掘出一些更符合实际情况的规律;另外,与传统的热力路径不同,我们也可将一定属性的格网提取出来,进行构建“格网路径”,这样的路径并不是一条道路,它是区域和道路的结合体,这样的路径不仅能够利用以往的路径导航,同时也可以加入标志性建筑进行路径分析和导航【记得有一篇SCI写得就是借助landmarks来实现导航,它的基本依据就是人类在空间认知过程中往往是先找对他们来说具有标志性的物体来实现对自己空间定位,然后再根据自己的经验或者说生物识别(位置细胞)来实现空间定向,进而进行空间探索。所以,我觉得landmark可以和格网进行结合,在以标志性建筑为基础,空间格网内构建信息认知流(路径、方向)来实现导航】。遇到的问题是,格网计算对计算机资源要求过高,因此实验有待进一步进行讨论和研究。

由于自己能力有限,整个过程用的知识还是很简单的,没有用到一些深层次数据挖掘的算法;统计数据可视化也只在Excel中进行,没有用到专业的可视化呈现软件;同样QGIS作为一项开源具有丰富插件的软件,我也仅仅使用了TimeManagement插件,还有很多其他插件等待自己去探索。
最后,感谢大家浏览!

排版布局不是太美观希望见谅,而且如果哪个地方存在问题,还请各位多多指教,同时,欢迎随时进行学习探讨~

邮箱:hpuzhiyang@126.com
QQ:571023600

参考文献1 2 3


  1. 维基百科 ↩︎

  2. QGIS使用手册 ↩︎

  3. openstreetmap使用手册 ↩︎

  • 2
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值