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

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

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

 

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

大塞车时我跟朋友聊天:

 


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

 

 

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

公交三小时可达:

 

驾车三小时可达:

 

所谓有图有真相,假期郊游,哪些地方距离远,且离家近?有了这份“保姆教程“,想去哪里去哪里!


                       关注“大鹏教你玩数据”后台回复【42】,可以获取本文源代码和数据

                                                         本文作者:聚聚

                                                             编辑:蒙妹

                                                           扫码关注我们

                                   关注送狗子表情包一张&精选python资料一份

                               用数据改变未来

                                                        用数据改变未来

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值