Rで人口ピラミッドを描く

国立社会保障・人口問題研究所の日本の将来推計人口(平成24年1月推計)(2002年1月30日) のデータをつかい、将来の人口ピラミッドの推移をRで描いてみよう。

既に、人口問題研究所では人口ピラミッドの推移を提供している(不気味なアニメーションだ)。 これと同じような人口ピラミッドを描くことが目的だ。

Rパッケージ pyramid を入手する

いささか天下りだが、Rで人口ピラミッドを描くパッケージ(でも、R内ではライブラリという)を使ってしまう(^^;

現在のパッケージの読み込み情況

現在のRに読み込まれているパッケージは、Rの[パッケージとデータ]/[パッケージマネージャ]から一覧されるロード済みがそうである。 RStudioでは[Package]から一覧される[v]とチェックが入ったものがそうである。

パッケージ一覧にあるパッケージをRに読み込むには、以下で述べるように目的のパッケージにチェックを入れる。 そうすると、コンソール画面に選択したパッケージが読み込まれた旨のメッセージが表示される。


新規パッケージの入手

パッケージ一覧にないパッケージはCRAN(he Comprehensive R Archive Network)からインストールしよう。 Rの[パッケージとデータ]/[パッケージインストーラ]から、pyramidを入力して「一覧を取得」。 2012年5月現在で、リポジトリにあるのは pyramid 1.2 であることがわかる。 これを選択し、「選択をインストール」で、pyramid がインストールされる。

RStudioでは、[Package/Install]から目的のパッケージ名 pyramid を正しく入力して[Install]ボタンを押す。 すると、コンソールに次のようにinstall.packages("pyramid")コマンドが実行されてダウンロードされたことがわかる。

> install.packages("pyramid")
 URL 'http://cran.rstudio.com/bin/macosx/mavericks/contrib/3.2/pyramid_1.4.tgz' を試しています 
Content type 'application/x-gzip' length 24209 bytes (23 KB)
==================================================
downloaded 23 KB

以上で、パッケージ pyramid を利用する準備が整った。


Rパッケージ pyramid を読み込む

Rを起動して、pyramidライブラリを使う準備は簡単、次のように入力するだけだ(記号 > はR世界のプロンプトなので入力する必要はない)。

> library(pyramid)

あるいは、RStudioでは、パッケージ一覧にある pyramid をチェックするだけでもよい。 コンソールには次のようなメッセージが表示される。

> library("pyramid", lib.loc="/Library/Frameworks/R.framework/Versions/3.2/Resources/library")

pyramidライブラリの詳しい使い方を知りたければ、つぎのようにヘルプを呼び出す。

> ?pyramid
あるいは、RStudioのパッケージ一覧のパッメージ名をクリックする。


日本の将来推定人口データを取り出す

人口ピラミッドに必要なデータは、年齢階級区分(1年ごとなら年齢のまま、5年ごとなら、0-4歳、5-9歳と集計)と男女年齢別(推定)人口だけです。 公表されているExcelデータをRで読めるように(場合によっては、データを抜き出す/再構成するとかして)、機械可読データ(csv形式)として保存する。

  1. 元データの入手:日本の将来推計人口(平成24年1月推計)から、[詳細結果表]->[推計結果表]を進んで、将来推計人口2011~2060年の「 表1.出生中位(死亡中位)推計」を選んで、表1−9  男女年齢各歳別人口のExcelデータをPCにダウンロードする)。
  2. 提供データの検討:ダウンロードしたデータをExcelで開いてみると、アリャ〜〜!。 提供されている表データにおいて、レコード(データの並び)は一列に並んでいない (-.-;) A列に5行目の0歳から59行目の54歳まで、F列に5行目の55歳から55行目の103歳以上まで、と2列に渡ってレコードデータが並んでいる。 人にはスクロールしないでデータが一覧できるので親切なようだが、一括処理したい場合には優しいとは言えない。
  3. シート:表1-9(4)の平成25年の推定値データを一列に並べかえて、新しい表を作成する。 新しくブック(または新たなシート)を新規作成して、その空白シートにレコードデータが1列に並ぶように貼りつける。 空白シートに貼りつけるデータは、シート:表1-9(4)の範囲 A3:D59 および F3:I55 である。
  4. まず、表1-9(4)の範囲 A3:D59 をドラッグし選択してからコピー(Ctrl-c)、たとえば空白シートのセル A3 をクリックしてから貼りつけ(Ctr-v)。 次に、表1-9(4)の範囲 F3:I55 をコピーして、上記で貼り付けた最終レコードの次行のセル A60をクリックしてから貼りつけ。 参考のために、表1-9(4)の先頭の2行(範囲 A1:A2)をコピーして、新しいシートのセル A1 をクリックしれ貼りつけておこう。 ただし、新しいシートの4行目は総数で、今の目的には不要なので削除しておく。
  5. こうして改めて貼り付けた全データは数値として取り扱うために、範囲を選択した上で、[書式]/[セル]から表示形式を数値にする(桁区切り(,)は『使用しない』)。
  6. csv形式のファイルで保存する。 [ファイル]/[別名で保存]からcsv形式を指定して、たとえば、ファイル名 2013-population.csvで保存。 さらに、保存したcsv形式のファイルをテキストエディタで開いて、年齢を age, 総数を total, 男を male,女を femaleに書き換え、文字コードを Shift-JISから UTF-8に変更しておく(Rでは感じが苦手な場合もある。 Rのデフォルト文字コードはR環境で設定できるが、今後のことを考えるとUTF-8が望ましい)。 これでRで読み込ませるデータファイル 2013-population.csv の準備が完了。

Rで人口ピラミッドを描く

以下では、データファイル 2013-population.csv をRで読み込ませるためのRの作業ディレクトリとして、ファイル2013-population.csvが置かれている場所を設定している。 これがどういうことなのかは、データファイルの読み込みと書き出しを参照。

  1. まず、ライブラリ pyramid を読み込みこむ。
    > library(pyramid)
    

  2. テキスト表データファイルの全レコードを関数 read.table( ) を使って読み込む。 人口データファイル 2013-population.csv を読み込むには次のように書く(目的ファイルへのファイルパス指定の記述法についてついては、データファイルの読み込みと書き出しを参照)。
    > p <- read.table("2013-population.csv",sep=",",header=TRUE,skip=2)
    
    記法 <- は、右辺のデータを左辺の変数に代入するという代入記号。 今の場合、「変数 p に読み込んだファイル情報を格納する」の意味です。 データファイルの先頭からたとえば2行までをコメントとして読み飛ばす(読み込まない)ときには、skip=2 とします。 skipで読み飛ばした実質的に1行目(先頭レコード)がデータ値でなく、フィールド名の並びとなっている行をヘッダー(header)という。 先頭レコードがヘッダーであるがどうかを header=TRUE で指定。 sep="," は、csvファイルのレコードデータにおける区切り記号がカンマ (,) であるという意味。
  3. ちゃんとデータが読み込まれているかを確認する。 次のように変数名 p を入力するだけだ。 このとき、ヘッダを除いたレコード(データ並び)には、左端に1から始まる行番号が付与され、読み込んだレコード内容が1行ずつ表示される。 元のデータファイルの3行目にあった(skip=2で読み飛ばしたために、実質的に読み込んだ)先頭レコードはラベル名の並び age, total, male, femaleとなっていることに注意しよう。 read.table で header=TRUE としたためだ。
    > p
          age total male femal
    1      0   1004  515   489
    2      1   1018  522   496
    3      2   1051  540   512
    4      3   1039  532   507
    5      4   1042  533   509
    6      5   1072  548   523
    7      6   1067  546   521
    8      7   1059  542   517
    9      8   1056  540   515
    ...
    ...
    104  103      6    1     5
    105  104      3    0     3
    106 105+      4    0     3
    
  4. 表データの指定した列のデータだけを表示させる。 たとえば、age列(1列目)に並んでいるデータ 0,1,2,3,4,5,...を表示させるには、age列が行列データの1列目であることに注意して p[,1] で指定する。
    > p[,1]
      [1] 0     1     2     3     4     5     6     7     8     9     10    11   
     [13] 12    13    14    15    16    17    18    19    20    21    22    23   
     [25] 24    25    26    27    28    29    30    31    32    33    34    35   
     [37] 36    37    38    39    40    41    42    43    44    45    46    47   
     [49] 48    49    50    51    52    53    54    55    56    57    58    59   
     [61] 60    61    62    63    64    65    66    67    68    69    70    71   
     [73] 72    73    74    75    76    77    78    79    80    81    82    83   
     [85] 84    85    86    87    88    89    90    91    92    93    94    95   
     [97] 96    97    98    99    100   101   102   103   104   105+ 
    106 Levels: 0  1  10  100  101  102  103  104  105+  11  12  13  14  15  ... 99 
    
    左端の[1],[13],[25],..は、リストデータの表示された左端が[1]個目(データは 0)、[13]個目(データは 12)、[25]個目(データは 24)であることを示している(ウィンドウ幅などによって異なる)。 female列(4列目)のデータシストを表示するには、4列目であることから p[,4] と表すことになる。
  5. pyramidライブラリの使い方によれば、上のようなデータセットについては、次のように入力すると(コピペしてください)、人口ピラミッド図が得られる(詳しくはパッケージ pyramidのhelp参照)。 Leftにはmale列のデータを、Rightにはfemale列のデータを、Centerにはage列のデータをセットしなければなりません。 したがって、読み込んだデータセット p の場合にはそれぞれ p[,3], p[,4], p[,1] とするわけだ。
    p <- read.table("2013-population.csv",sep=",",header=TRUE,skip=2)
    pyramids(Left=p[,3], Right=p[,4], Center=p[,1], Laxis=seq(0,1200,len=7),
    Clab="Age", Llab="Male", Rlab="Female", Cstep=10,
    main="Population Pyramid of Japan 2013(unit: 10^3 )\n ")
    
    
    Population Pyramid 2013

演習

平成72年(2060年)の推定値の人口ピラミッド図を書きなさい。 このために作成するデータファイル名を 2060-population.csv とします。