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

2024-01-08 17:20

本文主要是介绍灵魂拷问:假期郊游,哪些地方距离远,且离家近?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

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

 

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

大塞车时我跟朋友聊天:

 


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

                               用数据改变未来

                                                        用数据改变未来

这篇关于灵魂拷问:假期郊游,哪些地方距离远,且离家近?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/584230

相关文章

【生成模型系列(初级)】嵌入(Embedding)方程——自然语言处理的数学灵魂【通俗理解】

【通俗理解】嵌入(Embedding)方程——自然语言处理的数学灵魂 关键词提炼 #嵌入方程 #自然语言处理 #词向量 #机器学习 #神经网络 #向量空间模型 #Siri #Google翻译 #AlexNet 第一节:嵌入方程的类比与核心概念【尽可能通俗】 嵌入方程可以被看作是自然语言处理中的“翻译机”,它将文本中的单词或短语转换成计算机能够理解的数学形式,即向量。 正如翻译机将一种语言

五一假期出行必备的高科技手册

今天小编看了眼朋友圈,发现无节操的同学真是太多了,你们出去玩就好了,为啥要发图呢……各种晒,简直要虐死上班狗啊。 不过掐指一算,小编期盼已久的五一马上就要来了。抱着拯救同样期待假期出行同胞们的想法,小编给大家准备了一份出行旅游必备的高科技手册,助大家防火防水防(yi)搭(yue)讪( pao),下面将会开启高(zhuang)冷(BI)模式,如有雷同,纯属故意。 攻略篇 攻略在手,说走就走。

全网第一 | Flink学习面试灵魂40问答案,文末有福利!

大数据技术与架构 点击右侧关注,大数据开发领域最强公众号! 暴走大数据 点击右侧关注,暴走大数据! 来源:王知无 作者:王知无 By 暴走大数据 场景描述:这是一份Flink学习面试指北。看看你搞清楚自己的定位没有? 关键词:Flink 学

全网第一份 | Flink学习面试灵魂40问,看看你能答上来几个?

《2021年最新版大数据面试题全面开启更新》 答案将在下期给出。   概念和基础篇   简单介绍一下Flink Flink相比传统的Spark Streaming有什么区别?和Spark中的structured streaming 相比呢?Flink相比ss和storm有什么优势? Flink的组件栈是怎么样的? Flink的基础编程模型了解吗?

1--程序设计的灵魂—算法

一:算法 特定问题求解步骤的描述 在计算机中表现为指令的有限序列 算法是独立存在的一种解决问题的方法和思想 对于算法而言,语言不重要,重要的是思想 二:算法特性 输入:有0个或多个输入 输出:至少一个输出 有穷:有限步骤之后自动结束 确定:每一步都有确定的含义 可行:每一步可行 三:算法设计准则 正确性,可读性,健壮性,高性价比 程序=数据结构+算法 四:影

2014假期学习安排和感触

马上放假了,终于有一大块清净的时间留给自己了,一年多的研究生生活感慨良多,有负能量的东西,但是更多的是积极的东西。非要说个最有意义的,我觉得是学会思考了吧,该去做什么,不该去做什么,这个东西是有帮助的,那个是在走弯路。我想我们更应该把握时间!   研二上学期的半年接触了不少东西,自己现在做的东西是和FPGA有关的,一开始对Verilog or VHDL根本就没接触过,更别说这个叫做FPGA的

假期学习----iOS多线程

iOS多线程 https://juejin.cn/post/6844903566398717960 什么是GCD Grand Central Dispatch(GCD) 是 Apple 开发的一个多核编程的较新的解决方法。它主要用于优化应用程序以支持多核处理器以及其他对称多处理系统。 GCD的用处: GCD 可用于多核的并行运算;GCD 会自动利用更多的 CPU 内核(比如双核、四核);

SAT阅读哪些地方该详读?

SAT阅读中该详读的地方:首段,末段,每段开头和结尾,转折句,结论句。在这些地方可以用笔画出来或者在旁边做标记,这样利于答题。可以略读的地方:例子、形容词、副词等。不要纠结于一些陌生的单词而止步不前,因为这些单词不一定是重点内容,也可能在下文中可以推测出该词的意思。再次,对文章开始三分之一左右的内容要读得仔细一些,因为这里常常会出现重要的内容,即文章的主题。   在读完第一遍之后读文章后面的

Mac Mini爆改Mac Nano,踹进口袋里的M2,让你的灵魂震颤一会会儿

Mac Mini爆改Mac Nano,踹进口袋里的M2,让你的灵魂震颤一会会儿 今天给小伙伴们介绍一款相当好玩的爆改产品Mac Nano,不适合小白不适合垃圾佬不适合低端玩家,最适合极客、发烧友、科学怪才等高端玩家。产品的功能性通常是家常便饭,而要达到艺术层面的需要,就要付出高出几个数量级的代价了,因为那是为享受而设计的。 M2芯片的Mac Mini‌是在‌2023年1月17日‌上市的。苹

C语言-02 算法-程序的灵魂

算法-程序的灵魂 1、程序=算法+数据结构2、什么是算法3、简单的算法举例4、算法的特性5、怎样表示一个算法5.1 用自然语言表示算法5.2 用流程图表示算法5.3 三种基本结构和改进的流程图5.4 用N-S流程图表示算法5.5 用伪代码表示算法5.6 用计算机语言表示算法 6、结构化程序设计方法 1、程序=算法+数据结构     在计算机科学中,程序是由算法和数据结构组成的。算