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形式)として保存する。
- 元データの入手:日本の将来推計人口(平成24年1月推計)から、[詳細結果表]->[推計結果表]を進んで、将来推計人口2011~2060年の「 表1.出生中位(死亡中位)推計」を選んで、表1−9 男女年齢各歳別人口のExcelデータをPCにダウンロードする)。
- 元データの検討:ダウンロードしたデータをExcelで開いてみると、アリャ〜〜!。 年齢が表データにおいて一列に並んでいません (-.-;) A列に5行目の0歳から59行目の54歳まで、F列に5行目の55歳から55行目の103歳以上まで、と2列に渡ってデータが並んでいます。 人にはスクロールしないでデータが一覧できるので親切なのですが、コンピュータには優しくありません。
- シート:表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が置かれている場所を設定しています。 これがどういうことなのかは、データファイルの読み込みと書き出しを参照して下さい。
- まず、ライブラリ pyramid を読み込みます。
> library(pyramid)
- 人口データファイル 2013-population.csv を次のようにして読み込みます(目的ファイルの場所についてついては、データファイルの読み込みと書き出しを参照)。
左辺の p は、「読み込んだファイル情報を変数 p に格納する」の意味です。
skip=2は、データファイルの先頭の2行はコメント扱いとして読み飛ばす(読み込まない)ためのものです。
sep="'" は、csvファイルのデータ区切りがカンマであるという意味。
> p <- read.table("2013-population.csv",sep=",",header=TRUE,skip=2)
- ちゃんとデータが読み込まれているかを確認しましょう。
変数 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
- 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] と表すことになります。 - 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 ")