查看原文
其他

爬虫俱乐部新命令---cntraveltime帮您计算两地之间旅行时间

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

本文作者:杨长青

本文编辑:张语盈

技术总编:薛   原

有问题,不要怕!访问 

http://www.wuhanstring.com/uploads/5_aboutus/爬虫俱乐部-用户问题登记表.docx (复制到浏览器中)下载爬虫俱乐部用户问题登记表并按要求填写后发送至邮箱statatraining@163.com,我们会及时为您解答哟~

爬虫俱乐部的github主站正式上线了!我们的网站地址是:https://stata-club.github.io,粉丝们可以通过该网站访问过去的推文哟~

爬虫俱乐部隆重推出数据定制及处理业务,您有任何网页数据获取及处理方面的难题,请发邮件至我们邮箱statatraining@163.com,届时会有俱乐部高级会员为您排忧解难!

好消息!好消息!爬虫俱乐部近日又推出新命令cntraveltime。该命令和之前发布的chinagcodechinaaddress一样都是基于百度地图API接口。平时我们计算距离一般使用球面距离,但是这个距离没有考虑两点之间的交通状况、路况等,不足以完全刻画两点之间的“远近”。cntraveltime恰巧可以克服这个问题,通过使用百度地图API借口获取指定两个坐标点之间出行经过距离,旅行时间以及出行路线,使两点之间的“距离”具有可比性。

前期准备 

chinagcodechinaaddress命令一样,使用该命令也需要在百度地图开放平台(http://lbsyun.baidu.com 申请地图API密钥。cntraveltime获取的所有信息均来自百度地图。

随后通过 ssc install cntraveltime,replace完成命令的安装和下载,该命令只能Stata14及更高版本中使用。

语法介绍与示例 

首先我们help cntraveltime查看该命令的语法结构和主要选项:

其中:

baidukey(string)填入在百度开放平台(http://lbsyun.baidu.com)申请的地API密钥

startlat(varname),startlng(varname):分别填入起始点纬度和经度信息。

endlat(varname)endlng(varname):分别填入终点纬度和经度信息。

比如我们想知道中南财经政法大学到华中科技大学,华中科技大学到上海财经大学,西南财经大学到北京大学之间的出行距离和出行时间,就可以通过cntraveltime结合chinagcode快速得到,程序如下:

clear
input str60 出发点 str60 终点"湖北省武汉市南湖大道中南财经政法大学" "湖北省武汉市华中科技大学""湖北省武汉市华中科技大学" "上海市上海财经大学""四川省成都市西南财经大学" "北京市北京大学"end
chinagcode,baidukey(ttUsHhNcOwzD6tz3Ic4HQMAKQyupLh) fulladdress(出发点) lat(startlat) long(startlong)
chinagcode,baidukey(ttUsHhNcOwzD6tz3Ic4HQMAKQyupLh) fulladdress(终点) lat(endlat) long(endlong) //通过chinagcode地名转换为经纬度,chinagcode需要用户自己安装。
cntraveltime,baidukey(ttUsHhNcOwzD6tz3Ic4HQMAKQyupLh) /// 填入密钥,这里是伪密钥钥
startlat(startlat) startlng(startlong) endlat(endlat) endlng(endlong)
list 出发点 终点 distance duration //列出起点和终点名称以及出行距离和时间

结果如下图所示,distance代表出行距离(单位m),duration代表出行时间(单位秒)。由于默认的出行方式为公交,此时的距离未将火车或飞机的行驶距离包含在内,仅包括步行和公交的距离,所以会比实际距离要小很多。

此外,cntraveltime命令还提供了丰富的选项,可以根据个人偏好选择不同的出行方式以及出行路线,选项如下:

[1] instruction:显示详细的出行路线信息,默认不显示。

[2] transport(string)选择出行方式,可以选择buscarbike。默认是transport(bus)

[3] intercity():当起点和终点不在同一城市、出行方式为公交时,可以根据个人偏好,选择合适的出行方式。括号内需要填入两个数字:第一个数字表示优先级要求;第二个数字表示运输方式。第一个数字为0时表示尽可能快,为1时表示尽早开始,为2时表示尽可能的便宜。第二个数字为0时指定火车,为1时指定飞机,为2时指定公共汽车

[4] tactic(real):当起点和终点在同一城市,可以通过该选项选择合适的出行策略

当出行方式为公交时,tactic()有如下选择:

0默认推荐路线     1:转移最少      2:步行最少

         3:没有地铁            4:时间最短      5:选择地铁

当出行方式为驾车时,tactic()有如下选择:

0:默认路线            3:避免高速行驶          4:高速优先

         5:避免堵塞路段     6:避免收费站              7:同时满足45

8:同时满足34    9:同时满足46          10:同时满足68

11:同时满足3号和6

当出行方式为骑车时,tactic()有如下选择:

         0:默认为普通自行车     1:电动自行车

有了这些选项,我们可以对上面的例子进行进一步的探讨,比如可以指定出行方式为驾车并显示具体的出行路线。程序如下:

clear
input str60 出发点 str60 终点"湖北省武汉市南湖大道中南财经政法大学" "湖北省武汉市华中科技大学""湖北省武汉市华中科技大学" "上海市上海财经大学""四川省成都市西南财经大学" "北京市北京大学"end
chinagcode,baidukey(ttUsHhNcOwzD6tz3Ic4HQMAKQyupLh) fulladdress(出发点) lat(startlat) long(startlong)
chinagcode,baidukey(ttUsHhNcOwzD6tz3Ic4HQMAKQyupLh) fulladdress(终点) lat(endlat) long(endlong) //通过chinagcode地名转换为经纬度
cntraveltime,baidukey(ttUsHhNcOwzD6tz3Ic4HQMAKQyupLh) /// 填入密钥,这里是伪钥
startlat(startlat) startlng(startlong) endlat(endlat) endlng(endlong) transport(car) instruction //出行方式选择驾车,显示出行路线
list 出发点 终点 distance duration //列出起点和终点名称以及出行距离和时间
list instruction //列出出行路线

结果如下,驾车从西财到北大要1792公里,需要花费将近23个小时,由于驾车计算的是实际的行驶距离,所以数值会比默认情况大很多,同样的相比火车需要花费更多的时间。

下图列出了具体的出行路线:

cntraveltime命令介绍到这就结束了,如果各位读者在日常使用中遇到问题,可通过留言或者发邮件与我们联系,我们会竭诚为您解答。

爬虫俱乐部是您身边的科研助手,能够为您在数据处理实证研究中提供帮助。承蒙近四万粉丝的支持与厚爱,我们在腾讯课堂推出了网络视频课程,专注于数据整理、网络爬虫、循环命令编制和结果输出…李老师及团队精彩地讲解,深入浅出,注重案例与实战,让您更加快速高效地掌握Stata技巧及数据处理的精髓,而且可以无限次重复观看,在原有课程基础上已上传了全新的内容!百分百好评,简单易学,一个月让您从入门到精通。绝对物超所值!观看学习网址:

https://ke.qq.com/course/286526?tuin=1b60b462,

敬请关注!

对爬虫俱乐部的推文累计打赏超过1000元我们即可给您开具发票,发票类别为“咨询费”。用心做事,只为做您更贴心的小爬虫!

往期推文推荐

关于我们

微信公众号“爬虫俱乐部”分享实用的stata命令,欢迎转载、打赏。爬虫俱乐部是由李春涛教授领导下的研究生及本科生组成的大数据分析和数据挖掘团队。

此外,欢迎大家踊跃投稿,介绍一些关于stata的数据处理和分析技巧。

投稿邮箱:statatraining@163.com

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






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

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