今回は先日公開されたばかりのRパッケージ'estatapi'を使用して、政府統計を取得し、可視(グラフ)化する。
ちなみに参照する統計表は様々な行動の時間などを収録している社会生活基本調査ということのみ決めておく。
(注意)横に大きなデータは見づらくて申し訳ありません。
はじめに
e-statのAPI機能を使用するときにはappIdを取得する必要があります。
その方法は下記の通りです(参考はこちら→estatapiパッケージで簡単にe-Statのデータ取得 - Qiita)
早速使う(今回使用するIDはすでにmyIDに格納してあることにする)
library(estatpai)
必要な統計表の検索="社会生活基本調査"を探す
result <- estat_getStatsList(appId = myID, searchWord = "社会生活基本調査") str(result)
このような結果が返ってくる。
## Classes 'tbl_df', 'tbl' and 'data.frame': 5265 obs. of 11 variables: ## $ @id : chr "0003005834" "0003005836" "0003005838" "0003070357" ... ## $ @code : chr "03" "03" "03" "03" ... ## $ $ : chr "文化・スポーツ・生活" "文化・スポーツ・生活" "文化・スポーツ・生活" "文化・スポーツ・生活" ... ## $ STATISTICS_NAME : chr "平成18年社会生活基本調査 調査票Bに基づく結果 生活時間に関する結果 生活時間編" "平成18年社会生活基本調査 調査票Bに基づく結果 生活時間に関する結果 生活時間編" "平成18年社会生活基本調査 調査票Bに基づく結果 生活時間に関する結果 生活時間編" "平成23年社会生活基本調査 調査票Bに基づく結果 生活時間に関する結果 生活時間編" ... ## $ @no : chr "0130102" "0130202" "0130302" "0070102" ... ## $ CYCLE : chr "-" "-" "-" "-" ... ## $ SURVEY_DATE : chr "200610" "200610" "200610" "201110" ... ## $ OPEN_DATE : chr "2007-12-21" "2007-12-21" "2007-12-21" "2012-12-21" ... ## $ SMALL_AREA : chr "0" "0" "0" "0" ... ## $ OVERALL_TOTAL_NUMBER: chr "39675" "39675" "39675" "43200" ... ## $ UPDATED_DATE : chr "2009-03-09" "2009-03-09" "2009-03-09" "2013-01-07" ...
ここで重要なのが"@id"という数字であり、これはそれぞれの政府統計と対応している。
さらに調査年などでも情報を絞ることができる。
統計表のメタ情報を参照する(構造把握みたいなもの)
Info <- estat_getMetaInfo(appId = myID, statsDataId = "0003066844") Info
## $cat01 ## Source: local data frame [21 x 3] ## ## @code @name @level ## (chr) (chr) (chr) ## 1 001 総数 1 ## 2 002 睡眠 1 ## 3 003 身の回りの用事 1 ## 4 004 食事 1 ## 5 005 通勤・通学 1 ## 6 006 仕事 1 ## 7 007 学業 1 ## 8 008 家事 1 ## 9 009 介護・看護 1 ## 10 010 育児 1 ## .. ... ... ... ## ## $cat02 ## Source: local data frame [3 x 4] ## ## @code @name @level @parentCode ## (chr) (chr) (chr) (chr) ## 1 001 総数 1 NA ## 2 002 男 2 001 ## 3 003 女 2 001 ## ## $cat03 ## Source: local data frame [98 x 4] ## ## @code @name @level @unit ## (chr) (chr) (chr) (chr) ## 1 001 標本数 1 NA ## 2 099 10歳以上推定人口 1 千人 ## 3 003 行動者率(0:00-0:15) 1 % ## 4 004 行動者率(0:15-0:30) 1 % ## 5 005 行動者率(0:30-0:45) 1 % ## 6 006 行動者率(0:45-1:00) 1 % ## 7 007 行動者率(1:00-1:15) 1 % ## 8 008 行動者率(1:15-1:30) 1 % ## 9 009 行動者率(1:30-1:45) 1 % ## 10 010 行動者率(1:45-2:00) 1 % ## .. ... ... ... ... ## ## $cat04 ## Source: local data frame [3 x 3] ## ## @code @name @level ## (chr) (chr) (chr) ## 1 00100 平日 1 ## 2 00200 土曜日 1 ## 3 00300 日曜日 1 ## ## $area ## Source: local data frame [160 x 3] ## ## @code @name @level ## (chr) (chr) (chr) ## 1 00000 全国 1 ## 2 01000 北海道 2 ## 3 02000 青森県 2 ## 4 03000 岩手県 2 ## 5 04000 宮城県 2 ## 6 05000 秋田県 2 ## 7 06000 山形県 2 ## 8 07000 福島県 2 ## 9 08000 茨城県 2 ## 10 09000 栃木県 2 ## .. ... ... ... ## ## $time ## Source: local data frame [1 x 3] ## ## @code @name @level ## (chr) (chr) (chr) ## 1 2011000000 2011年 1
こんな感じで格納されているので、必要なデータを自分でチェックする
メタ情報をもとに統計表を取得する
今回は"睡眠"と"育児"の行動率を取得したいので、$cat01でいうと、それぞれ"002"と"010"であることを確認しておく。なお、全国($areaで"00000")かつ平日のデータ($cat04で"00100")であることを確認しておく。
まずは、睡眠データから取得する。
sleep <- estat_getStatsData(appId = myID, statsDataId = "0003066844", cdCat01 = "002", cdCat02 = "001", cdCat04 = "00100", cdArea= "00000") str(sleep)
## Classes 'tbl_df', 'tbl' and 'data.frame': 98 obs. of 15 variables: ## $ @cat01 : chr "002" "002" "002" "002" ... ## $ @cat02 : chr "001" "001" "001" "001" ... ## $ @cat03 : chr "001" "099" "003" "004" ... ## $ @cat04 : chr "00100" "00100" "00100" "00100" ... ## $ @area : chr "00000" "00000" "00000" "00000" ... ## $ @time : chr "2011000000" "2011000000" "2011000000" "2011000000" ... ## $ $ : chr "-" "-" "82.93" "83.61" ... ## $ @unit : chr NA "千人" "%" "%" ... ## $ value : num 0 0 82.9 83.6 86.2 ... ## $ cat01_info: chr "睡眠" "睡眠" "睡眠" "睡眠" ... ## $ cat02_info: chr "総数" "総数" "総数" "総数" ... ## $ cat03_info: chr "標本数" "10歳以上推定人口" "行動者率(0:00-0:15)" "行動者率(0:15-0:30)" ... ## $ cat04_info: chr "平日" "平日" "平日" "平日" ... ## $ area_info : chr "全国" "全国" "全国" "全国" ... ## $ time_info : chr "2011年" "2011年" "2011年" "2011年" ...
sleep <- sleep[-1:-2, ] #1,2行目は削除する。 knitr::kable(head(sleep)) #表示する
@cat01 @cat02 @cat03 @cat04 @area @time $ @unit value cat01_info cat02_info cat03_info cat04_info area_info time_info 002 001 003 00100 00000 2011000000 82.93 % 82.93 睡眠 総数 行動者率(0:00-0:15) 平日 全国 2011年 002 001 004 00100 00000 2011000000 83.61 % 83.61 睡眠 総数 行動者率(0:15-0:30) 平日 全国 2011年 002 001 005 00100 00000 2011000000 86.23 % 86.23 睡眠 総数 行動者率(0:30-0:45) 平日 全国 2011年 002 001 006 00100 00000 2011000000 86.90 % 86.90 睡眠 総数 行動者率(0:45-1:00) 平日 全国 2011年 002 001 007 00100 00000 2011000000 90.86 % 90.86 睡眠 総数 行動者率(1:00-1:15) 平日 全国 2011年 002 001 008 00100 00000 2011000000 91.37 % 91.37 睡眠 総数 行動者率(1:15-1:30) 平日 全国 2011年
同様に育児のデータも取得(コードのみ表示)
child <- estat_getStatsData(appId = myID, statsDataId = "0003066844", cdCat01 = "010", cdCat02 = "001", cdCat04 = "00100", cdArea= "00000") child <- child[-1:-2, ] #1,2行目は削除する。 knitr::kable(head(child)) #表示する
@cat01 @cat02 @cat03 @cat04 @area @time $ @unit value cat01_info cat02_info cat03_info cat04_info area_info time_info 010 001 003 00100 00000 2011000000 0.07 % 0.07 育児 総数 行動者率(0:00-0:15) 平日 全国 2011年 010 001 004 00100 00000 2011000000 0.06 % 0.06 育児 総数 行動者率(0:15-0:30) 平日 全国 2011年 010 001 005 00100 00000 2011000000 0.07 % 0.07 育児 総数 行動者率(0:30-0:45) 平日 全国 2011年 010 001 006 00100 00000 2011000000 0.07 % 0.07 育児 総数 行動者率(0:45-1:00) 平日 全国 2011年 010 001 007 00100 00000 2011000000 0.08 % 0.08 育児 総数 行動者率(1:00-1:15) 平日 全国 2011年 010 001 008 00100 00000 2011000000 0.07 % 0.07 育児 総数 行動者率(1:15-1:30) 平日 全国 2011年
これらのデータを可視化する。
par(family = "Osaka", oma = c(0, 0, 0, 2)) plot(child$value, xlim = c(0, 96), ylim = c(0, 3), ylab = "育児の行動率(%)", xlab = "時間", main = "全国の時間帯ごとの育児と睡眠行動率(平日、男女、2011)", col = 2, type = "l", axes = FALSE) axis(1) axis(2) par(new=T) plot(sleep$value, col = 4, xlim = c(0, 96), ylim = c(0, 100), ylab = "", xlab = "", main = "", type = "l", axes = FALSE) mtext("睡眠の行動率(%)",side = 4, line = 3) axis(4) box() legend("topleft", legend = c("育児", "睡眠"), col = c("red", "blue"), lty = 1)
ちょっと雑ですが、、、完成
さいごに
- このパッケージは@yutannihilationによって作成されたものであり、本人のブログでも公表されています。
- e-statのAPI機能を活用しているだけの処理と比較しかねますが、これはデータの取得から解析までがかなりスムーズになったような印象を受けます。
- 一方で、API機能のデータは限定的であることは知っておく必要があります(参考:http://www.e-stat.go.jp/api/api-data/)
- このサイトもAPIの中の構造を知る上で非常に役に立ちます。あまり、構造に詳しくない方はこちらもご参照ください(参考:http://www.e-stat.go.jp/api/sample2/tokeidb/)
20160330
RF