查看原文
其他

轻松获取通行数据——cntraveltime命令介绍

爬虫俱乐部 Stata and Python数据分析 2022-03-15

本文作者:任   哲,中南财经政法大学经济学院

文字编辑:王玉婷 技术总编:余术玲

爬虫俱乐部云端课程

  爬虫俱乐部于2020年暑期在线上举办的Stata与Python编程技术训练营和Stata数据分析法律与制度专题训练营在不久前已经圆满结束啦~应广大学员需求,我们的课程现已在腾讯课堂全面上线,且继续提供答疑服务。现在关注公众号并在朋友圈转发推文《来腾讯课堂学Stata和Python啦》或《8月Stata数据分析法律与制度专场来啦!》,即可获得600元课程优惠券,集赞50个再领200元课程优惠券!(截图发至本公众号后台领取)原价2400元的课程,现在只要1600元!     

导读

  当需要获得两地之间的通行时间、通行距离时,你会怎么做呢?
  大家的第一反应往往是手动打开百度地图→输入起点和终点→得到通行数据。

  但是,生活在计算机大发展的今天,我们拥有拒绝手动操作的权利,可以把这些繁琐、枯燥的任务交给计算机这个没有感情,不知疲倦的数据处理机器。
  为了达到这个目的,今天给大家介绍一个超级方便的神器——
cntraveltime命令,并且会是全新版本哦!

一、命令安装

  爬虫俱乐部已经更新了cntraveltime命令,该命令只能在Stata14及更高版本中使用。请注意,目前通过ssc install cntraveltime命令无法安装最新版本,如果想使用最新版本,请务必按以下流程操作。

local url https://stata-club-1257787903.cos.ap-chengdu.
net install cntraveltime,from("`url'myqcloud.com/cntraveltime/") replace

 出现下图所示结果,即代表安装成功:

二、命令语法

cntraveltime命令的语法如下:

cntraveltime, baidukey() startlat() startlng() endlat() endlng() [mode() ///
tactic() intercitytype() intercitytactic() detail]

  该命令常用选项如下:
1.baidukey()
  
cntraveltime命令是通过使用百度地图API接口获得两个指定坐标点之间的通行距离和通行时间的。而baidukey()就是输入调用百度地图API的密钥。申请密钥很简单,只需要打开百度地图开放平台,并进行下面操作即可:

2.startlat()等命令指定经纬度信息
  获取了密钥之后,我们要在startlat(varname)、endlat(varname)分别输入起点和终点的纬度信息;在startlng(varname)、endlng(varname)输入起点和终点的经度信息。如果只有中文地址,那么请先根据中文地址通过
cngcode命令获取对应的经纬度信息。

3.mode()
  mode()指定出行选择的交通模式,该选项指定的交通模式一共有3种,分别为public公共交通出行car汽车出行bike骑车出行,如果不设定mode(),则默认为public模式。

4.tactic()
  当给定的两个位置在同一城市时,可以通过tactic()选项选择合适的出行策略。
  当出行方式为public公共交通时,tactic()有如下选择:
  0:默认推荐路线;1:转换乘最少;2:步行最少 ;
  3:没有地铁;4:时间最短 ;5:选择地铁

  当出行方式为car汽车出行时,tactic()有如下选择:
  0:默认路线;3:避免高速行驶;4:高速优先;
  5:避免堵塞路段;6:避免收费站;7:同时满足4和5;
  8:同时满足3和4;9:同时满足4和6;
  10:同时满足6和8;11:同时满足3号和6号。

  当出行方式为骑车时,tactic()有如下选择:
  0:默认为普通自行车;1:电动自行车。

5.intercitytype()和intercitytactic()
  
当给定的两个位置不在同一城市,并且mode()选项指定为 public的时候,可以使用intercitytype()选项来指定交通工具,使用intercitytactic()选项来指定出行策略。

intercitytype()选项中有两个数字0和1可供选择,其中0表示火车(高铁) ,1表示飞机不设置该选项时默认为0。

  intercitytactic()选项中有三个数字0、1和2可供选择,其中0表示用时最短 ,1表示尽早出发 ,2表示尽可能便宜。不设置该选项时默认为0。

6.detail
  
detail选项可以显示所选路线的详细信息,不使用本选项默认不显示。

三、实例操作

 首先,我们使用input输入一些地址:

clear all
input strL 起点 strL 终点
"湖北省武汉市中南财经政法大学(首义校区)" "江苏省南京市东南大学"
"湖北省武汉市中南财经政法大学(南湖校区)" "陕西省西安市西北大学"
end

  接着使用cngcode命令得到起点和终点经纬度信息:

//将bdk定义为您申请到的密钥
local bdk xxxxxxxxxxxxxxxxxxxx

cngcode, baidukey(`bdk') fulladdress(起点) lat(start_lat) long(start_lng)
cngcode, baidukey(`bdk') fulladdress(终点) lat(end_lat) long(end_lng)
得到具体结果如下图所示:

  把得到的经纬度放入到cntraveltime命令之中,并选择汽车出行car,避免堵塞路段的出行方案:

cntraveltime, baidukey(`bdk') startlat(start_lat) startlng(start_lng) endlat(end_lat) endlng(end_lng) mode("car") tactic(5)

list 起点 终点 distance duration

 得到结果如下:

 其中distance代表两个位置之间的通行距离(单位:米);duration代表两个位置之间的通行时间(单位:秒)。这样我们就知道了从中南财经政法大学(首义校区)开车前往东南大学的距离约为545.8公里,用时约8小时(28704秒);从中南财经政法大学(南湖校区)开车前往西北大学的距离约为828.2公里,用时约10.9小时(39221秒)。

  现在我们想要选择火车(高铁),用时最短的出行方案,首先需要将mode选项更改为public模式,然后分别添加intercitytype(0)intercitytactic(0)选项进行调整,并且通过detail命令获取出行路线:

cntraveltime, baidukey(`bdk') startlat(startlat) startlng(startlng) endlat(endlat) endlng(endlng) mode("public") intercitytype(0) intercitytactic(0) detail
list 起点 终点 distance duration
list detail

 得到结果如下:

  可以直观看到,还是相同的起点和终点,cntraveltime命令在乘坐火车(高铁)和用时最短的选项下,获取的通行距离和通行时间都明显减少了。而从detail选项的结果来看,在前往东南大学的出行路线里也有乘坐G1722到达南京南站的信息,这说明交通工具确实变成了高铁。

  怎么样?cntraveltime命令是不是既强大,又实用呢?

  快快拿走这个超级好用的命令,亲自动手试试吧!






对我们的推文累计打赏超过1000元,我们即可给您开具发票,发票类别为“咨询费”。用心做事,不负您的支持!往期推文推荐

让Stata完美牵手中国地图之cnmapsearch

自然语言分析——利用NLTK进行文本预处理

寻找B站的最爱--8月B站全站榜爬虫

cnaddress命令——实现经纬度转换为中文地址

定位神器——cngcode

Python入门—Spyder的简单使用

Jupyter Notebook 的这些tips你了解吗?给变量名换马甲之rename命令

追踪命令set trace on——解你燃眉之急

爬虫大杀器 | “手把手”教你配置Selenium

小白必看!Anaconda安装全攻略

数据类型转换之destring和tostring命令

mvencode和mvdecode——打开缺失值与特定数值转换大门的钥匙优雅的map()Python实现Excel中vlookup函数功能Stata实现Excel中vlookup函数功能gen与egen,傻傻分不清楚?关于我们


微信公众号“Stata and Python数据分析”分享实用的stata、python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。

此外,欢迎大家踊跃投稿,介绍一些关于stata和python的数据处理和分析技巧。投稿邮箱:statatraining@163.com投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存