国勢調査の配偶関係データを R で取得する

平成27年国勢調査のうち、配偶関係(婚姻関係)のデータを R で取得します。ここでは estatapi パッケージを使います。appId は、e-statのサイトで事前に取得しておきましょう。

[code lang=text] library(estatapi)
statslist %>%
dplyr::filter(grepl('平成27年.*配偶', STATISTICS_NAME)) %>%
select(`@id`, TITLE) %>%
mutate(TITLE=substr(TITLE, 0, 50))
[/code]

求めるデータの @id が 0003149791 であることがわかったので、メタ情報を取得します。

[code lang=text] metainfo <- estat_getMetaInfo(appId='xxxxx', statsDataId='0003149791')
metainfo
[/code] [code lang=text] metainfo$cat04
# A tibble: 10 × 3
@code @name @level

1 0000 総数(配偶関係) 1
2 0010 未婚 1
3 0020 有配偶 1
4 0040 死別 1
5 0050 離別 1
6 0070 配偶関係「不詳」 1
7 0080 (配偶関係別割合(%)) 未婚 1
8 0090 (配偶関係別割合(%)) 有配偶 1
9 0110 (配偶関係別割合(%)) 死別 1
10 0120 (配偶関係別割合(%)) 離別 1
[/code]

メタ情報には、様々な「コード」が入っています。上記はカテゴリ04(cat04)のコードの例。

データ取得時間短縮のため、メタ情報の @code を用いて絞り込んだデータを取得します。データ取得には数分かかります。

[code lang=text] census <- estat_getStatsData(
appId='xxxxx',
statsDataId='0003149791',
cdCat02=c('0010', '0020'), # 男、女
cdCat04=c('0010', '0020', '0040', '0050', '0070'), # 未婚、有配偶、死別、離別、配偶関係「不詳」
cdCat05='00710' # 全域
)
census$tab_code <- NULL
census$表章項目 <- NULL
census$cat01_code <- NULL
census$cat02_code <- NULL
census$cat03_code <- NULL
census$cat04_code <- NULL
census$cat05_code <- NULL
census$`全域・人口集中地区(2015)` <- NULL
census$time_code <- NULL
census$`時間軸(年次)` <- NULL
names(census) <- c('nationality', 'gender', 'age', 'marital_status', 'area_code', 'area', 'value')
census <- census[!grepl('総数|平均|再掲', census$age),] census <- census[!grepl('市部$|郡部$', census$area),] attach(census)
census$nationality <- as.factor(nationality)
census$gender <- as.factor(gender)
census$age <- ordered(age, levels=c(paste(15:99, '歳', sep=''), '100歳以上'))
census$marital_status <- as.factor(marital_status)
census$area_code <- as.factor(area_code)
census$area <- as.factor(area)
[/code]

都道府県別、都市別のデータを取り出します。

[code lang=text] census_prefs <- census %>%
dplyr::filter(
area_code != '00000',
as.numeric(levels(area_code))[area_code] %% 1000 == 0
)

census_cities <- census %>%
dplyr::filter(as.numeric(levels(area_code))[area_code] %% 1000 != 0)
[/code]

今後の利用のために CSV で保存しておきます。

[code lang=text] write.csv(census_prefs, 'prefs.csv', row.names=F)
write.csv(census_cities, 'cities.csv', row.names=F)
[/code]

この中に入っているデータは、こんな形式のものです。


リンクバルでは、Ruby と React と R を使って世の中をハッピーにしたいエンジニアを募集中です。この記事にピンと来た方は、是非ご応募ください。