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

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

既に、人口問題研究所では人口ピラミッドの推移を提供している。 これと同じものを描くことが目的だ。

準備:Rライブラリ pyramid

いささか天下りだが、Rで人口ピラミッドを描くライブラリを使ってしまう(^^;

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

Rを起動して、pyramidライブラリを使う準備は簡単、次のように入力するだけだ。
> library(pyramid)
pyramidライブラリの詳しい使い方を知りたければ、つぎのようにヘルプを呼び出す。
> ?pyramid

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

人口ピラミッドに必要なデータは、年齢階級区分(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-9(4)の範囲 A3:D59 および F3:I55 です。 まず、表1-9(4)の範囲 A3:D59 をドラッグし選択してからコピー(Ctrl-c)、空白シートのセル A3 をクリックしてから貼りつけ(Ctr-v)。 次に、表1-9(4)の範囲 F3:I55 をコピーして、新しいシートのセル A60をクリックしてから貼りつけ。 後々のために、表1-9(4)の先頭の2行(範囲 A1:A2)をコピーして、新しいシートのセル A1 をクリックしれ貼りつけ。 ただし、新しいシートの4行目は総数で、今の場合、不要なので削除します。 こうして得られたデータの4列目以下、つまり範囲 A4:D109 の値は数値として取り扱うために、範囲を選択した上で、[書式]/[セル]から表示形式を数値にしてください。 こうして、[ファイル]/[別名で保存]からcsv形式を指定して、たとえば、ファイル名 2013-population.csvで保存します。 最後に、保存したcsv形式のファイルをエディタで開いて、年齢を age, 総数を total, 男を male,女を femaleに書き換え、文字コードを Shift-JISから utf-8に変更して下さい。 これでRで読み込ませるデータファイル 2013-population.csv が得られ、準備は完了です。

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

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

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

  2. 人口データファイル 2013-population.csv を次のようにして読み込みます(目的ファイルの場所についてついては、データファイルの読み込みと書き出しを参照)。 左辺の p は、「読み込んだファイル情報を変数 p に格納する」の意味です。 skip=2は、データファイルの先頭の2行はコメント扱いとして読み飛ばす(読み込まない)ためのものです。 sep="'" は、csvファイルのデータ区切りがカンマであるという意味。
    > p <- read.table("2013-population.csv",sep=",",header=TRUE,skip=2)
    
  3. ちゃんとデータが読み込まれているかを確認しましょう。 変数 p を入力するだけです。 その結果として、左端に1から始まる行番号が付与され、読み込んだ内容が1行ずつ表示されます。 元のデータファイルの3行目にあったラベル 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列のデータリスト 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列目だから p[,4] と表すことになります。
  5. pyramidライブラリの使い方によると、上のようなデータセットについては、次のように入力すると(コピペしてください)、人口ピラミッド図が得られます。 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 とします。