Edited at

macOS + Rをつかってcsvデータをビジュアライズしてみる

More than 1 year has passed since last update.

統計的な処理をやったことがなかったので、それに特化された言語のRをいじってみた。


データソース候補

海外在留邦人数調査統計 統計表一覧 | 外務省


  • 平成29年(2017年)要約版(平成28年10月1日現在)(閲覧用(PDF))(印刷用(PDF))(Excel 1)(Excel 2)(Excel 3)(CSV)

  • 平成29年(2017年)詳細版(平成28年10月1日現在)(PDF 1)(PDF 2)(Excel 1 )(Excel 2 )(CSV 1)(CSV 2)

  • 平成28年(2016年)要約版(平成27年10月1日現在)(閲覧用(PDF))(印刷用(PDF))(Excel 1)(Excel 2)(CSV)

  • 平成28年(2016年)詳細版(平成27年10月1日現在)(PDF 1)(PDF 2)(Excel 1 )(Excel 2 )(CSV 1)(CSV 2)

  • 平成27年(2015年)要約版(平成26年10月1日現在)(閲覧用(PDF))(印刷用(PDF))(Excel 1)(Excel 2)(CSV)

  • 平成27年(2015年)詳細版(平成26年10月1日現在)(PDF 1)(PDF 2)(Excel 1 )(Excel 2 )(CSV 1)(CSV 2)

  • 平成26年(2014年)要約版(平成25年10月1日現在)(閲覧用(PDF))(印刷用(PDF))(Excel 1)(Excel 2)(CSV)

  • 平成26年(2014年)詳細版(平成25年10月1日現在)(PDF 1)(PDF 2)(Excel 1)(Excel 2)(CSV 1)(CSV 2)

  • 平成25年(2013年)要約版(平成24年10月1日現在)(閲覧用(PDF))(印刷用(PDF))(Excel )(CSV)

  • 平成24年(2012年)速報版(平成23年10月1日現在)(閲覧用(PDF))(印刷用(PDF)) (Excel) (CSV) 詳細版-1(PDF) 詳細-2(PDF)

これらの中から、CSVを使うと思ったが、おそろしく毎年データ形式がちがうのでデータソースを

「平成29年(2017年)要約版(平成28年10月1日現在)」を部分的に絞って整形して使用する

H14-H28 (2002-2016)


  • 在留邦人総数 h28-h14


    1. 永住者

    2. 長期滞在者


      1. 民間企業関係者

      2. 報道関係者





  • 本人と家族も含み、男女の合計である

xlsxファイルをNumbers.appで加工してutf-8のcsvにしておく

    H28 H27 H26 H25 H24 H23 H22 H21 H20 H19 H18 H17 H16 H15 H14

Ⅰ アジア 392216 385507 379498 362878 362022 331796 312767 302469 292632 287157 277735 260747 234734 206521 187952
Ⅱ 大洋州 118452 114436 108903 105067 100320 95198 91186 91189 86553 82491 78099 72871 67887 63018 63588
Ⅲ 北米 491844 485864 477507 474996 472835 454835 442900 437308 436532 422116 414552 397585 380228 369639 352358
Ⅳ 中米 14419 12354 12125 11352 11112 10167 9784 9546 9292 9021 8780 8700 7810 7584 6977
Ⅴ 南米 79615 79608 80213 82756 81754 82029 83831 85009 85750 85974 88662 89701 92676 94310 95652
Ⅵ 西欧 213202 211445 204711 194406 194878 182836 177380 180622 180742 174713 174138 162643 159528 152833 150587
Ⅶ 東欧・旧ソ連 9806 9249 9061 8968 8783 8112 7823 7916 8051 8002 7656 7132 6297 5715 5109
Ⅷ 中東 10962 10569 10083 9773 9606 9452 9695 9832 9754 8845 7685 7062 6077 5857 5608
Ⅸ アフリカ 7931 8020 8050 8037 8236 8102 7963 7888 7658 7317 6351 6069 6028 5541 5770
Ⅹ 南極 30 26 24 30 31 30 28 28 29 35 37 37 42 44 40


Rのインストール

homebrewはgcc依存で時間がかかりそうだったので、公式のBinary R for Mac OS X でインストール。

XQuartz も必要。


Rの起動と終了

r でなく R

% R

R version 3.4.3 (2017-11-30) -- "Kite-Eating Tree"
Copyright (C) 2017 The R Foundation for Statistical Computing
Platform: x86_64-apple-darwin15.6.0 (64-bit)

R は、自由なソフトウェアであり、「完全に無保証」です。
一定の条件に従えば、自由にこれを再配布することができます。
配布条件の詳細に関しては、'license()' あるいは 'licence()' と入力してください。

R は多くの貢献者による共同プロジェクトです。
詳しくは 'contributors()' と入力してください。
また、R や R のパッケージを出版物で引用する際の形式については
'citation()' と入力してください。

'demo()' と入力すればデモをみることができます。
'help()' とすればオンラインヘルプが出ます。
'help.start()' で HTML ブラウザによるヘルプがみられます。
'q()' と入力すれば R を終了します。

[以前にセーブされたワークスペースを復帰します]
> q()
Save workspace image? [y/n/c]: n


データの読み込み

いろいろ、読み込み方があり、cp932を指定した方もあるが、今回はわざわざやらないで

utf-8のファイルを read.table() で読み込みする。

> csv <- read.csv('./h28_mod.tsv')

> mode(csv)
[1] "list"
> colnames(csv)
[1] "H28.H27.H26.H25.H24.H23.H22.H21.H20.H19.H18.H17.H16.H15.H14"
> rownames(csv)
[1] "1" "2" "3" "4" "5" "6" "7" "8" "9" "10"
>

> library(readr)
> csv <- read_csv('./h28_mod.tsv')
> mode(csv)
[1] "list"
> colnames(csv)
[1] "\tH28\tH27\tH26\tH25\tH24\tH23\tH22\tH21\tH20\tH19\tH18\tH17\tH16\tH15\tH14"
> rownames(csv)
[1] "1" "2" "3" "4" "5" "6" "7" "8" "9" "10"

> df <- read.table('./h28_mod.tsv')
> mode(df)
[1] "list"
> colnames(df)
[1] "H28" "H27" "H26" "H25" "H24" "H23" "H22" "H21" "H20" "H19" "H18" "H17"
[13] "H16" "H15" "H14"
> rownames(df)
[1] "Ⅰ アジア" "Ⅱ 大洋州" "Ⅲ 北米" "Ⅳ 中米"
[5] "Ⅴ 南米" "Ⅵ 西欧" "Ⅶ 東欧・旧ソ連" "Ⅷ 中東"
[9] "Ⅸ アフリカ" "Ⅹ 南極"

統計処理に特化されていて便利そう。

> summary(data)

Ⅰ アジア Ⅱ 大洋州 Ⅲ 北米 Ⅳ 中米
Min. :187952 Min. : 63018 Min. :352358 Min. : 6977
1st Qu.:269241 1st Qu.: 75485 1st Qu.:406068 1st Qu.: 8740
Median :302469 Median : 91186 Median :437308 Median : 9546
Mean :305109 Mean : 89284 Mean :434073 Mean : 9935
3rd Qu.:362450 3rd Qu.:102694 3rd Qu.:473916 3rd Qu.:11232
Max. :392216 Max. :118452 Max. :491844 Max. :14419
Ⅴ 南米 Ⅵ 西欧 Ⅶ 東欧・旧ソ連 Ⅷ 中東
Min. :79608 Min. :150587 Min. :5109 Min. : 5608
1st Qu.:81892 1st Qu.:168390 1st Qu.:7394 1st Qu.: 7374
Median :85009 Median :180622 Median :8002 Median : 9606
Mean :85836 Mean :180978 Mean :7845 Mean : 8724
3rd Qu.:89182 3rd Qu.:194642 3rd Qu.:8876 3rd Qu.: 9802
Max. :95652 Max. :213202 Max. :9806 Max. :10962
Ⅸ アフリカ Ⅹ 南極
Min. :5541 Min. :24.00
1st Qu.:6210 1st Qu.:28.50
Median :7888 Median :30.00
Mean :7264 Mean :32.73
3rd Qu.:8028 3rd Qu.:37.00
Max. :8236 Max. :44.00


データの変形

行列の入れ替えが必要なので t() で入れ替える。

x軸のyearラベルと凡例でつかう areaラベルを設定する。

> df

H28 H27 H26 H25 H24 H23 H22 H21 H20
Ⅰ アジア 392216 385507 379498 362878 362022 331796 312767 302469 292632
Ⅱ 大洋州 118452 114436 108903 105067 100320 95198 91186 91189 86553
Ⅲ 北米 491844 485864 477507 474996 472835 454835 442900 437308 436532
Ⅳ 中米 14419 12354 12125 11352 11112 10167 9784 9546 9292
Ⅴ 南米 79615 79608 80213 82756 81754 82029 83831 85009 85750
Ⅵ 西欧 213202 211445 204711 194406 194878 182836 177380 180622 180742
Ⅶ 東欧・旧ソ連 9806 9249 9061 8968 8783 8112 7823 7916 8051
Ⅷ 中東 10962 10569 10083 9773 9606 9452 9695 9832 9754
Ⅸ アフリカ 7931 8020 8050 8037 8236 8102 7963 7888 7658
Ⅹ 南極 30 26 24 30 31 30 28 28 29
H19 H18 H17 H16 H15 H14
Ⅰ アジア 287157 277735 260747 234734 206521 187952
Ⅱ 大洋州 82491 78099 72871 67887 63018 63588
Ⅲ 北米 422116 414552 397585 380228 369639 352358
Ⅳ 中米 9021 8780 8700 7810 7584 6977
Ⅴ 南米 85974 88662 89701 92676 94310 95652
Ⅵ 西欧 174713 174138 162643 159528 152833 150587
Ⅶ 東欧・旧ソ連 8002 7656 7132 6297 5715 5109
Ⅷ 中東 8845 7685 7062 6077 5857 5608
Ⅸ アフリカ 7317 6351 6069 6028 5541 5770
Ⅹ 南極 35 37 37 42 44 40

> data <- t(df)
> data
Ⅰ アジア Ⅱ 大洋州 Ⅲ 北米 Ⅳ 中米 Ⅴ 南米 Ⅵ 西欧 Ⅶ 東欧・旧ソ連 Ⅷ 中東
H28 392216 118452 491844 14419 79615 213202 9806 10962
H27 385507 114436 485864 12354 79608 211445 9249 10569
H26 379498 108903 477507 12125 80213 204711 9061 10083
H25 362878 105067 474996 11352 82756 194406 8968 9773
H24 362022 100320 472835 11112 81754 194878 8783 9606
H23 331796 95198 454835 10167 82029 182836 8112 9452
H22 312767 91186 442900 9784 83831 177380 7823 9695
H21 302469 91189 437308 9546 85009 180622 7916 9832
H20 292632 86553 436532 9292 85750 180742 8051 9754
H19 287157 82491 422116 9021 85974 174713 8002 8845
H18 277735 78099 414552 8780 88662 174138 7656 7685
H17 260747 72871 397585 8700 89701 162643 7132 7062
H16 234734 67887 380228 7810 92676 159528 6297 6077
H15 206521 63018 369639 7584 94310 152833 5715 5857
H14 187952 63588 352358 6977 95652 150587 5109 5608
Ⅸ アフリカ Ⅹ 南極
H28 7931 30
H27 8020 26
H26 8050 24
H25 8037 30
H24 8236 31
H23 8102 30
H22 7963 28
H21 7888 28
H20 7658 29
H19 7317 35
H18 6351 37
H17 6069 37
H16 6028 42
H15 5541 44
H14 5770 40

> area <- colnames(data)
> area
[1] "Ⅰ アジア" "Ⅱ 大洋州" "Ⅲ 北米" "Ⅳ 中米"
[5] "Ⅴ 南米" "Ⅵ 西欧" "Ⅶ 東欧・旧ソ連" "Ⅷ 中東"
[9] "Ⅸ アフリカ" "Ⅹ 南極"

> rownames(data)
[1] "H28" "H27" "H26" "H25" "H24" "H23" "H22" "H21" "H20" "H19" "H18" "H17"
[13] "H16" "H15" "H14"
> year <- c(2016:2002)
> year
[1] 2016 2015 2014 2013 2012 2011 2010 2009 2008 2007 2006 2005 2004 2003 2002


複数データの図の描画

plot() だと同時に描画できないので、 matplot() を使う

> matplot(data)

50 件以上の警告がありました (最初の 50 個の警告を見るには warnings() を使って下さい)
> warnings()
警告メッセージ:
1: In plot.xy(xy, type, ...) :
フォントファミリー "Arial" に対してフォントが見つかりません
2: In plot.xy(xy, type, ...) :
フォントファミリー "Arial" に対してフォントが見つかりません..
..
..


日本語フォントの指定

area が日本語なので、対応したフォントを指定しないといけない。

macOSでは、quartzFontを使って生成・指定ができる。

Roman, Bold, Italic, BoldItalic の順でlistで指定する

(日本語フォントだとItalicはないので Regular, Bold, Regular, Bold)

family に quartzFontsで追加したものを指定する

> quartzFonts()

$serif
[1] "Times-Roman" "Times-Bold" "Times-Italic" "Times-BoldItalic"

$sans
[1] "Helvetica" "Helvetica-Bold" "Helvetica-Oblique"
[4] "Helvetica-BoldOblique"

$mono
[1] "Courier" "Courier-Bold" "Courier-Oblique"
[4] "Courier-BoldOblique"

> quartzFonts("ricty" = c("Ricty-Regular", "Ricty-Bold", "Ricty-Regular", "Ricty-Bold"))
> quartzFonts()
$serif
..
..
..
$ricty
[1] "Ricty-Regular" "Ricty-Bold" "Ricty-Regular" "Ricty-Bold"

> par(family = "ricty")

matplot(year, data)

Screenshot 2018-01-22 21.45.24.png

Screenshot 2018-01-22 21.49.42.png


大きな桁数の数字が指数表示にならないようにする

scipenオプションが0になっているのを大きくしてあげればいい。

> 100000

[1] 1e+05
> options(scipen=100)
> 100000
[1] 100000

Screenshot 2018-01-22 21.50.49.png


凡例

グラフの line typeとcolorにあわせてあげる

> matplot(year, data, type='l', xlab="年", ylab="人数", main="在留邦人総数")

> legend('topleft', area)

Screenshot 2018-01-22 21.58.42.png

> matplot(year, data, type='o', xlab="年", ylab="日本人", main="在留邦人総数",lty=c(6:1), col=c(10:1), pch = c(1:10))

> legend('topleft', area, lty=c(6:1), col=c(10:1))

Screenshot 2018-01-22 21.59.47.png


参考にした


おまけ

それぞれのエリアについて(平成28年10月1日現在)


  • Ⅰ アジア


    • インド

    • インドネシア

    • カンボジア

    • シンガポール

    • スリランカ

    • タイ

    • 韓国

    • 台湾

    • 中国

    • ネパール

    • パキスタン

    • バングラデシュ

    • 東ティモール

    • フィリピン

    • ブータン

    • ブルネイ

    • ベトナム

    • マレーシア

    • ミャンマー

    • モルディブ

    • モンゴル

    • ラオス



  • Ⅱ 大洋州


    • オーストラリア

    • 北マリアナ諸島(米領-在サイパン事)

    • キリバス

    • グアム(在ハガッニャ総領事館)

    • クック諸島

    • サモア(米領)

    • サモア独立国

    • ソロモン諸島

    • ツバル

    • トンガ

    • ナウル

    • ニウエ

    • ニューカレドニア(仏領)

    • ニュージーランド

    • バヌアツ

    • パプアニューギニア

    • パラオ

    • フィジー

    • ポリネシア(仏領-タヒチ)

    • マーシャル

    • ミクロネシア



  • Ⅲ 北米


    • 米国

    • カナダ

    • グリーンランド(デンマーク領)



  • Ⅳ 中米


    • アルバ島(蘭領)

    • アンティグア・バーブーダ

    • アンティル諸島(蘭領)

    • エルサルバドル

    • キュラカオ島(蘭領)

    • キューバ

    • グアテマラ

    • グァドループ島(仏領)

    • グレナダ

    • コスタリカ

    • ジャマイカ

    • セントクリストファー・ネーヴィス

    • セントビンセント及びグレナディーン諸島

    • セントマーティン島(蘭領)

    • セントルシア

    • ドミニカ共和国

    • ドミニカ国

    • トリニダード・トバゴ

    • ニカラグア

    • バージン諸島(米領)

    • バージン諸島(英領)

    • ハイチ

    • パナマ

    • バハマ

    • バルバドス

    • プエルトリコ(米領)

    • ベリーズ

    • ホンジュラス

    • マルティニーク島(仏領)

    • メキシコ



  • Ⅴ 南米


    • アルゼンチン

    • ウルグアイ

    • エクアドル

    • ガイアナ

    • ギアナ(仏領)

    • コロンビア

    • スリナム

    • チリ

    • パラグアイ

    • ブラジル

    • ベネズエラ

    • ペルー

    • ボリビア



  • Ⅵ 西欧


    • アイスランド

    • アイルランド

    • アンドラ

    • イタリア

    • 英国

    • エストニア

    • オーストリア

    • オランダ

    • キプロス

    • ギリシャ

    • サンマリノ

    • スイス

    • スウェーデン

    • スペイン

    • デンマーク

    • ドイツ

    • ノルウェー

    • バチカン

    • フィンランド

    • フェロー諸島(デンマーク領)

    • フランス

    • ベルギー

    • ポルトガル

    • マルタ

    • モナコ

    • ラトビア

    • リトアニア

    • リヒテンシュタイン

    • ルクセンブルク



  • Ⅶ 東欧・旧ソ連


    • アゼルバイジャン

    • アルバニア

    • アルメニア

    • ウクライナ

    • ウズベキスタン

    • カザフスタン

    • キルギス

    • クロアチア

    • コソボ

    • ジョージア

    • スロバキア

    • スロベニア

    • セルビア

    • タジキスタン

    • チェコ

    • トルクメニスタン

    • ハンガリー

    • ブルガリア

    • ベラルーシ

    • ポーランド

    • ボスニア・ヘルツェゴビナ

    • マケドニア旧ユーゴスラビア共和国

    • モルドバ

    • モンテネグロ

    • ルーマニア

    • ロシア



  • Ⅷ 中東


    • アフガニスタン

    • アラブ首長国連邦

    • イエメン

    • イスラエル及びガザ地区等

    • イラク

    • イラン

    • オマーン

    • カタール

    • クウェート

    • サウジアラビア

    • シリア

    • トルコ

    • バーレーン

    • ヨルダン

    • レバノン



  • Ⅸ アフリカ


    • アルジェリア

    • アンゴラ

    • ウガンダ

    • エジプト

    • エチオピア

    • エリトリア

    • ガーナ

    • カーボヴェルデ

    • ガボン

    • カメルーン

    • ガンビア

    • ギニア

    • ギニアビサウ

    • ケニア

    • コートジボワール

    • コモロ

    • コンゴ共和国

    • コンゴ民主共和国

    • サントメ・プリンシペ

    • ザンビア

    • シエラレオネ

    • ジブチ

    • ジンバブエ

    • スーダン

    • スワジランド

    • セーシェル

    • 赤道ギニア

    • セネガル

    • ソマリア

    • タンザニア

    • チャド

    • 中央アフリカ

    • チュニジア

    • トーゴ

    • ナイジェリア

    • ナミビア

    • 西サハラ

    • ニジェール

    • ブルキナファソ

    • ブルンジ

    • ベナン

    • ボツワナ

    • マダガスカル

    • マラウィ

    • マリ

    • 南アフリカ

    • 南スーダン

    • モーリシャス

    • モーリタニア

    • モザンビーク

    • モロッコ

    • リビア

    • リベリア

    • ルワンダ

    • レ・ユニオン(仏領)

    • レソト



  • Ⅹ 南極


    • 南極



わかったこと、南極に家族をつれてはいかない