查看原文
其他

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

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

本文作者:王玉婷,中南财经政法大学金融学院

文字编辑:李婷婷

技术总编:余术玲

爬虫俱乐部云端课程

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

我们之前的文章《定位神器——cngcode》给大家介绍了如何利用百度API获取指定中文地址的地理经纬度,我们今天郑重推荐的是同样由爬虫俱乐部倾力编写的、与之配套的cnmapsearch命令。该命令的功能为:根据关键词搜索给定经纬度周边的兴趣点,返回兴趣点的名称、中文地址、距离、标签等。 
  该命令同样需要通过百度地图开放平台申请密钥,在推文《定位神器——cngcode》中已经介绍过申请步骤,在此不再赘述。cnmapsearch作为一个外部命令,其安装命令为:

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

 2.语法 


首先,我们来看看cnmapsearch的语法,系统地了解该命令的用法,其语法如下: 

  cnmapsearch,baidukey(s1) latitude(s2) longitude(s3) keyword(s4) [options]

  该命令有四个必选项,分别是:

  • baidukey(s1):s1是在百度地图开放平台申请的访问密钥,用于获取百度地图数据的访问权限。 

  • latitude(s2):s2是指定地点的纬度

  • longitude(s3):s3是指定地点的经度

  • keyword(s4):s4是需要查找的关键词。   

  cnmapsearch另有多个可选项,其中最常用的是:

  • radius(n):用于指定搜索半径,默认为2000,单位为米。 

  • filter(s5):用于设置过滤条件,提高过滤精度。该项包括filter_type和filter_sort,前者有三个取值:hotel(宾馆)、cater(餐饮)和life(生活娱乐),后者是可选的,其取值为:distance、price等。使用时,例如写做:filter("hotel" "price")。 

  需要注意的是,除了radius的参数为数值类型外,其他选项的参数均为字符或字符型变量。 
  在实际使用中,我们常常先使用cngcode命令获取指定中文地址的地理经纬度,然后将该经纬度作为cnmapsearch命令的参数,就能非常方便地获取指定地址周边的兴趣点了。

 3.案例  


  接下来,我们将通过一个简单的案例来演示cnmapsearch的使用。 
  本文写作之时适逢中南大开学,学校规定不允许提前返校,抢张火车票又犹如鲤鱼跃龙门,找家品质高大上、价格接地气还要尽可能靠近校区的酒店收留两晚就成为返校er的头等大事。 
  这可难不倒我爬虫俱乐部“张三丰”(bushi),说干就干。 
  第一步:用cngcode获得经纬度,以“湖北省武汉市中南财经政法大学(南湖校区)”作为完整的中文地址,将返回的纬度和经度变量命名为zuel_lat和zuel_long。

clear allset obs 1 gen address = "湖北省武汉市中南财经政法大学(南湖校区)"local bdk RkwfPwjwfrn3P5XZoNKz7BScyor0nZvWcngcode,baidukey(`bdk') fulladdress(address) /// lat(zuel_lat) long(zuel_long)

运行结果如下图所示:

  第二步:用cnmapsearch命令搜索兴趣点,利用第一步中cngcode返回的经纬度作为参数,以“酒店”作为关键词搜索中南财经政法大学(南湖校区)周边1000米内的酒店。

运行结果如下图所示:

  第三步:对搜索结果进行整理,保留标签为“酒店”的观测值,删除对我们无用的变量,并按距离从近到远排序。

keep if strpos(tag,"酒店")drop centerid-zuel_lat tag telephonesort distance
运行结果如下图所示:


距离校区仅116米的帝一长租房难道就是我最终的归宿?等等!听说附近的长租房环境都不咋好?还不让日租? 
  那还是让返回的酒店都按星级排序,贵则贵矣,环境卫生还是有保证。诸君请看:
frame copy default hotel_levelcwf hotel_levellocal bdk RkwfPwjwfrn3P5XZoNKz7BScyor0nZvWcnmapsearch,baidukey(`bdk') /// latitude(zuel_lat) longitude(zuel_long) /// keyword("酒店") radius(1000) filter("hotel" "level")
keep if strpos(tag,"酒店")drop centerid-zuel_lat tag telephone
运行结果如下图所示:


星级最高的武汉金谷国际酒店距离校区仅740米,但拖着几十斤大行李的我真的一米也不想多走(实际是住不起),果然还是星级排名第二并且距离校区仅仅仅245米的武汉尚一特连锁酒店(光谷财大店)更合我心意。既然如此,决定了,去武汉尚一特连锁酒店(光谷财大店)预定吧(真的没有恰饭!!)。

  o(╥﹏╥)o我还是随便住个小旅馆吧…





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

自然语言分析——利用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,傻傻分不清楚?

用WordStat看中国日报新闻(二)

关于我们


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

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


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

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