国民生活基礎統計のデータを使って統計っぽい事をする
はじめに
gaccoの「社会人のためのデータサイエンス」を受講している。すごく丁寧で分かりやすいので、おススメ。
ただ、動画見て勉強した気になってる気配が出てきたので、何かしらアウトプットする。
折角なので第2週までの成果を出したい。
肩慣らし
データの取得
データを取得して分散などを出してみる。まずはe-Statの国民生活基礎統計からよさげなデータを見繕う。
今回は21 都道府県(第227表~第259表)
の250 65歳以上の者のいる世帯数,世帯構造・都道府県-21大都市(再掲)別
を選んだ。
65歳以上の者のいる世帯数,世帯構造・都道府県-21大都市(再掲)別
早速ダウンロードして開く
はい、いつもの奴
どうも文字コードがSJISっぽいのでvimで変換する。vimで開いて、
:e ++encoding=sjis
:set fenc=utf8
で保存して再度開くと文字化けがなおる。
UTF-8でも提供してほしい
CSVヘッダーがファンキーな理由は多分Excelごっこ大人の事情だ。
スペースで位置を合わせると何となくわかると思う
表にするとこんな感じ
column no | column name |
---|---|
1 | 都道府県 21大都市 |
2 | 総数 |
3 | 単独世帯 - 総数 |
4 | 単独世帯 - 男性 |
5 | 単独世帯 - 女性 |
6 | 核家族世帯 - 総数 |
7 | 核家族世帯 - 夫婦のみ |
8 | 核家族世帯 - 夫婦と子のみ |
9 | 核家族世帯 - ひとり親と未婚の子のみ |
10 | 三世代世帯 |
11 | その他世代 |
データの整形
全部の項目は使わないので、データを絞る。都道府県だけに絞ってヘッダも削除する
cat h1250.csv | sed '1,7d' | head -n 47
更に、項目も世帯総数と単独世帯の総数に絞る
cat h1250.csv | sed '1,7d' | head -n 47 | awk -F, '{ printf("%s %s %s\n", $1, $2, $3); }' > stat_data.csv
こんな感じ
よくある統計量を出してみる
出すのは平均・分散・標準偏差。おさらい的に書くと、
項目 | 説明 |
---|---|
平均 | 算術平均。全部足して項目数で割ったやつ |
偏差 | 値から平均を差っ引いた奴 |
分散 | 偏差の2乗を全部足して項目数で割ったやつ |
標準偏差 | 分散の平方根 |
まずは平均
datafile="stat_data.csv"
cat ${datafile} | \
awk 'BEGIN{a=0;sum1=0;sum2=1;} {a++;sum1 += $2; sum2 += $3} END{printf("%s, %s\n", (sum1/a), (sum2/a));}'
世帯数の平均は544。単独世帯数の平均は156。
平均が出たら次は分散
datafile="stat_data.csv"
homeCountAvg=544
cat ${datafile} | \
awk -v AVG=${homeCountAvg} 'BEGIN{sum=0} {sum += (($2 - AVG) ** 2)} END{printf("%s\n", sum / 47);}'
singleHomeCountAvg=156
cat ${datafile} | \
awk -v AVG=${singleHomeCountAvg} 'BEGIN{sum=0} {sum += (($3 - AVG) ** 2)} END{printf("%s\n", sum / 47);}'
世帯数の分散は280,951。単独世帯数の分散は32,847。当たり前だがかなりばらつく。
分散が出たら標準偏差
datafile="stat_data.csv"
homeCountAvg=544
cat ${datafile} | \
awk -v AVG=${homeCountAvg} 'BEGIN{sum=0} {sum += (($2 - AVG) ** 2)} END{printf("%s\n", sqrt(sum / 47));}'
singleHomeCountAvg=156
cat ${datafile} | \
awk -v AVG=${singleHomeCountAvg} 'BEGIN{sum=0} {sum += (($3 - AVG) ** 2)} END{printf("%s\n", sqrt(sum / 47));}
世帯数の標準偏差は530。単独世帯数の標準偏差は181。
ついでに偏差値も出してみる。
項目 | 説明 |
---|---|
偏差値 | 標準化した値 * 10 + 50 |
標準化した値 | 偏差 / 標準偏差 |
echo "世帯数の偏差値"
homeCountAvg=544
homeCountStdDiv=530
cat ${datafile} | \
awk -v AVG=${homeCountAvg} -v STDDIV=${homeCountStdDiv} \
'{printf("%s\t%s\n", $1, ($2 - AVG) / STDDIV * 10 + 50 );}'
echo "単独世帯数の偏差値"
singleHomeCountAvg=156
singleHomeCountStgDiv=181
cat ${datafile} | \
awk -v AVG=${homeCountAvg} -v STDDIV=${homeCountStdDiv} \
'{printf("%s\t%s\n", $1, ($3 - AVG) / STDDIV * 10 + 50 );}'
最後に無理くりヒストグラムを書いてみる
datafile="stat_data.csv"
echo "世帯数のヒストグラム"
cat ${datafile} | \
awk '{print int($2/50)}' | \
awk '{sums[$1] += 1}
END{
for(key in sums) {
printf("%s - \t: ", (key * 50));
for(i = 0; i < sums[key]; i++) { printf("+"); }
printf("\n");
}
}'
echo "単独世帯数のヒストグラム"
cat ${datafile} | \
awk '{print int($2/50)}' | \
awk '{sums[$1] += 1}
END{
for(key in sums) {
printf("%s - \t: ", (key * 50));
for(i = 0; i < sums[key]; i++) { printf("+"); }
printf("\n");
}
}'
総世帯と単独世帯の関係を考える
軽く生まれ故郷の偏差値を確認したところで、世帯数と単独世帯数の関係を考えてみる。
大学の偉い先生たちから学んだことを生かす時だ。
まずは世帯数と単独世帯数に対して仮説を立てる。
単独世帯数が増えると世帯数も増える
何言ってんだコイツとか思わないで欲しい。考えるのが面倒だった。折角データがあるのだから色んな角度から仮説が正しい事を確認したい。
散布図で確かめる
まずはお手本通り散布図を書いてみる。流石にシェルでは厳しいのでGoogle Drive。
確かに右肩上がりの関係。単独世帯数が増えれば増えるほど世帯数が上がる。
ただし、これでは納得できない。数字で右肩上がりを確かめたい。
共分散で確かめる
右肩上がりを簡単に調べる方法と言えば共分散。共分散を計算してプラスなら右肩上がりだ。
項目 | 説明 |
---|---|
共分散 | y偏差 * x偏差の合計をデータ数で割ったやつ |
echo "共分散"
datafile="stat_data.csv"
homeCountAvg=544
singleHomeCountAvg=156
cat ${datafile} | \
awk -v YAVG=${homeCountAvg} -v XAVG=${singleHomeCountAvg} \
'BEGIN{sum=0} {sum += ($2 - YAVG) * ($3 - XAVG)} END {print sum / 47}'
共分散は94789。確かに右肩上がり。ただこれだけでは、ともに右肩上がりと言うだけだ。
相関係数で確かめる
いい加減疲れてきたので最後にする。大学の偉い人が「相関係数はいいぞ」って言ってたから相関係数を出す。
と言うか散布図的に直線っぽいし、外れ値もそんなにない。相関係数が有用と判断した。
項目 | 説明 |
---|---|
相関係数 | 共分散 / (y標準偏差 * x標準偏差) |
echo '相関係数'
homeCountStdDiv=530
singleHomeCountStgDiv=181
echo "" | \
awk -v YSTDDIV=${homeCountStdDiv} -v XSTDDIV=${singleHomeCountStgDiv} '{ printf("%s\n", 94798 / (YSTDDIV * XSTDDIV)); }'
相関係数は驚異の0.9882!!高い!これには俺も大満足。
世帯数を増やしたいなら単独世帯数を増やせばいい(当たり前)。
ふりかえり
どことなく間違ってる気もするけど、気にしない勇気は大事にしたいなと思った。
Author And Source
この問題について(国民生活基礎統計のデータを使って統計っぽい事をする), 我々は、より多くの情報をここで見つけました https://qiita.com/miyatama/items/782941b7ac4e513c6684著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .