rstatscn, 国家数据库的R接口

简介

rstatscn是一个R包,它提供了一些访问中国国家数据的一些方便的接口。可以在R中获取想要的国家数据,比如中国的每年人口数据,各省的GDP数据,各种教育数据等。安装方法

install.packages('rstatscn')

github page: https://github.com/jiang-hang/rstatscn

最近版本

  • 2016.7.21 版本 1.1.1

    修复行名重复的问题,如果你碰到这个问题

    Error in row.names<-.data.frame(*tmp*, value = value) : duplicate ‘row.names’ are not allowed

    请首先调用statscnRowNamePrefix(),然后再查询数据库,这样在生成的dataframe中行的名字前会添加一个行号。

    要取消行号,调用statscnRowNamePrefix(NULL)

  • 2016.2.25 版本 1.0.2 修复一个http状态检查的bug,需要httr >= 1.1.0

函数介绍

成功安装了rstatscn以后,可以利用help(package="rstatscn")获得在线帮助。用help(<函数名>)获得函数的说明。

  • statscnDbs() 列出国家数据库中可用的数据库,其中数据库的代码很重要,后面的函数查询中需要设定要查询数据库的代码
  • statscnQueryZb(zbid=’zb’, dbcode=’hgnd’) 查询给定数据库中可用的指标。数据库中的指标是以树的结构组织的。查询根结点下的可用指标时,传入zbid=’zb’ 即可。在获取的指标数据框中,如果这个指标不是叶节点,可以再利用这个函数来获得其子指标。如果zbid指定的指标已经是叶节点,那么将返回空的数据框。
  • statscnRegions(dbcode=’fsnd’) 获得指定数据库中的区域代码。这个函数可以用来获取各省的代码。获取省的代码以后,可以查询指定省份的数据。在城市数据库中,可以用来获得城市代码。国际数据库中,用来获得国家的代码
  • statscnQueryData(zb,dbcode,rowcode,colcode,moreWd) 这个是真正的数据查询函数,其中
    • zb 要查询的指标id,这个id不能随便写,需要根据statscnQueryZbs函数的返回值来设定
    • dbcode 要查询的数据库的代码,来源于statscnDbs()函数
    • rowcode 返回数据框的行代码,缺省值为zb,即指标,一般设为缺省值即可
    • colcode 返回数据框的列代码,缺省值为sj,即时间,一般设为缺省值即可
    • moreWd 对查询数据的更多限制。参数的格式为moreWd=list(name=NA,value=NA)。比如说在省份数据库中,在指定了要查询的zb以后,还可通过这个参数指定需要查询的省份。更多可见后面的例子。
  • statscnQueryLastN(n) 修改前一次查询,查询最新的n条数据,每次查询时,会缺省返回一些数据,如果你想获得更多的数据或者更少的数据,可以利用这个函数。这个函数只是修改返回数据的条数。注意,这个函数要在statscnQueryData之后调用,不然他不知道要修改哪条查询。

常见问题

  1. 找不到rstatscn包?
    检查一下你R的版本,rstatscn在3.2.2及以上版本才可用。(因为没有在低版本测试过)

  2. 数据的实时性怎样?
    函数获取的数据和网站http://data.stats.gov.cn中展示的数据是一致的。 如果获取的数据和网站展示的数据不一致,那应该是一个程序错误,可以告诉我

其他

我把国家数据库中的所有指标都列出来了。放在这里,以后就不必要每次去查了。 (2015-11-30日数据,仅供参考)

在每个叶子指标下可能还会有多个指标,比如A0101行政区划下,还有11个指标,这个可以通过statscnQueryData(‘A0101’)的返回值 看到。这些指标也有自己的id,按照返回的行的顺序,id分别为A0101 + 0<行号>9以后的编码为字母A,B,… 比如第一行—地级区划数(个)—的id为A010101 , 第11行的指标—-街道办事处(个)—-id 为A01010B。知道了这些指标的id以后,可以通过statscnQueryData(‘A01010B’)来直接查询这个指标,这样就不会返回一系列的指标值了。

实例

查询可用的数据库和指标

首先利用statscnDbs查询可用数据库,然后可根据数据库名字查询各数据库可用的指标。如下所示:

> library(rstatscn)
> statscnDbs()
    dbcode                    description
1     hgnd          national data, yearly   #宏观年度数据
2     hgjd       national data,  quaterly   #宏观季度
3     hgyd         national data, monthly  #宏观月度
4     fsnd          province data, yearly   #分省年度
5     fsjd        province data, quaterly   #分省季度
6     fsyd         province data, monthly   #分省月度
7     csnd              city data, yearly         #城市年度
8     csyd             city data, monthly      #城市月度
9     gjnd     international data, yearly    #国际年度
10    gjyd    international data, monthly   #国际月度
11 gjydsdj 3 main countries data, monthly    #三个主要国家月度数据
> statscnQueryZb(dbcode='hgnd')
   dbcode  id isParent                     name pid wdcode
1    hgnd A01     TRUE                     综合         zb
2    hgnd A02     TRUE             国民经济核算         zb
3    hgnd A03     TRUE                     人口         zb
4    hgnd A04     TRUE           就业人员和工资         zb
5    hgnd A05     TRUE     固定资产投资和房地产         zb
6    hgnd A06     TRUE             对外经济贸易         zb
7    hgnd A07     TRUE                     能源         zb
8    hgnd A08     TRUE                     财政         zb
9    hgnd A09     TRUE                 价格指数         zb
10   hgnd A0A     TRUE                 人民生活         zb
11   hgnd A0B     TRUE                 城市概况         zb
12   hgnd A0C     TRUE               资源和环境         zb
13   hgnd A0D     TRUE                     农业         zb
14   hgnd A0E     TRUE                     工业         zb
15   hgnd A0F     TRUE                   建筑业         zb
16   hgnd A0G     TRUE               运输和邮电         zb
17   hgnd A0H    FALSE       社会消费品零售总额         zb
18   hgnd A0I     TRUE             批发和零售业         zb
19   hgnd A0J     TRUE             住宿和餐饮业         zb
20   hgnd A0K     TRUE                   旅游业         zb
21   hgnd A0L     TRUE                   金融业         zb
22   hgnd A0M     TRUE                     教育         zb
23   hgnd A0N     TRUE                     科技         zb
24   hgnd A0O     TRUE                     卫生         zb
25   hgnd A0P     TRUE                 社会服务         zb
26   hgnd A0Q     TRUE                     文化         zb
27   hgnd A0R     TRUE                     体育         zb
28   hgnd A0S     TRUE 公共管理、社会保障及其他         zb
> statscnQueryZb('A01',dbcode='hgnd')
  dbcode    id isParent                   name pid wdcode
1   hgnd A0101    FALSE               行政区划 A01     zb
2   hgnd A0102    FALSE 人均主要工农业产品产量 A01     zb
3   hgnd A0103     TRUE             法人单位数 A01     zb
4   hgnd A0104     TRUE         企业法人单位数 A01     zb
5   hgnd A0105     TRUE           民族自治地方 A01     zb

查询数据库中的数据 — 基础查询

知道了数据库中的指标以后,就可以根据指标和数据库来查询数据了。通常要查询更多的数据,需要两次查询。如下所示:

> statscnQueryData('A0102',dbcode='hgnd')
                           201420132012年
粮食人均占有量(公斤)            0 443.456070  436.500957
棉花人均占有量(公斤)            0   4.640549    5.061080
油料人均占有量(公斤)            0  25.910172   25.444427
糖料人均占有量(公斤)            0 101.300000   99.840657
茶叶人均产量(公斤)              0   1.320000    1.325061
水果人均占有量(公斤)            0 184.900000  178.107095
猪牛羊肉人均占有量(公斤)        0  48.644283   47.427051
水产品人均占有量(公斤)          0  45.469971   43.738046
人均原煤产量(吨)                0   0.000000    2.702313
人均原油产量(公斤)              0   0.000000  153.608328
人均纱产量(公斤)                0   0.000000   22.092330
人均布产量(米)                  0   0.000000   62.852087
人均机制纸及纸板产量(公斤)      0   0.000000   81.117795
人均水泥产量(公斤)              0   0.000000 1636.076835
人均粗钢产量(公斤)              0   0.000000  535.933131
人均发电量(千瓦小时)            0   0.000000 3692.582707
> statscnQueryLastN(4)
                           2014201320122011年
粮食人均占有量(公斤)            0 443.456070  436.500957  425.152645
棉花人均占有量(公斤)            0   4.640549    5.061080    4.904187
油料人均占有量(公斤)            0  25.910172   25.444427   24.612319
糖料人均占有量(公斤)            0 101.300000   99.840657   93.119565
茶叶人均产量(公斤)              0   1.320000    1.325061    1.207632
水果人均占有量(公斤)            0 184.900000  178.107095  169.389736
猪牛羊肉人均占有量(公斤)        0  48.644283   47.427051   45.355827
水产品人均占有量(公斤)          0  45.469971   43.738046   41.704897
人均原煤产量(吨)                0   0.000000    2.702313    2.618794
人均原油产量(公斤)              0   0.000000  153.608328  150.934433
人均纱产量(公斤)                0   0.000000   22.092330   20.220217
人均布产量(米)                  0   0.000000   62.852087   60.570034
人均机制纸及纸板产量(公斤)      0   0.000000   81.117795   81.918341
人均水泥产量(公斤)              0   0.000000 1636.076835 1561.797296
人均粗钢产量(公斤)              0   0.000000  535.933131  509.833945
人均发电量(千瓦小时)            0   0.000000 3692.582707 3506.371408

查询数据库中的数据 — 分省数据查询

对于分省数据库而言,可以首先查询省份(即地区)的代码,然后再根据省份代码和指标来查询给定年/月度的数据。

> statscnQueryZb('A01',dbcode='fsnd')
  dbcode    id isParent           name pid wdcode
1   fsnd A0101    FALSE       行政区划 A01     zb
2   fsnd A0102     TRUE     法人单位数 A01     zb
3   fsnd A0103     TRUE 企业法人单位数 A01     zb

> statscnRegions(dbcode='fsnd')
   regCode             name
1   110000           北京市
2   120000           天津市
3   130000           河北省
4   140000           山西省
5   150000     内蒙古自治区
6   210000           辽宁省
7   220000           吉林省
8   230000         黑龙江省
9   310000           上海市
10  320000           江苏省
11  330000           浙江省
12  340000           安徽省
13  350000           福建省
14  360000           江西省
15  370000           山东省
16  410000           河南省
17  420000           湖北省
18  430000           湖南省
19  440000           广东省
20  450000   广西壮族自治区
21  460000           海南省
22  500000           重庆市
23  510000           四川省
24  520000           贵州省
25  530000           云南省
26  540000       西藏自治区
27  610000           陕西省
28  620000           甘肃省
29  630000           青海省
30  640000   宁夏回族自治区
31  650000 新疆维吾尔自治区

#获取分省年度数据库中天津的A0101指标
> statscnQueryData('A0101',dbcode='fsnd',moreWd=list(name='reg',value='120000'))
                 2014201320122011年
地级区划数(个)        0      0      0      0
地级市数(个)          0      0      0      0
县级区划数(个)       16     16     16     16
市辖区数(个)         13     13     13     13
县级市数(个)          0      0      0      0
县数(个)              3      3      3      3
自治县数(个)          0      0      0      0
乡镇级区划数(个)    240    240    245    244
镇数(个)            121    121    123    123
乡数(个)              6      6     11     11
街道办事处(个)      113    113    111    110
#获取最近20年的天津A0101指标
>statscnQueryLastN(20)
...

分省数据查询— 同时查询所有省份的数据

每次查询返回的数据是一个二维的表格,缺省情况下,行为指标,列为时间。要查询所有省的数据,只需要指定指标和数据库名,然后指定行为省份,即rowcode='reg',如下所示。注意这里的A010101指标是地级区划个数。因此,要查询所有省份的数据,需要精确指定指标代码,指定组的代码将会返回该组的第一个自指标数据。比如指定A0101,返回的数据实际上是A010101的数据。

> statscnQueryData("A010101",dbcode='fsnd',rowcode='reg')
                 201420132012201120102009200820072006年
北京市                0      0      0      0      0      0      0      0      0
天津市                0      0      0      0      0      0      0      0      0
河北省               11     11     11     11     11     11     11     11     11
山西省               11     11     11     11     11     11     11     11     11
内蒙古自治区         12     12     12     12     12     12     12     12     12
辽宁省               14     14     14     14     14     14     14     14     14
吉林省                9      9      9      9      9      9      9      9      9
黑龙江省             13     13     13     13     13     13     13     13     13
上海市                0      0      0      0      0      0      0      0      0
江苏省               13     13     13     13     13     13     13     13     13
浙江省               11     11     11     11     11     11     11     11     11
安徽省               16     16     16     16     17     17     17     17     17
福建省                9      9      9      9      9      9      9      9      9
江西省               11     11     11     11     11     11     11     11     11
山东省               17     17     17     17     17     17     17     17     17
河南省               17     17     17     17     17     17     17     17     17
湖北省               13     13     13     13     13     13     13     13     13
湖南省               14     14     14     14     14     14     14     14     14
广东省               21     21     21     21     21     21     21     21     21
广西壮族自治区       14     14     14     14     14     14     14     14     14
海南省                3      3      3      2      2      2      2      2      2
重庆市                0      0      0      0      0      0      0      0      0
四川省               21     21     21     21     21     21     21     21     21
贵州省                9      9      9      9      9      9      9      9      9
云南省               16     16     16     16     16     16     16     16     16
西藏自治区            7      7      7      7      7      7      7      7      7
陕西省               10     10     10     10     10     10     10     10     10
甘肃省               14     14     14     14     14     14     14     14     14
青海省                8      8      8      8      8      8      8      8      8
宁夏回族自治区        5      5      5      5      5      5      5      5      5
新疆维吾尔自治区     14     14     14     14     14     14     14     14     14

如果要查询一组指标或查询给定年度的数据必须指定时间。指定时间的方式是使用参数moreWd=list((name='sj'),value='2015')1。然后通过rowcode='reg'指定返回表格的行为省份,colcode='zb'指定列为指标。如下所示:

#获取所有省份2015年的A010101指标
> statscnQueryData('A010101',dbcode='fsnd',rowcode='reg',colcode='zb',moreWd=list((name='sj'),value='2015'))
      地级区划数
 北京市                    0
 天津市                    0
 河北省                   11
 山西省                   11
 内蒙古自治区             12
 辽宁省                   14
 吉林省                    9
 黑龙江省                 13
 上海市                    0
 江苏省                   13
 浙江省                   11
 安徽省                   16
 福建省                    9
 江西省                   11
 山东省                   17
 河南省                   17
 湖北省                   13
 湖南省                   14
 广东省                   21
 广西壮族自治区           14
 海南省                    3
 重庆市                    0
 四川省                   21
 贵州省                    9
 云南省                   16
 西藏自治区                7
 陕西省                   10
 甘肃省                   14
 青海省                    8
 宁夏回族自治区            5
 新疆维吾尔自治区         14
                 
#获取所有省份2015年的A0101指标
#和上面的命令相比,这个会取出所有A0101下的子指标
> statscnQueryData('A0101',dbcode='fsnd',rowcode='reg',colcode='zb',moreWd=list((name='sj'),value='2015'))
                 地级区划数 地级市数 县级区划数 市辖区数 县级市数 县数 自治县数
北京市                    0        0         16       14        0    2        0
天津市                    0        0         16       13        0    3        0
河北省                   11       11        171       39       20  106        6
山西省                   11       11        119       23       11   85        0
内蒙古自治区             12        9        102       22       11   17        0
辽宁省                   14       14        100       56       17   19        8
吉林省                    9        8         60       21       20   16        3
黑龙江省                 13       12        128       65       17   45        1
上海市                    0        0         17       16        0    1        0
江苏省                   13       13         99       55       23   21        0
浙江省                   11       11         90       35       20   34        1
安徽省                   16       16        105       43        6   56        0
福建省                    9        9         85       28       13   44        0
江西省                   11       11        100       20       10   70        0
山东省                   17       17        137       51       28   58        0
河南省                   17       17        158       50       21   87        0
湖北省                   13       12        103       39       24   37        2
湖南省                   14       13        122       35       16   64        7
广东省                   21       21        119       61       21   34        3
广西壮族自治区           14       14        110       36        7   55       12
海南省                    3        3         24        8        6    4        6
重庆市                    0        0         38       21        0   13        4
四川省                   21       18        183       49       14  116        4
贵州省                    9        6         88       14        7   55       11
云南省                   16        8        129       13       13   74       29
西藏自治区                7        3         74        3        0   71        0
陕西省                   10       10        107       25        3   79        0
甘肃省                   14       12         86       17        4   58        7
青海省                    8        2         43        5        3   28        7
宁夏回族自治区            5        5         22        9        2   11        0
新疆维吾尔自治区         14        2        103       11       24   62        6

#后面还有几个指标,这里略去

  1. 这里好象有个bug,如果name='sj'不加括号会报错。报错的内容为Error in seq.default(1, nrow(dfdata)) : 'to' must be of length 1



本文地址: http://www.bagualu.net/wordpress/rstatscn-the-r-interface-for-china-national-data 转载请注明




“rstatscn, 国家数据库的R接口”的20个回复

  1. statscnQueryData(‘A1401′,dbcode=’fsyd’,moreWd = list((name=’reg’),value= ‘120000’))
    您好我这样查询数据都是一个省一个省的查,能不能一次查出所有省的,或者您能留个联系方式么。

    1. 函数获取的数据和网站http://data.stats.gov.cn中展示的数据是一致的。如果发现数据没有更新,可以看看这个网站上是不是有新的数据。

  2. > statscnRegions(‘csyd’)
    regCode name
    1 110000 北京
    > statscnRegions(‘csnd’)
    regCode name
    1 110000 北京

    这是我得到的地区的数据,是我用的不对,还是数据库里就只有这几个地区?

  3. statscnQueryData(zb = ‘A0205’, dbcode = ‘fsnd’, moreWd = list(name = ‘sj’, value = ‘2013’))
    结果出错。能不能指定年份查询呢?谢谢

    1. 这是一个查给定年度的例子: statscnQueryData(zb=’A0205′,’fsnd’,rowcode=’reg’,colcode=’zb’,moreWd=list(name=’sj’,value=’2013′))

  4. statscnQuery(‘A0101′)是不是一个局部函数?
    > statscnQueryData(dbcode=’hgjd’, zb=’A010103′)

    > statscnQuery(‘A0101’) #欲查下一级指标
    错误: 没有”statscnQuery”这个函数

    1. 没有statscnQuery这个函数,要查下一级指标请用statscnQueryZb函数, 查一个时间段的数据,可以使用statscnQueryLastN函数改变查询返回数据的条数. 查指定时间的数据,可以试着在statscnQueryData中使用moreWd参数指定时间.但是指定时间段是不可以的.
      help(package=”rstatscn”)没结果估计是你本地设置问题.你看别的包你能不能看.

  5. 文档中statscnQueryZbs(zbid=’zb’, dbcode=’hgnd’)的函数名多了一个s,函数执行没有结果;
    help(package=”rstatscn”)没有结果出来;
    statscnDbs()出来的结果,把注释带上就好了;
    要查一个时间段的数据,参数该如何设置?

发表评论

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