rstatscn包:国家统计局数据接口

rstatscn包:国家统计局数据接口

该项目的地址为:jiang-hang/rstatscn。可以非常方便的获取国家统计局网站的数据。中文包,超级喜欢!该包的介绍文档位于:RSTATSCN, 国家数据库的R接口

安装

1
devtools::install_github("jiang-hang/rstatscn", force = T)

函数介绍

statscnDbs():列出国家数据库中可用的数据库

1
2
3
4
5
6
7
8
9
10
11
12
13
14
> 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(zbid = ‘zb’, dbcode = ‘hgnd’):查询给定数据库中可用的指标

1
2
3
4
5
6
7
8
9
10
> statscnQueryZb(zbid = 'zb', dbcode = 'hgnd')
dbcode id isParent name pid wdcode
1 hgnd A01 TRUE 综合 zb
2 hgnd A02 TRUE 国民经济核算 zb
3 hgnd A03 TRUE 人口 zb
······
25 hgnd A0P TRUE 社会服务 zb
26 hgnd A0Q TRUE 文化 zb
27 hgnd A0R TRUE 体育 zb
28 hgnd A0S TRUE 公共管理、社会保障及其他 zb

数据库中的指标是以树的结构组织的。查询根结点下的可用指标时,传入zbid = 'zb'即可。在获取的指标数据框中,如果这个指标不是叶节点,可以再利用这个函数获取其子指标。如果zbid指定的指标已经是叶节点,那么将返回空的数据框。

1
2
3
4
5
6
7
> statscnQueryZb(zbid = '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

再往下查询就返回空了,说明已经到达叶节点。

1
2
> statscnQueryZb('A0101', 'hgnd')
list()

statscnRegions(dbcode = ‘fsnd’):获取指定数据库中的区域代码

这个函数可以用来获取各省的代码。获取省代码之后就可以查询指定省份的数据。在城市数据库中,可以用来获取城市代码。国际数据库中,可以用来获取国家代码。

省份

1
2
3
4
5
6
7
> statscnRegions('fsnd')
regCode name
1 110000 北京市
2 120000 天津市
······
30 640000 宁夏回族自治区
31 650000 新疆维吾尔自治区

城市

1
2
3
4
5
6
7
8
9
> statscnRegions('csnd')
regCode name
1 110000 北京
2 120000 天津
3 130100 石家庄
······
34 630100 西宁
35 640100 银川
36 650100 乌鲁木齐

国际

1
2
3
4
5
6
7
8
9
10
> statscnRegions('gjnd')
regCode name
1 141 越南
2 143 中国台湾
3 144 东帝汶
4 145 哈萨克斯坦
5 146 吉尔吉斯斯坦
6 147 塔吉克斯坦
7 148 土库曼斯坦
8 149 乌兹别克斯坦

statscnQueryData(zb, dbcode, rowcode, colcode, moreWd):真正的数据查询函数

  • zb:要查询的指标id,根据statscnQueryZbs函数返回的结果来指定;
  • dbcode:要查询的数据库代码,来源于statscnDbs()函数;
  • rowcode:返回数据框的行代码,缺省值为zb,即指标,一般设定为缺省值;
  • colcode:返回数据框的列代码,缺省值为sj,即时间,一般设定为缺省值即可;
  • moreWd:对查询数据的更多限制。参数的格式为:moreWd = list(name = NA, value = NA)。比如说在省份数据库中,在指定了要查询的zb之后,还可以通过这个参数指定要查询的省份。

例如,查询天津市的行政规划:

1
2
3
4
5
6
7
8
9
10
11
12
13
> statscnQueryData(zb = 'A0101', dbcode = 'fsnd', moreWd = list(name = 'reg', value = '120000'))
2016201520142013201220112010200920082007
地级区划数(个) 0 0 0 0 0 0 0 0 0 0
地级市数(个) 0 0 0 0 0 0 0 0 0 0
县级区划数(个) 16 16 16 16 16 16 16 16 18 18
市辖区数(个) 16 15 13 13 13 13 13 13 15 15
县级市数(个) 0 0 0 0 0 0 0 0 0 0
县数(个) 0 1 3 3 3 3 3 3 3 3
自治县数(个) 0 0 0 0 0 0 0 0 0 0
乡镇级区划数(个) 245 244 240 240 245 244 243 243 243 244
镇数(个) 124 121 121 121 123 123 115 116 116 117
乡数(个) 3 6 6 6 11 11 20 20 20 18
街道办事处(个) 118 117 113 113 111 110 108 107 107 107

基本查询例如,查询全国人均主要工农产品产量:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
> statscnQueryData('A0102', 'hgnd')
2016201520142013201220112010200920082007
粮食人均占有量(公斤) 446.990747 453.201656 444.945694 443.456070 436.500957 425.152645 408.662779 398.699677 399.129703 380.6124608
棉花人均占有量(公斤) 3.843901 4.086445 4.528663 4.640549 5.061080 4.904187 4.457813 4.789599 5.655723 5.7847291
油料人均占有量(公斤) 26.326168 25.794395 25.709179 25.910172 25.444427 24.612319 24.100000 23.691878 22.291238 19.4914174
糖料人均占有量(公斤) 0.000000 91.200000 97.900000 101.300000 99.840657 93.200000 89.769335 92.217645 101.306530 92.4828578
茶叶人均产量(公斤) 0.000000 1.640000 1.540000 1.320000 1.325061 1.207632 1.102686 1.020568 0.950000 0.8843715
水果人均占有量(公斤) 0.000000 199.600000 191.600000 184.900000 178.107095 169.500000 159.986041 153.204524 145.095808 137.6166159
猪牛羊肉人均占有量(公斤) 46.967694 48.332647 49.761724 48.644283 47.427051 45.355827 45.789710 44.432972 42.400000 40.0900000
水产品人均占有量(公斤) 50.585677 49.107939 47.362453 45.469971 43.738046 41.704897 40.200000 38.429328 36.957537 36.0200000
人均原煤产量(吨) 0.000000 0.000000 0.000000 0.000000 2.702313 2.618794 2.418321 2.233223 2.115268 2.0423957
人均原油产量(公斤) 0.000000 0.000000 0.000000 0.000000 153.608328 150.934433 151.314378 142.338536 143.758639 141.3766755
人均纱产量(公斤) 0.000000 0.000000 0.000000 0.000000 22.092330 20.220217 19.233098 17.024848 15.518902 14.8603373
人均布产量(米) 0.000000 0.000000 0.000000 0.000000 62.852087 60.570034 59.803918 56.594504 54.584024 51.2381581
人均机制纸及纸板产量(公斤) 0.000000 0.000000 0.000000 0.000000 81.117795 81.918341 73.503725 67.343194 63.445199 59.1283003
人均水泥产量(公斤) 0.000000 0.000000 0.000000 0.000000 1636.076835 1561.797296 1406.821160 1234.903625 1074.662686 1032.8461892
人均粗钢产量(公斤) 0.000000 0.000000 0.000000 0.000000 535.933131 509.833945 476.360558 429.805072 379.764920 371.2675992
人均发电量(千瓦小时) 0.000000 0.000000 0.000000 0.000000 3692.582707 3506.371408 3145.058141 2790.327209 2638.997324 2490.0146826

statsQueryLastN(n):修改前一次查询,查询最新的n条数据

每次查询的时候,会缺省返回一些数据,如果你想获得更多的数据或者更少的数据,可以利用这个函数。这个函数只是修改返回数据的条数。注意这个函数要在statscnQueryData之后调用,不然他不知道要修改哪条查询。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
> statscnQueryData('A0102', 'hgnd')
# 上面的代码会返回07年之后的所有数据。
# 下面设置只返回最近5年的:
> statscnQueryLastN(5)
20162015201420132012
粮食人均占有量(公斤) 446.990747 453.201656 444.945694 443.456070 436.500957
棉花人均占有量(公斤) 3.843901 4.086445 4.528663 4.640549 5.061080
油料人均占有量(公斤) 26.326168 25.794395 25.709179 25.910172 25.444427
糖料人均占有量(公斤) 0.000000 91.200000 97.900000 101.300000 99.840657
茶叶人均产量(公斤) 0.000000 1.640000 1.540000 1.320000 1.325061
水果人均占有量(公斤) 0.000000 199.600000 191.600000 184.900000 178.107095
猪牛羊肉人均占有量(公斤) 46.967694 48.332647 49.761724 48.644283 47.427051
水产品人均占有量(公斤) 50.585677 49.107939 47.362453 45.469971 43.738046
人均原煤产量(吨) 0.000000 0.000000 0.000000 0.000000 2.702313
人均原油产量(公斤) 0.000000 0.000000 0.000000 0.000000 153.608328
人均纱产量(公斤) 0.000000 0.000000 0.000000 0.000000 22.092330
人均布产量(米) 0.000000 0.000000 0.000000 0.000000 62.852087
人均机制纸及纸板产量(公斤) 0.000000 0.000000 0.000000 0.000000 81.117795
人均水泥产量(公斤) 0.000000 0.000000 0.000000 0.000000 1636.076835
人均粗钢产量(公斤) 0.000000 0.000000 0.000000 0.000000 535.933131
人均发电量(千瓦小时) 0.000000 0.000000 0.000000 0.000000 3692.582707

全部指标

作者非常勤劳的把所有的可用指标列示出来了:国家统计局所有指标列表

使用实例1:查询某个国家级数据指标

首先利用statscnDbs查询可用数据库:

1
2
library(rstatscn)
statscnDbs()

然后选择一个数据库,例如年度国家数据库(hgnd),下面查询该数据库内的可用指标:

1
statscnQueryZb(dbcode = 'hgnd')

该语句会返回该数据库下的所有节点,根据自己所需数据的类别选择节点继续查询,例如查询行政区划:

1
statscnQueryZb('A01', dbcode = 'hgnd')

该次查询之后就获得了叶节点,然后根据自己想要的指标就可以获取数据了。例如查询人均主要工农产品产量

1
statscnQueryData('A0102', dbcode = 'hgnd')

上面的语句只返回了三年的数据,通常要查询更多的数据,需要再查询一次:

1
statscnQueryLastN(4)

这样我们就完成了查询任务。

使用实例2:查询某个省级数据指标

例如查询综合类的省级数据,首先查看可获得指标:

1
statscnQueryZb('A01', dbcode = 'fsnd')

再查询一下各省级行政单位的代码:

1
statscnRegions(dbcode = 'fsnd')

加入我想查询天津的行政区划指标:

1
statscnQueryData('A0101', dbcode = 'fsnd', moreWd = list(name = 'reg', value = '120000'))

获取更多数据,例如20年的:

1
statscnQueryLastN(20)

使用实例3:同时查询所有省份的数据

要查询所有省的数据,只需要指定指标和数据库名,然后指定行为省份,即rowcode=’reg’,如下所示:

1
statscnQueryData('A0101', dbcode = 'fsnd', rowcode = 'reg')

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

1
statscnQueryData('A010101', dbcode = 'fsnd', rowcode = 'reg', colcode = 'zb', moreWd = list(name = 'sj', value = '2015'))

和上面的命令相比,下面的语句会列出所有A0101下的子指标:

1
statscnQueryData('A0101', dbcode = 'fsnd', rowcode = 'reg', colcode = 'zb', moreWd = list(name = 'sj', value = '2015'))

绘图

最后再绘制一个图表吧,例如绘制各个省份社零的走势:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 查询指标
statscnDbs()
statscnQueryZb('zb', 'fsnd')
statscnQueryZb('A0H', 'fsnd')
# 获取所有省份10年的社零数据
statscnQueryData('A0H', 'fsnd', rowcode = 'reg')
df <- statscnQueryLastN(10)
df$id = row.names(df)
library(reshape2)
df2 <- melt(df)
library(ggplot2)
library(ggthemes)
df2$variable = substr(df2$variable, 1, 4)
colnames(df2) <- c("省份", "年份", "社会消费品零售总额(亿元)")
(p <- ggplot(df2, aes(y = `社会消费品零售总额(亿元)`, x = 年份, group = 省份, colour = 省份)) +
geom_line() + theme_igray(base_size = 15) +
xlab("年份") + ylab("社会消费品零售总额(亿元)"))

# R

评论

程振兴

程振兴 @czxa.top
截止今天,我已经在本博客上写了658.8k个字了!

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×