この投稿は 「R Advent Calendar 2014 - Qiita」 の 25日目の記事です。
Me y Christmas!!
ということで今日は、クリスマスですね。
昨晩は、全国のサンタさんが大活躍したのではないでしょうか。
そこで今回は、全国のサンタさんの12月の出費動向を調べてみたい と思います。
なお、初級者向けの記事ですので、中上級者の方は読み飛ばしてくださいませ。
1. e-Stat から家計調査のCSVデータをダウンロード
1.1. 目的の統計表を選択
e-Stat(政府統計ポータル) にアクセスします。
「主要な統計から探す」をクリック。
「家計調査」をクリック。
1ヶ月ごとの支出金額を取得したいので、
家計調査 -> 家計収支編 -> 二人以上の世帯 -> 詳細結果表 -> 月次
と辿り、最新版の「2014年10月」のリンクをクリックします。
品目別の支出金額を取得したいので、
<品目分類>1世帯当たり1か月間の支出金額,購入数量及び平均価格 -> 全国 -> 二人以上の世帯
と辿り、右側にある「DB」ボタンをクリックします。
金額を取得したいので、
[品目分類]品目分類(平成22年改定)(総数:金額)
をクリックします。
1.2. レイアウトを設定
デフォルトのままでは、不要なセルが多数あるのと、ダウンロード制限に引っ掛かっているので、項目の絞込みをします。
事項「品目分類(22年改定)」の「絞込み」をクリックします。
「全項目非表示」をクリックして、一旦、右側の「表示項目」のリストをクリアします。
下の3つの項目をチェックして、「選択項目表示」をクリックします。
- テレビゲーム機
- ゲームソフト等
- 他のがん具
ちなみに、品目分類の一覧は、
「統計局ホームページ/家計調査 収支項目分類一覧 (平成22年1月改定)」
にリストアップされているのですが、ここに載っていない項目も一部あり、今回取り上げた「テレビゲーム」や「他のがん具」は注意書きにしか書かかれておらず、見逃してしまいがちな項目かもしれません。
「世帯主収入」,「世帯主の配偶者の収入」,「他の世帯員収入」,「学校給食」,「深夜電力電気代」,「他の電気代」,「男子用学校制服」,「女子用学校制服」,「子供服」,「乳児服」,「子供用シャツ」,「子供用セーター」,「子供用下着」,「子供用寝巻き」,「出産入院料」,「他の入院料」,「鉄道通学定期代」,「バス通学定期代」,「授業料等」~「高校補習教育・予備校」,「筆記・絵画用具」~「他の文房具」,「テレビゲーム」,「他のがん具」,「ハンドバッグ」~「他のバッグ」,「婚礼関係費」~「他の冠婚葬祭費」,「保育所費用」,「世帯主こづかい」,「他の世帯員こづかい」,「国内遊学仕送り金」,「他の仕送り金」は二人以上の世帯及び総世帯のみ
「OK」をクリックします。
次に、「地域区分」の絞込みをします。
先の手順と同様にして、「全国」のみを表示項目にして「OK」をクリックします。
最後に、「時間軸(月次)」を絞り込みます。
平成22年1月に「テレビゲーム」の項目分類が改定された *1 ので、改定後の 2010年11月から(最新の)2014年10月までの 4年間のデータを利用することにします。
同じように、「時間軸(月次)」の「絞込み」ボタンをクリック。
「2010年11月」から「2014年10月」までの 48ヶ月分を選択して「OK」をクリックします。
1.3. CSV をダウンロード
まず、「単位の表示」で「無」をチェックします。
理由は、Windows版の R を使って CSVを読み込んだ際に、「単位の表示」が「有」の場合に出力される「【円】」の「【】(隅カッコ)」が文字化けしてしまうからなのですが、もしかしたら他に回避方法があるかもしれません。*2
ここで「ダウンロード」ボタンをクリックすると、ダウンロード範囲が「全ページ」しか選べず、同じ項目が重複して出力されてしまうので、一旦、「統計表表示へ」をクリックします。
「ダウンロード」をクリックします。
ダウンロード範囲に「ページ全体」、ファイル形式に「CSV形式」を選択して「ダウンロード」をクリックすると、CSVファイルがダウンロードされます。
2. R で CSVデータを読み込む
ここからようやく、R (R Console) を使っていきます。
ダウンロードした CSVデータはこのような形式になっています。
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 テレビゲーム機 ゲームソフト等 他のがん具 2014年10月 35 95 338 2014年9月 73 110 318 2014年8月 77 99 573 2014年7月 41 144 366 2014年6月 41 80 293 2014年5月 50 108 322 2014年4月 53 85 255 2014年3月 85 149 308 2014年2月 65 117 230 2014年1月 56 169 365 2013年12月 368 395 1,048 2013年11月 102 111 382 2013年10月 56 69 248 2013年9月 58 92 297 2013年8月 77 88 504 2013年7月 37 76 367 2013年6月 37 58 253 2013年5月 78 93 292 2013年4月 50 96 269 2013年3月 76 118 287 2013年2月 54 79 212 2013年1月 165 141 301 2012年12月 555 435 999 2012年11月 103 98 317 2012年10月 44 87 256 2012年9月 64 81 297 2012年8月 36 102 485 2012年7月 55 117 357 2012年6月 56 102 246 2012年5月 34 104 292 2012年4月 56 91 297 2012年3月 92 86 297 2012年2月 60 76 248 2012年1月 115 158 359 2011年12月 482 472 1,132 2011年11月 78 90 374 2011年10月 70 105 306 2011年9月 58 84 276 2011年8月 58 112 463 2011年7月 33 95 370 2011年6月 40 73 280 2011年5月 90 66 335 2011年4月 50 84 312 2011年3月 128 79 247 2011年2月 118 82 262 2011年1月 76 151 347 2010年12月 373 519 1,066 2010年11月 95 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月")
明らかに、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月")
詳細は省略しますが、こちらも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月")
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"))
テレビゲーム機・ゲームソフト等・他のがん具、いずれの購入金額のデータも、12月に顕著な伸びを示していることが見て取れますね。
そして今月も、サンタさんの財布から諭吉さんがたくさん出て行ったわけですね。
全国のサンタさん、おつかれした! (`・ω・´)ゞ
感想
今回この「R Advent Calendar 2014 - Qiita」に参加しようと思ったきっかけは、gacco の「ga014 統計学Ⅰ:データ分析の基礎」の反転授業で必要になるということで、先月から R を使い始めたので、せっかくなので何かやってみようということで。
ちなみにそのときは、1日で R の使い方を覚えて、下の記事を書きました。
R はまだ覚えたてなので、今回も初級者向けの記事になっています。
gacco の統計学講座の日程上、25日目にエントリーすることになったのですが、後になって「トリ」というのに気付き、日が進むにつれて公開されていく皆さんのハイレベルなエントリーに正直、場違い感で身悶えております。
まあ、今後に期待ということで生温かい目で見てあげてください。
参考
R
*1:統計局ホームページ/家計調査 収支項目分類 改定内容(平成22年1月改定)
*2:read.csv(xxx, fileEncoding="cp932") でも回避できませんでした。
*3:因子ベクトルとして取り込まれてしまう?