继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

灵魂拷问:假期郊游,哪些地方距离远,且离家近?

大鹏教你玩数据
关注TA
已关注
手记 13
粉丝 2
获赞 9

“没有私人飞机也能任性畅玩?”

故事的起因是这样的:上个周末我进行了快乐郊游,回程时不出意外又双叒叕被堵在路上。

大塞车时我跟朋友聊天:

哼!我们技术宅可是有尊严的!没有私人飞机,照样可以快乐游玩!在五一假期来临之际,本着造福人类的心,我跟大家分享一下我的旅行计划:
**我的目标:**以上海为出发地,找到限定通行时间单程3小时以内的一日游目的地。
计划过程:

从哪儿出发,到哪儿去?

首先,OD问题——从哪出发,到哪里去?一份全国各城市经纬度坐标数据闪亮登场。

然后,对数据进行简单的排列组合,以上海为起点,其他城市为终点,制作一张OD表。使用python,写几行代码,主要逻辑是遍历,再重新排列组合,so easy!

import pandas as pdcity = pd.read_excel('中国城市经纬度.xlsx')l = []for ocity, olng, olat in zip(city['name'],city['lng'],city['lat']):    for dcity, dlng, dlat in zip(city['name'],city['lng'],city['lat']):        l.append([ocity,olng,olat,dcity,dlng,dlat])data = pd.DataFrame(l,columns=['ocity','olng','olat','dcity','dlng','dlat'])data = data[data['ocity']=='上海']data = data[data['dcity']!='上海']data.to_csv('上海城市联系表.csv',encoding='gbk',index=0)

(完整代码和数据见文末)

整理后,结果是这样的。

两者的通行时间?

有了OD联系表后,问题又来了,我如何知道两者的通行时间?有一个简单的办法:高德地图一个个查呗!

当然,如果你参加过数据分析师微专业课程,掌握python,就会知道这其实有更高效的批量解决方案。高德提供API接口,地图查询显示的数据都能通过API得到。我们打开路径规划API文档。

可以发现它支持各种交通方式,步行,骑车,公交(不包括飞机,包括高铁),驾车。接口说明清晰明了,字段丰富多样,以供选择。

所以,让我们一起coding吧。

import requestsimport pandas as pdfrom tqdm import tqdmAK = '引号中输入您的高德地图开放平台秘钥'def createUrl(gd_ak):    transitUrl = 'https://restapi.amap.com/v3/direction/transit/integrated?key={}&'.format(gd_ak)    driveUrl = 'https://restapi.amap.com/v3/direction/driving?key={}&'.format(gd_ak)    return transitUrl,driveUrldef transit(url,origin,destination,city,cityd):    api = url + 'origin=' + origin + '&destination=' + destination + '&city=' + city + '&cityd=' + cityd    callback = requests.get(api).json()['route']['transits']    minutes = []    for tra in callback:        dur = float(tra['duration'])        minutes.append(dur)        minimum_time = min(minutes)    return minimum_timedef drive(url,origin,destination,city,cityd):    api = url + 'origin=' + origin + '&destination=' + destination + '&city=' + city + '&cityd=' + cityd + '&strategy=0'    callback = requests.get(api).json()['route']['paths'][0]    duration = callback['duration']    return durationdef run(data_path,ak):    transitUrl, driveUrl = createUrl(ak)    data = pd.read_csv(data_path,engine='python')    l = []    for olng,olat,dlng,dlat,ocity,dcity in tqdm(zip(data['olng'],data['olat'],data['dlng'],                                               data['dlat'],data['ocity'],data['dcity'])):        origin = str(olng) + ',' + str(olat)        destination = str(dlng) + ',' + str(dlat)        try:            minimum_time = transit(transitUrl,origin,destination,ocity,dcity)        except:            minimum_time = None        try:            duration = drive(driveUrl,origin,destination,ocity,dcity)        except:            duration = None        l.append([ocity,dcity,olng,olat,dlng,dlat,minimum_time,duration])        result = pd.DataFrame(l,columns=['出发城市','到达城市',                                         '出发城市经度','出发城市纬度',                                         '到达城市经度','到达城市纬度',                                         '公交最小花费时间','驾车最小花费时间'])        result.to_csv('./通行时间表.csv',index=0,encoding='gbk')def main():    run('./上海城市联系表.csv',AK)if __name__ == '__main__':    main()

非常简单的流程,我们只抓取公交和驾车两种出行方式通行时间

下载数据结果如下:

既然有数据了,我们先来做一下简单的分析

我们比较同一段OD,驾车和公交两种出行方式所需时间,发现绝大多数城市,使用公交出行,耗时较短。公交在城际间主要方式是火车。可见高铁对减少出行时间有着显著作用。

再来看看驾车和公交两种交通方式出行,所花时间的分布。

可见,公交出行,绝大多地方都能在15小时内可达,而驾车就未必了

三小时可达的城市有哪些?

回到正题,我们先提取从上海出发,三小时内可达的城市列表。

import pandas as pddata = pd.read_csv('通行时间表.csv',engine='python')data_tra = data[data['公交最小花费时间']<=10800]data_drive = data[data['驾车最小花费时间']<=10800]data_tra.to_csv('公交3小时可达城市.csv',index=0,encoding='gbk')data_drive.to_csv('驾车3小时可达城市.csv',index=0,encoding='gbk')

在噼里啪啦30秒coding之后,结果出现了。

可以发现公交可达城市达到9座,而驾车可达城市为7座。去重后,总共12座城市。而驾车和公交均三小时可达的城市是苏州,无锡,常州,杭州,4座城市。公交按时间最远可达城市是马鞍山,需要3小时。驾车最远可达城市是常州,约2.7小时。

好了,该去哪,有方向了吧?最近有部电视剧叫《都挺好》的挺火的,是不是得去苏州见识下大裤衩呢?

最后,我们再来玩点炫酷的。比如画一张OD图直观感受下上海三小时降临范围

先去百度个性地图订制页面,选取或绘制一份个性地图。

把json代码复制下来,然后随意打开一份Echarts OD图实例。

首先更改stylejson样式,就用刚才复制的代码,转换底图风格。

然后通过echarts官网数据格式转换工具转换,城市坐标和OD路线。

把转换好的数据格式复制进图例代码的固定位置。当然,如果有兴趣,也可以更改一下其他参数,比如线条颜色等等。然后,浏览器打开文件。

公交三小时可达:

驾车三小时可达:

所谓有图有真相,假期郊游,哪些地方距离远,且离家近?有了这份“保姆教程“,想去哪里去哪里!
喜欢就点个关注吧~


本文作者:聚聚

编辑:蒙妹

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP