查看原文
其他

insheetjson:stata如何读取含有中文的json?(2)

华南师大黎嘉辉 Stata and Python数据分析 2022-03-15

爬虫俱乐部之前推出的线下培训,得到了各位老师的一致好评。为了更加方便大家学习,满足更多Stata用户的学习需求,爬虫俱乐部已隆重推出在线直播课程,请大家奔走相告!课程报名链接:https://ke.qq.com/course/286526#tuin=9735fd2d,详情见推文《爬虫俱乐部隆重推出网上直播课程第一季》

有问题,不要怕!点击推文底部“阅读原文”下载爬虫俱乐部用户问题登记表并按要求填写后发送至邮箱statatraining@163.com,我们会及时为您解答哟~

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

好消息:爬虫俱乐部即将推出研究助理供需平台,如果您需要招聘研究助理(Research Assistant or Research Associate),可以将您的需求通过我们的公众号发布;如果您想成为一个RA,可以将您的简历发给我们,进入我们的研究助理数据库。帮我们写优质的推文可以提升您被知名教授雇用的胜算呀!

上一期推文介绍了stata如何查看和读取json格式的数据,今天来继续介绍insheetjson命令读取json数据的其他方式。

一、多级json数据的读取

以美国阳光基金会的这个投票数据为例,数据下载链接:http://unitedstates.sunlightfoundation.com/congress/data/113.zip。我们使用的是压缩文件中113.zip\votes\2014\h1文件夹下的data.json数据。

这个数据可分为三级结构:第一级中包括数据的类型、日期、来源等信息,第二级在vote下,包含Not Voting与Present两个数据,第三级Note Voting与Present下包括投票人姓名、id、党派与州的信息。

如果以table方式读取数据,只需要在table中填入vote Present就可以选择vote下的Present(vote与Present之间有一个空格),空格在这里表示的是下一级数据。

多级json数据的读取

clear

gen str80 id = ""

gen str80 state = ""

gen str80 display_name = ""

gen str80 party = ""

insheetjson id state display_name party using "data.json", ///

    table("votes Present") col("id" "state" "display_name" "party")

compress

二、将第一级数据的键和值保存为返回值

一般在json数据第一级中都介绍了数据的基本信息,这个数据也不例外。insheetjson命令的topscalars选项可以将第一级数据中的键和值保存在r()中。

insheetjson id state display_name party using "data.json", ///

    table("votes Present") col("id" "state" "display_name" "party") topscalars

ret li

三、如果索引中含有空格怎么办?

在上一小节中降到了table中的空格指的是下级数据,那么如果我想选择vote下的Not voting中的数据该怎么办?直接读取的话程序会报错。

的确不能这么办,无论如何也无法改变命令中空格的含义。那么我们可以直接修改json文件的内容,将“Not voting”修改为“Not_voting”。利用之前推文提到的subinfile命令就可以完成此操作。

subinfile data.json , from("Not Voting") to("Not_Voting") save(data1.json) replace

clear

gen str80 id = ""

gen str80 state = ""

gen str80 display_name = ""

gen str80 party = ""

insheetjson id state display_name party using "data1.json", ///

    table("votes Not_Voting") col("id" "state" "display_name" "party")

compress

四、样本追加

现在我们考虑将“Not_voting”与“Present”的信息合并在一起。先导入“Not_voting”的信息。

样本追加

clear

gen str80 id = ""

gen str80 state = ""

gen str80 display_name = ""

gen str80 party = ""

insheetjson id state display_name party using "data1.json", ///

    table("votes Not_Voting") col("id" "state" "display_name" "party")

gen statu = "Not_Voting"

insheetjson中有一个选项offset(#)可以帮助我们完成追加变量的操作,该选项意为“从第几行后添加数据”。在offset中填入`c(N)’就可以在当前样本后追加数据,c(N)为系统返回值,记录了当前样本数。

insheetjson id state display_name party using "data.json", ///

    table("votes Present") col("id" "state" "display_name" "party") offset(`c(N)')

replace statu = "Present" if statu == ""

compress

大功告成!

注:此推文中的图片及封面(除操作部分的)均来源于网络!如有雷同,纯属巧合!以上就是今天给大家分享的内容了,说得好就赏个铜板呗!有钱的捧个钱场,有人的捧个人场~。另外,我们开通了苹果手机打赏通道,只要扫描下方的二维码,就可以打赏啦!

应广大粉丝要求,爬虫俱乐部的推文公众号打赏功能可以开发票啦,累计打赏超过1000元我们即可给您开具发票,发票类别为“咨询费”。用心做事,只为做您更贴心的小爬虫。第一批发票已经寄到各位小主的手中,大家快来给小爬虫打赏呀~

-文字编辑:吴晓蔓-

-技术总编:刘贝贝-

往期推文推荐:

1.爬虫俱乐部新版块--和我们一起学习Python

2.hello,MySQL--Stata连接MySQL数据库

3.hello,MySQL--odbcload读取MySQL数据

4.再爬俱乐部网站,推文目录大放送!

5.用Stata生成二维码—我的心思你来扫

6.Hello,MySQL-odbc exec查询与更新

7.Python第一天

8.Python第二天

9.事件研究大放送

10.爬虫俱乐部隆重推出网上直播课程第一季



关于我们

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

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

投稿邮箱:statatraining@163.com

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

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

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