読者です 読者をやめる 読者になる 読者になる

akiyoko blog

akiyoko の IT技術系ブログです

政府統計ポータル(e-Stat)と R でサンタさんの12月の出費動向を調べてみた

統計解析 R

この投稿は 「R Advent Calendar 2014 - Qiita」 の 25日目の記事です。


Me f:id:akiyoko:20141222232026p:plainf:id:akiyoko:20141222232026p:plain y Christmas!!

ということで今日は、クリスマスですね。


昨晩は、全国のサンタさんが大活躍したのではないでしょうか。



そこで今回は、全国のサンタさんの12月の出費動向を調べてみたい と思います。


なお、初級者向けの記事ですので、中上級者の方は読み飛ばしてくださいませ。



手順

手順は、ざっくり

  1. e-Stat(政府統計ポータル)から家計調査の CSV をダウンロード
  2. R で CSVデータを読み込む
  3. データを加工してグラフを描画

という感じで進めます。

環境

  • Windows 7
  • RGui [R Console] (R version 3.1.2)


 

1. e-Stat から家計調査のCSVデータをダウンロード

 

1.1. 目的の統計表を選択


e-Stat(政府統計ポータル) にアクセスします。


政府統計の総合窓口 GL01010101

f:id:akiyoko:20141223094857p:plain


「主要な統計から探す」をクリック。

f:id:akiyoko:20141223094936p:plain


「家計調査」をクリック。

f:id:akiyoko:20141223095005p:plain


1ヶ月ごとの支出金額を取得したいので、

家計調査
 -> 家計収支編
  -> 二人以上の世帯
   -> 詳細結果表
    -> 月次

と辿り、最新版の「2014年10月」のリンクをクリックします。


f:id:akiyoko:20141223105040p:plain



品目別の支出金額を取得したいので、

<品目分類>1世帯当たり1か月間の支出金額,購入数量及び平均価格
 -> 全国
  -> 二人以上の世帯

と辿り、右側にある「DB」ボタンをクリックします。


f:id:akiyoko:20141223105803p:plain



金額を取得したいので、

[品目分類]品目分類(平成22年改定)(総数:金額)

をクリックします。


f:id:akiyoko:20141223110304p:plain


 

1.2. レイアウトを設定

デフォルトのままでは、不要なセルが多数あるのと、ダウンロード制限に引っ掛かっているので、項目の絞込みをします。

f:id:akiyoko:20141223111215p:plain



事項「品目分類(22年改定)」の「絞込み」をクリックします。

f:id:akiyoko:20141223120832p:plain


「全項目非表示」をクリックして、一旦、右側の「表示項目」のリストをクリアします。

f:id:akiyoko:20141223121506p:plain


下の3つの項目をチェックして、「選択項目表示」をクリックします。


f:id:akiyoko:20141223121517p:plain


ちなみに、品目分類の一覧は、
統計局ホームページ/家計調査 収支項目分類一覧 (平成22年1月改定)
にリストアップされているのですが、ここに載っていない項目も一部あり、今回取り上げた「テレビゲーム」や「他のがん具」は注意書きにしか書かかれておらず、見逃してしまいがちな項目かもしれません。

「世帯主収入」,「世帯主の配偶者の収入」,「他の世帯員収入」,「学校給食」,「深夜電力電気代」,「他の電気代」,「男子用学校制服」,「女子用学校制服」,「子供服」,「乳児服」,「子供用シャツ」,「子供用セーター」,「子供用下着」,「子供用寝巻き」,「出産入院料」,「他の入院料」,「鉄道通学定期代」,「バス通学定期代」,「授業料等」~「高校補習教育・予備校」,「筆記・絵画用具」~「他の文房具」,「テレビゲーム」,「他のがん具」,「ハンドバッグ」~「他のバッグ」,「婚礼関係費」~「他の冠婚葬祭費」,「保育所費用」,「世帯主こづかい」,「他の世帯員こづかい」,「国内遊学仕送り金」,「他の仕送り金」は二人以上の世帯及び総世帯のみ



「OK」をクリックします。

f:id:akiyoko:20141223121526p:plain



次に、「地域区分」の絞込みをします。

f:id:akiyoko:20141223122211p:plain


先の手順と同様にして、「全国」のみを表示項目にして「OK」をクリックします。

f:id:akiyoko:20141223122228p:plain




最後に、「時間軸(月次)」を絞り込みます。


平成22年1月に「テレビゲーム」の項目分類が改定された *1 ので、改定後の 2010年11月から(最新の)2014年10月までの 4年間のデータを利用することにします。


同じように、「時間軸(月次)」の「絞込み」ボタンをクリック。

f:id:akiyoko:20141223125552p:plain


「2010年11月」から「2014年10月」までの 48ヶ月分を選択して「OK」をクリックします。

f:id:akiyoko:20141223130452p:plain



 

1.3. CSV をダウンロード

まず、「単位の表示」で「無」をチェックします。

理由は、Windows版の R を使って CSVを読み込んだ際に、「単位の表示」が「有」の場合に出力される「【円】」の「【】(隅カッコ)」が文字化けしてしまうからなのですが、もしかしたら他に回避方法があるかもしれません。*2

f:id:akiyoko:20141224012555p:plain



ここで「ダウンロード」ボタンをクリックすると、ダウンロード範囲が「全ページ」しか選べず、同じ項目が重複して出力されてしまうので、一旦、「統計表表示へ」をクリックします。


f:id:akiyoko:20141224012722p:plain



「ダウンロード」をクリックします。

f:id:akiyoko:20141224013007p:plain



ダウンロード範囲に「ページ全体」、ファイル形式に「CSV形式」を選択して「ダウンロード」をクリックすると、CSVファイルがダウンロードされます。


f:id:akiyoko:20141224013159p:plain





 

2. R で CSVデータを読み込む

ここからようやく、R (R Console) を使っていきます。


ダウンロードした CSVデータはこのような形式になっています。


f:id:akiyoko:20141224013400p:plain



11行目を表頭(12行目以降を本データ)、3列目を表側(4列目以降を本データ)として取り込むために、表頭までの10行をスキップし、表側までの2列を削除しておきます。


> kakei <- read.csv("C:/Users/aki/Downloads/FEH_00200561_141224013207.csv", skip=10, row.names=3)
> kakei <- kakei[-1:-2]

> kakei
           テレビゲーム機 ゲームソフト等 他のがん具
20141035             95        338
2014973            110        318
2014877             99        573
2014741            144        366
2014641             80        293
2014550            108        322
2014453             85        255
2014385            149        308
2014265            117        230
2014156            169        365
201312368            395      1,048
201311102            111        382
20131056             69        248
2013958             92        297
2013877             88        504
2013737             76        367
2013637             58        253
2013578             93        292
2013450             96        269
2013376            118        287
2013254             79        212
20131165            141        301
201212555            435        999
201211103             98        317
20121044             87        256
2012964             81        297
2012836            102        485
2012755            117        357
2012656            102        246
2012534            104        292
2012456             91        297
2012392             86        297
2012260             76        248
20121115            158        359
201112482            472      1,132
20111178             90        374
20111070            105        306
2011958             84        276
2011858            112        463
2011733             95        370
2011640             73        280
2011590             66        335
2011450             84        312
20113128             79        247
20112118             82        262
2011176            151        347
201012373            519      1,066
20101195            109        348


 

3. データを加工してグラフを描画

読み込んだデータはそのままでは使えないので、少し加工しておきます。

特に、

  • 年月文字列(「2014年10月」など)を Dateオブジェクトに変換
  • 位取りのカンマ(「1,066」など)を取り除いて数値に変換 *3

に注意する必要があります。


### Dateオブジェクトに変換
kakei.x <- as.Date(paste(rownames(kakei), "01"), format="%Y年%m月%d")

### 位取りのカンマを除去して数値に変換
kakei.y1 <- as.numeric(sub(",", "", as.matrix(kakei$"テレビゲーム機")))
kakei.y2 <- as.numeric(sub(",", "", as.matrix(kakei$"ゲームソフト等")))
kakei.y3 <- as.numeric(sub(",", "", as.matrix(kakei$"他のがん具")))



まず、「テレビゲーム機」の時系列データのグラフを描画してみます。

> plot(kakei.x, kakei.y1, type="o", pch=16, col="red", xlab="", ylab="購入金額(円)", xaxt="n")
> axis.Date(1, kakei.x, format="%Y年%m月")


f:id:akiyoko:20141224014521p:plain

明らかに、12月の出費が突出していますね。



12月とそれ以外の月の購入金額について 2標本間のT検定をしてみると、有意水準 5%で有意差が見られました。まあ、グラフから一目瞭然ですね。

### 12月のデータ
> kakei.y1_12 <- kakei.y1[as.numeric(format(kakei.x, "%m")) == 12]
> kakei.y1_12
[1] 368 555 482 373

### 12月以外のデータ
> kakei.y1_11 <- kakei.y1[as.numeric(format(kakei.x, "%m")) != 12]
> kakei.y1_11
 [1]  35  73  77  41  41  50  53  85  65  56 102  56  58  77  37  37  78  50  76  54 165 103  44  64  36  55  56  34  56  92  60 115  78  70  58  58  33  40  90  50 128 118
[43]  76  95

### 事前にF検定
> var.test(kakei.y1_12, kakei.y1_11)

        F test to compare two variances

data:  kakei.y1_12 and kakei.y1_11
F = 10.2271, num df = 3, denom df = 43, p-value = 6.626e-05
alternative hypothesis: true ratio of variances is not equal to 1
95 percent confidence interval:
   2.975107 143.457915
sample estimates:
ratio of variances
          10.22709

### 2標本間のT検定
> t.test(kakei.y1_12, kakei.y1_11, var.equal=TRUE)

        Two Sample t-test

data:  kakei.y1_12 and kakei.y1_11
t = 20.1457, df = 46, p-value < 2.2e-16
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 339.2291 414.5436
sample estimates:
mean of x mean of y
444.50000  67.61364



 
次に、「ゲームソフト等」の時系列データを見てみます。

> plot(kakei.x, kakei.y2, type="o", pch=16, col="blue", xlab="", ylab="購入金額(円)", xaxt="n")
> axis.Date(1, kakei.x, format="%Y年%m月")


f:id:akiyoko:20141224014531p:plain

詳細は省略しますが、こちらも12月とそれ以外で、有意水準5%で有意差が見られました。



 
最後に、「他のがん具」です。

> plot(kakei.x, kakei.y3, type="o", pch=16, col="green", xlab="", ylab="購入金額(円)", xaxt="n")
> axis.Date(1, kakei.x, format="%Y年%m月")


f:id:akiyoko:20141224014541p:plain


T検定の結果、同じく有意差が見られました。





ここで、3つのグラフを重ねてみます。

このままでは Y軸の縮尺率が違ってしまっているので、ylim を固定して縮尺を合わせておきます。

> plot(kakei.x, kakei.y1, ylim=c(0, 1200), type="o", pch=16, col="red", xlab="", ylab="購入金額(円)", xaxt="n", yaxt="n")
> par(new=T)
> plot(kakei.x, kakei.y2, ylim=c(0, 1200), type="o", pch=16, col="blue", xlab="", ylab="", xaxt="n", yaxt="n")
> par(new=T)
> plot(kakei.x, kakei.y3, ylim=c(0, 1200), type="o", pch=16, col="green", xlab="", ylab="", xaxt="n", yaxt="n")
> axis.Date(1, kakei.x, format="%Y年%m月")
> axis(2, ylim=c(0, 200))
> legend("topright", legend=c("テレビゲーム機", "ゲームソフト等", "他のがん具"), lty=1, col=c("red", "blue", "green"))


f:id:akiyoko:20141224014549p:plain


テレビゲーム機・ゲームソフト等・他のがん具、いずれの購入金額のデータも、12月に顕著な伸びを示していることが見て取れますね。





そして今月も、サンタさんの財布から諭吉さんがたくさん出て行ったわけですね。
全国のサンタさん、おつかれした! (`・ω・´)ゞ






 

感想

今回この「R Advent Calendar 2014 - Qiita」に参加しようと思ったきっかけは、gacco の「ga014 統計学Ⅰ:データ分析の基礎」の反転授業で必要になるということで、先月から R を使い始めたので、せっかくなので何かやってみようということで。


ちなみにそのときは、1日で R の使い方を覚えて、下の記事を書きました。


R はまだ覚えたてなので、今回も初級者向けの記事になっています。


gacco の統計学講座の日程上、25日目にエントリーすることになったのですが、後になって「トリ」というのに気付き、日が進むにつれて公開されていく皆さんのハイレベルなエントリーに正直、場違い感で身悶えております。


まあ、今後に期待ということで生温かい目で見てあげてください。







 

*1:統計局ホームページ/家計調査 収支項目分類 改定内容(平成22年1月改定)

*2:read.csv(xxx, fileEncoding="cp932") でも回避できませんでした。

*3:因子ベクトルとして取り込まれてしまう?