国家统计局国家数据结构

这里研究一下国家统计局网站的国家数据结构,主要目的是想要做一个工具来从这里自动获取一些数据。

国家数据的地址在这里

其中数据都是有json格式传下来的。

获取数据的基本格式为:

http://data.stats.gov.cn/easyquery.htm?m=QueryData&dbcode=hgnd&rowcode=zb&colcode=sj&wds=[]&dfwds=[{%22wdcode%22%3A%22zb%22%2C%22valuecode%22%3A%22A0201%22}]&k1=1448004571477

其中参数的意思估计为

  • m  固定的,估计不用变为 QueryData
  • dbcode 是数据库的名字。 hgnd为年度数据,hgjd为季度数据,hgyd为月度数据
  • rowcode  行代码,这里是zb,估计不需要变   zb(指标)
  • colcode  列代码,这里是sj,估计不需要变   sj(数据)
  • wds=[]  不变
  • dfwds 这个是关键,上面的内容为[{“wdcode”:”zb”,”valuecode”:”A0201″}] , 其中的valuecode为getTree接口获取的分类数据代码
  • kl 当前时间

在R里面用可以用rjson包的fromJSON函数来获取json,并转化为R的list。获得的json结构比较大,怎样将这个json结构的格式变得更好看,我查了下tidy json。 没有找到比较和是的工具,后来发现,其实在将json数据转化为R结构后,利用R的str函数,即可以获得比较清楚的层次结构。

代码如下:

library(rjson)

url="http://data.stats.gov.cn/easyquery.htm?m=QueryData&dbcode=hgnd&rowcode=zb&colcode=sj&wds=[]&dfwds=[{%22wdcode%22%3A%22zb%22%2C%22valuecode%22%3A%22A0201%22}]&k1=1448004571477"
jj=fromJSON(file=url)
str(jj)

输出的结果为:

List of 2
 $ returncode: num 200  #返回结果
 $ returndata:List of 2      #2个大的list
  ..$ datanodes:List of 60   #60个数据
  .. ..$ :List of 3       #每个数据的结构,由3部分组成
  .. .. ..$ code: chr "zb.A020101_sj.2014"      #数据的代码  zb.<>_sj.<>    指标 _ 时间
  .. .. ..$ data:List of 4    #数据值
  .. .. .. ..$ data    : num 634043
  .. .. .. ..$ dotcount: num 1
  .. .. .. ..$ hasdata : logi TRUE
  .. .. .. ..$ strdata : chr "634043.4"
  .. .. ..$ wds :List of 2   #数据属性
  .. .. .. ..$ :List of 2
  .. .. .. .. ..$ valuecode: chr "A020101"
  .. .. .. .. ..$ wdcode   : chr "zb"
  .. .. .. ..$ :List of 2
  .. .. .. .. ..$ valuecode: chr "2014"
  .. .. .. .. ..$ wdcode   : chr "sj"
  .. ..$ :List of 3   #第二个数据
  .. .. ..$ code: chr "zb.A020101_sj.2013"
  .. .. ..$ data:List of 4
  .. .. .. ..$ data    : num 583197
  .. .. .. ..$ dotcount: num 1
  .. .. .. ..$ hasdata : logi TRUE
  .. .. .. ..$ strdata : chr "583196.7"
  .. .. ..$ wds :List of 2
  .. .. .. ..$ :List of 2
  .. .. .. .. ..$ valuecode: chr "A020101"
  .. .. .. .. ..$ wdcode   : chr "zb"
  .. .. .. ..$ :List of 2
  .. .. .. .. ..$ valuecode: chr "2013"
  .. .. .. .. ..$ wdcode   : chr "sj"
。。。。
  .. ..$ :List of 3  #第n个数据
  .. .. ..$ code: chr "zb.A020102_sj.2014"    #这里的数据第一个属性(zb)已经变了
  .. .. ..$ data:List of 4
  .. .. .. ..$ data    : num 636139
  .. .. .. ..$ dotcount: num 1
  .. .. .. ..$ hasdata : logi TRUE
  .. .. .. ..$ strdata : chr "636138.7"
  .. .. ..$ wds :List of 2
  .. .. .. ..$ :List of 2
  .. .. .. .. ..$ valuecode: chr "A020102"
  .. .. .. .. ..$ wdcode   : chr "zb"
  .. .. .. ..$ :List of 2
  .. .. .. .. ..$ valuecode: chr "2014"
  .. .. .. .. ..$ wdcode   : chr "sj"
...
  ..$ wdnodes  :List of 2   #前面数据的结构描述
  .. ..$ :List of 3   #数据行属性---指标 , 共有6个
  .. .. ..$ nodes :List of 6
  .. .. .. ..$ :List of 11
  .. .. .. .. ..$ cname     : chr "国民总收入"
  .. .. .. .. ..$ code      : chr "A020101"
  .. .. .. .. ..$ dotcount  : num 1
  .. .. .. .. ..$ exp       : chr "国民总收入(GNI)即国民生产总值,指一个国家(或地区)所有常住单位在一定时期内收入初次分配的最终结果。一国常住单位从事生产活动所创"| __truncated__
  .. .. .. .. ..$ ifshowcode: logi FALSE
  .. .. .. .. ..$ memo      : chr "1980年以后国民总收入与国内生产总值的差额为国外净要素收入。||三次产业分类依据国家统计局2012年制定的《三次产业划分规定》。第一产"| __truncated__
  .. .. .. .. ..$ name      : chr "国民总收入"
  .. .. .. .. ..$ nodesort  : chr "1"
  .. .. .. .. ..$ sortcode  : num 227
  .. .. .. .. ..$ tag       : chr ""
  .. .. .. .. ..$ unit      : chr "亿元"
....
  .. .. ..$ wdcode: chr "zb"
  .. .. ..$ wdname: chr "指标"
....
  .. ..$ :List of 3  #数据列属性 ---时间 , 共有10个 , 这二者相乘即得上面的60个数据
  .. .. ..$ nodes :List of 10
  .. .. .. ..$ :List of 11
  .. .. .. .. ..$ cname     : chr "2014年"
  .. .. .. .. ..$ code      : chr "2014"
  .. .. .. .. ..$ dotcount  : num 4
  .. .. .. .. ..$ exp       : chr ""
  .. .. .. .. ..$ ifshowcode: logi FALSE
  .. .. .. .. ..$ memo      : chr ""
  .. .. .. .. ..$ name      : chr "2014年"
  .. .. .. .. ..$ nodesort  : chr "1"
  .. .. .. .. ..$ sortcode  : num 3
  .. .. .. .. ..$ tag       : chr ""
  .. .. .. .. ..$ unit      : chr ""
....
  .. .. ..$ wdcode: chr "sj"
  .. .. ..$ wdname: chr "时间"

另外,获取tree结构的接口为:
请求方式: post
url: http://data.stats.gov.cn/easyquery.htm
查询串: id=zb&dbcode=hgnd&wdcode=zb&m=getTree
当id为 zb时,获得根节点下的第一层节点,拿到个结点的id后,使用的到的id,可继续得到子树。
一下是第一层部分子树及ID:

List of 28
 $ :List of 6
  ..$ dbcode  : chr "hgnd"
  ..$ id      : chr "A01"
  ..$ isParent: logi TRUE
  ..$ name    : chr "综合"
  ..$ pid     : chr ""
  ..$ wdcode  : chr "zb"
 $ :List of 6
  ..$ dbcode  : chr "hgnd"
  ..$ id      : chr "A02"
  ..$ isParent: logi TRUE
  ..$ name    : chr "国民经济核算"
  ..$ pid     : chr ""
  ..$ wdcode  : chr "zb"
 $ :List of 6
  ..$ dbcode  : chr "hgnd"
  ..$ id      : chr "A03"
  ..$ isParent: logi TRUE
  ..$ name    : chr "人口"
  ..$ pid     : chr ""
  ..$ wdcode  : chr "zb"
 $ :List of 6
  ..$ dbcode  : chr "hgnd"
  ..$ id      : chr "A04"
  ..$ isParent: logi TRUE
  ..$ name    : chr "就业人员和工资"
  ..$ pid     : chr ""
  ..$ wdcode  : chr "zb"
...

拿到这些id以后,可以用子节点的id来替换上面的zb,得到子树的子树。如果某节点的isParent值为False, 则表示此节点没有子树了。在没有子树的情况下,调用前面的接口,可获得对应的数据。



本文地址: http://www.bagualu.net/wordpress/archives/4973 转载请注明




发表评论

电子邮件地址不会被公开。 必填项已用*标注