查看原文
其他

教你用Stata爬取全国疫情风险地区数据,原来这么简单!

爬虫俱乐部 Stata and Python数据分析 2023-01-01

本文作者:倪加鑫,安徽财经大学

本文编辑:智淼

技术总编:方一卓


Stata&Python云端课程来啦!

      好消息好消息,爬虫俱乐部开辟小鹅通战场!!爬虫俱乐部隆重推出小鹅通网络课程,将Stata基础课程Stata进阶课程Python课程都上传至小鹅通平台,欢迎大家多多支持订阅!报名课程即可加入答疑群,对报名有任何疑问欢迎在公众号后台留言哦。如需了解详情,可以通过课程链接(https://appbqiqpzi66527.h5.xiaoeknow.com/homepage/10)或课程二维码进行访问哦~

引言

马上到了9月1号开学季了,我们将要迎来新学期的校园生活,越来越多的学生开始准备踏上返校的旅途,多个高校陆续开始统计学生所居住地风险规划,以便确定学生是否能够正常返校。现在全国疫情总体情况如何?为便于大家及时获取全国、全省及目前所在地疫情形势变化,丁香园综合中国国家卫生健康委员会、中国疾病预防控制中心,以及全国大部分省市医疗卫生机构的权威发布渠道,建立全国疫情风险地区汇总页面。为此,小编这次就带领大家爬取全国疫情风险区域划分数据供大家学习交流~

01

首先,我们进入此次爬取的网站,丁香园全国疫情风险地区汇总(https://ncov.dxy.cn/ncovh5/view/pneumonia_risks?from=dxy&link=&share=&source=),但这个网页返回的源代码与和页面上看到的不一样,我们需要进入谷歌的开发者模式,寻找我们所需要数据的真实网页链接。如下图所示的链接,这就是储存全国疫情风险地区汇总数据的url了。为了后续使用方便,单击右键把url link复制下来(https://file1.dxycdn.com/2021/0202/196/1680100273140422643-135.json?t=27689095)。此时,我们利用谷歌浏览器检查工具中Preview功能查看我们需要高风险地区和中风险地区的数据,其中的"dangerLevel"中包含了全国风险地区等级汇总信息 ,“areaName”、“cityName”、“provinceName”三个中的信息就是我们所需要的风险区域、城市以及省份信息。其次,我们发现该网页的请求方式是GET,这样我们就可以大致确定自己的思路和方法。体来说1. 我可以使用copy命令抓取该网页的源代码,再使用fileread命令读取copy下来的网页源代码。2. 利用split函数进行拆分变量,再使用sxpose函数将变量转置。3. 利用正则表达式提取所需要的信息。最后,确定了思路和方法后,直接打开Stata软件进行操作,具体爬代码如下:
1clear all
2set maxvar 50000 //因为后续拆分变量时候,变量较多,所以加上该设置,为了程序能顺利运行
3copy "https://file1.dxycdn.com/2021/0202/196/1680100273140422643-135.json?t=27689095" temp.txt,replace
4set obs 1 
5gen v = fileread("temp.txt")
6split v,p(`"},{"')
7drop v
8sxpose,clear
9gen dangerLevel = ustrregexs(1) if ustrregexm(_var1, `"dangerLevel":(.+?),"'
) //风险等级
10gen areaName = ustrregexs(1) if ustrregexm(_var1, `"areaName":"(.+?)","') //风险区域名称
11gen cityName = ustrregexs(1) if ustrregexm(_var1, `"
cityName":"(.+?)""') //所属城市
12gen provinceName = ustrregexs(1) if ustrregexm(_var1, `"provinceName":"(.+?)""'
) //所在省份
13*填补省份空缺值
14replace provinceName = "." if provinceName == ""
15    forvalues i = `=_N'(-1)2 {
16            if !index(provinceName[`i'
], ".") & index(provinceName[`i'-1], ".") {
17            replace provinceName =  provinceName[`i'
in `=`i' - 1'
18        }
19
20        }
21
22*高风险(1)、低风险地区(2)
23replace dangerLevel = "." if dangerLevel == ""
24    forvalues i = 1(1)`=_N-1' {
25            disp `i'

26            disp `i' + 1
27            if !index(dangerLevel[`i'
], ".") & index(dangerLevel[`i'+1], ".") {
28            replace dangerLevel = dangerLevel[`i'
in `=`i' + 1'
29        }
30
31        }
32gen dangerLevel1 = "高风险地区" if dangerLevel == "1"
33replace dangerLevel1 = "低风险地区" if dangerLevel == "2"
34drop _var1
35compress
36save 疫情风险区域,replace

02

最后,爬取到全国风险区域规划数据,如下图所示。

作为武汉字符串数据科技有限公司的一名暑期实习生,很开心能在老师的带领下完成本篇技术推文。在暑假实习培训后,我在数据技术方面实现了从无到有的跨越,从最开始的“不会安装Stata”到现在的“数据自由”,公司给了我很大帮助。实习期间,根据老师所布置的案例作业,进一步巩固了课程上学到的知识点,并在老师的辅导下,结合网课知识完成作业。另外,老师也会全天答疑,有问必答,在点播答案时,老师更喜欢激发我们自己的主动性,让我们不再拘泥于课程上的知识点以及处理方法,极大地帮助了我们提高动手能力和思考能力。最后,非常感谢武汉字符串数据科技有限公司提供的这次实习机会以及实习生导师对我的悉心指导,这次实习经历为我之后撰写论文与处理数据奠定了坚实的基础,希望公司的实习项目能帮助到更多想学习数据技术的同学。

END

重磅福利!为了更好地服务各位同学的研究,爬虫俱乐部将在小鹅通平台上持续提供金融研究所需要的各类指标,包括上市公司十大股东、股价崩盘、投资效率、融资约束、企业避税、分析师跟踪、净资产收益率、资产回报率、国际四大审计、托宾Q值、第一大股东持股比例、账面市值比、沪深A股上市公司研究常用控制变量等一系列深加工数据,基于各交易所信息披露的数据利用Stata在实现数据实时更新的同时还将不断上线更多的数据指标。我们以最前沿的数据处理技术、最好的服务质量、最大的诚意望能助力大家的研究工作!相关数据链接,请大家访问:(https://appbqiqpzi66527.h5.xiaoeknow.com/homepage/10)或扫描二维码:


最后,我们为大家揭秘雪球网(https://xueqiu.com/)最新所展示的沪深证券和港股关注人数增长Top10。




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





往期推文推荐【数据结构】集合的使用方法      Stata爬取七普人口数据

       浅析Python的序列化与反序列化

     爬虫俱乐部的精彩答疑--爬虫为何失败?

       利用Stata批量制作学生证     【数据分析-入门】科学计算基本库—Numpy的简单使用      Stata绘图系列——玩转绘图通用选项之图例     【基础篇】数据类型介绍——list、tuple和range对象

覆盖北交所的“cnstock”复工了!

高考热度大数据爬虫——谁才是院校顶流

跨框架数据操作

      河南大学经济学院2022年Stata数据处理与爬虫技术开班仪式顺利召开

爬虫俱乐部的精彩答疑——local function

爬虫俱乐部精彩答疑——Python中的三种文件读取方法爬虫俱乐部的精彩答疑--认真仔细方能写出好程序
爬虫俱乐部Python精彩答疑——更换Jupyter Notebook浏览器及dropna()参数详解
       爬虫俱乐部的精彩答疑--如何打开Excel中扩展名与文件源码不符的文件

解锁《梦华录》之东京繁华生活

爬虫俱乐部的精彩答疑——DOS命令

爬虫俱乐部的精彩答疑之换行问题


关于我们 


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

   武汉字符串数据科技有限公司一直为广大用户提供数据采集和分析的服务工作,如果您有这方面的需求,请发邮件到statatraining@163.com,或者直接联系我们的数据中台总工程司海涛先生,电话:18203668525,wechat: super4ht。海涛先生曾长期在香港大学从事研究工作,现为知名985大学的博士生,爬虫俱乐部网络爬虫技术和正则表达式的课程负责人。



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

投稿邮箱:statatraining@163.com投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里
为作者署名,并有赏金分成。

2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可

以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。









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

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