R

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

統計的な処理をやったことがなかったので、それに特化された言語の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日現在)

  • Ⅰ アジア
    • インド
    • インドネシア
    • カンボジア
    • シンガポール
    • スリランカ
    • タイ
    • 韓国
    • 台湾
    • 中国
    • ネパール
    • パキスタン
    • バングラデシュ
    • 東ティモール
    • フィリピン
    • ブータン
    • ブルネイ
    • ベトナム
    • マレーシア
    • ミャンマー
    • モルディブ
    • モンゴル
    • ラオス
  • Ⅱ 大洋州
    • オーストラリア
    • 北マリアナ諸島(米領-在サイパン事)
    • キリバス
    • グアム(在ハガッニャ総領事館)
    • クック諸島
    • サモア(米領)
    • サモア独立国
    • ソロモン諸島
    • ツバル
    • トンガ
    • ナウル
    • ニウエ
    • ニューカレドニア(仏領)
    • ニュージーランド
    • バヌアツ
    • パプアニューギニア
    • パラオ
    • フィジー
    • ポリネシア(仏領-タヒチ)
    • マーシャル
    • ミクロネシア
  • Ⅲ 北米
    • 米国
    • カナダ
    • グリーンランド(デンマーク領)
  • Ⅳ 中米
    • アルバ島(蘭領)
    • アンティグア・バーブーダ
    • アンティル諸島(蘭領)
    • エルサルバドル
    • キュラカオ島(蘭領)
    • キューバ
    • グアテマラ
    • グァドループ島(仏領)
    • グレナダ
    • コスタリカ
    • ジャマイカ
    • セントクリストファー・ネーヴィス
    • セントビンセント及びグレナディーン諸島
    • セントマーティン島(蘭領)
    • セントルシア
    • ドミニカ共和国
    • ドミニカ国
    • トリニダード・トバゴ
    • ニカラグア
    • バージン諸島(米領)
    • バージン諸島(英領)
    • ハイチ
    • パナマ
    • バハマ
    • バルバドス
    • プエルトリコ(米領)
    • ベリーズ
    • ホンジュラス
    • マルティニーク島(仏領)
    • メキシコ
  • Ⅴ 南米
    • アルゼンチン
    • ウルグアイ
    • エクアドル
    • ガイアナ
    • ギアナ(仏領)
    • コロンビア
    • スリナム
    • チリ
    • パラグアイ
    • ブラジル
    • ベネズエラ
    • ペルー
    • ボリビア
  • Ⅵ 西欧
    • アイスランド
    • アイルランド
    • アンドラ
    • イタリア
    • 英国
    • エストニア
    • オーストリア
    • オランダ
    • キプロス
    • ギリシャ
    • サンマリノ
    • スイス
    • スウェーデン
    • スペイン
    • デンマーク
    • ドイツ
    • ノルウェー
    • バチカン
    • フィンランド
    • フェロー諸島(デンマーク領)
    • フランス
    • ベルギー
    • ポルトガル
    • マルタ
    • モナコ
    • ラトビア
    • リトアニア
    • リヒテンシュタイン
    • ルクセンブルク
  • Ⅶ 東欧・旧ソ連
    • アゼルバイジャン
    • アルバニア
    • アルメニア
    • ウクライナ
    • ウズベキスタン
    • カザフスタン
    • キルギス
    • クロアチア
    • コソボ
    • ジョージア
    • スロバキア
    • スロベニア
    • セルビア
    • タジキスタン
    • チェコ
    • トルクメニスタン
    • ハンガリー
    • ブルガリア
    • ベラルーシ
    • ポーランド
    • ボスニア・ヘルツェゴビナ
    • マケドニア旧ユーゴスラビア共和国
    • モルドバ
    • モンテネグロ
    • ルーマニア
    • ロシア
  • Ⅷ 中東
    • アフガニスタン
    • アラブ首長国連邦
    • イエメン
    • イスラエル及びガザ地区等
    • イラク
    • イラン
    • オマーン
    • カタール
    • クウェート
    • サウジアラビア
    • シリア
    • トルコ
    • バーレーン
    • ヨルダン
    • レバノン
  • Ⅸ アフリカ
    • アルジェリア
    • アンゴラ
    • ウガンダ
    • エジプト
    • エチオピア
    • エリトリア
    • ガーナ
    • カーボヴェルデ
    • ガボン
    • カメルーン
    • ガンビア
    • ギニア
    • ギニアビサウ
    • ケニア
    • コートジボワール
    • コモロ
    • コンゴ共和国
    • コンゴ民主共和国
    • サントメ・プリンシペ
    • ザンビア
    • シエラレオネ
    • ジブチ
    • ジンバブエ
    • スーダン
    • スワジランド
    • セーシェル
    • 赤道ギニア
    • セネガル
    • ソマリア
    • タンザニア
    • チャド
    • 中央アフリカ
    • チュニジア
    • トーゴ
    • ナイジェリア
    • ナミビア
    • 西サハラ
    • ニジェール
    • ブルキナファソ
    • ブルンジ
    • ベナン
    • ボツワナ
    • マダガスカル
    • マラウィ
    • マリ
    • 南アフリカ
    • 南スーダン
    • モーリシャス
    • モーリタニア
    • モザンビーク
    • モロッコ
    • リビア
    • リベリア
    • ルワンダ
    • レ・ユニオン(仏領)
    • レソト
  • Ⅹ 南極
    • 南極

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