サイトトップ | 人口学

人口ピラミッドの作り方
(How to make population pyramid)

最終更新:Feb. 7, 2013 (Thu)(末尾に,animationパッケージを利用したアニメgifの作り方を書いたページへのリンクを追加した)

このページの目的は,無料で簡単に人口ピラミッドを描く方法を説明することである。Windows環境での説明をするが,使うソフトはどちらもLinux版やFreeBSD版やMac版があるので,おそらくそれらの環境にも応用可能だろう。

用意するソフトウェアとインストール方法概要(2010年6月18日更新)

以下3種類のソフトを用意する。OpenOffice.orgはMicrosoft Officeほどではないが,統合オフィスソフトのため,快適に使うには標準以上のコンピュータは必要である。しかしRはネットブックでも快適に動作するし,ファイルサイズも小さい。人口ピラミッド描画のために開発したRのライブラリはRの標準コードだけを組み合わせて作ったので,他の依存パッケージはない。

  1. OpenOffice.org:オフィスソフトだが,人口ピラミッドを描く上で重要なのは,データ入力や編集に使う表計算プログラムCalcと,Rで作ったグラフを仕上げるのに使う作図ソフトDrawである。既にMicrosoft OfficeやKingsoft Officeが入っているなら,それで代用可能である。OpenOffice.orgについて,詳しくはOpenOffice.orgについてのTipsをご覧いただきたい。
  2. R:統計解析ソフトだが,人口ピラミッドを作るときに使うのはグラフ作成機能だけである。Windows版バイナリディレクトリ(筑波大ミラー兵庫教育大ミラー)からR-2.15.0-win.exeをダウンロードして実行すればインストールできる。詳しくは統計処理ソフトウェアRについてのTipsをご覧いただきたい。インストール後,デスクトップにできるアイコンをダブルクリックして起動し,"パッケージ"の"パッケージのインストール"を選び,CRANミラーサイトを指定して(日本では筑波大学サーバがいいと思う),後述する"pyramid"パッケージをインストールする。インターネットにつながっていないコンピュータの場合は,"パッケージ"の"ローカルにあるzipファイルからのパッケージのインストール"を選び,予めダウンロードしておいたpyramid_1.3.zip(下記)を指定する。なお,できるだけマウスを使いたくない場合は,CRANミラーからのパッケージインストールは,install.packages("pyramid")でも可能だし,ローカルzipからの場合は,utils:::menuInstallLocal()と打ってからpyramid_1.3.zipを選ぶのでも良い。
  3. R用のpyramidライブラリ中澤が作成した。リンク先に開発過程をメモしてある。pyramid_1.3.zipのダウンロード(Rへのインストール方法は上述の通り)。

データの入手先

  1. 自分で調査して得たデータを使うこともあるだろうし,官公庁などが発表している二次資料を使うこともあるかと思うが,人口ピラミッドを描くときに必要なデータは,いずれの場合でも男女年齢階級別人口である。
  2. 日本の男女年齢別人口は,総務省統計局の国勢調査のページの下から,Excelのワークシートとして入手できる。例えば,平成12年国勢調査データの第1次基本集計結果から,全国と北海道から岡山県までの都道府県別男女年齢別人口は,第3表 (総数)全国,北海道〜岡山県としてリンクされている(リンク先のExcelワークシートはa004-1_1.xlsというファイル名で,956 KBあるので注意されたい)。各都道府県の市区町村別男女年齢別人口も同じサイトで公開されている。例えば,山口県のものは第3表 総数(都道府県,市部,郡部,市町村)としてリンクされている(リンク先のExcelワークシートのファイル名はa004-1-1.xlsで,サイズは1861 KBある)。これらのデータは余計な情報がたくさん入っているので,このままではRで使うのが困難である(※scan()関数を駆使すれば不可能ではないと思うがやりたくない)。とくに,各歳別人口が5年分続くと5歳階級別人口が現れるというやり方で記載されている点と,表が縦に積み重ねられているのが最悪である。
  3. 2010年1月9日追記)最近の総務省統計局のデータ提供方法はだいぶ改善された。例えば,政府統計の総合窓口(e-Stat)というサイトの中の,都道府県別の男女年齢5歳階級別人口の年次推移データから群馬県のデータファイル(da0310.xls)をダウンロードしてみると,男女年齢5歳階級別人口は隙間なく連続したセルに入っているので,以前より遥かに加工が容易である。

作図の手順(1)

まず,pyramid関数を使って,日本の人口について,既発表資料から人口ピラミッドを作る方法を紹介する。

作図の手順(2)

次に,pyramidv()関数を使って,小集団の生データから人口ピラミッドを作る方法を紹介する(注:この関数は古いバージョンのpyramidにしかないので,お薦めしない。新しいバージョンのpyramids()関数を使えば,普通にlayout()での画面分割にも対応しているので,その方が簡単なはずである。ただ,どうしてもpyramidv()を使いたい場合はこのスクリプトを読み込めば使えるはずである)。

たくさんの人口ピラミッドを表示してみる

作図の手順(2)でも2つの人口ピラミッドを描画したが,今度は1980年から2005年までの群馬県の6つの人口ピラミッドをまとめて描かせてみる。冒頭に示した群馬県のファイルda0310.xlsをOpenOffice.orgのCalcで開き,不要な行と列に色をつけたものを下に示す。

OpenOffice.orgのCalcで開いて,削除したいところに色をつけた表

他にも不要な列は多々あるが面倒なので,とりあえずこれだけを削除してから,全体を選んで右クリックし,メニューバーの[書式]→[セル]→[数]→[数値]→[-1234]とすると,人数の表示が3桁ごとにカンマで区切られているのが,ただの数値としての表示に変わる(割合が示されているカラムも整数表記になってしまうが,どうせ使わないので気にしない)。この段階でタブ区切りテキストファイルとして「名前をつけて」保存する(最初のダイアログに出てくるボタンでは「現在の形式を保持」として,次に出てくる保存オプションは,フィールドの区切り記号を{タブ},テキストの区切り記号を二重引用符にする)。そうしてできたファイルが,gunmapc25yr.txtである。変数名がないので,これをRで読み込むときはread.delim()関数のオプションとして,header=FALSEの指定が必要だし,他にも余計なカラムがたくさん残っているが,それはRに読みこんだ後でどうにでもなる話である。

コーディングの説明は省略するが,gunmapyramids.Rを読み込んで実行すると,下図ができあがるはずである。1995年だけ第二次ベビーブーム世代の山が見えなくなってしまっているのは,群馬県も長野県と同じく,20歳前後は県外に出てしまう人が多いということなのだろう。

群馬県の人口構造の推移

応用編:2つの集団の人口構造などを比べてみる

これまで書いたとおり,人口ピラミッドは,通常,男女の年齢別人口構造を左右向かい合わせに配置するが,男性人口,女性人口,あるいは男女合計人口の年齢構造を,2つの異なる集団について左右に配置し,集団間比較に使うこともできる。例えば,以下は,Preston SH et al. (2001) Demography. Blackwell Pub. p.22に掲載されている,スウェーデンとカザフスタンの女性の1992年の年齢階級別人口と年齢階級別死亡数の表である。

Age
Group
Population
in Sweden
Death in
Sweden
Population
in Kazakhstan
Death in
Kazakhstan
0597272791740783720
1-4229775427547581220
5-924517231879129396
10-1424011033808510298
15-1926495761720161561
20-2428717687622988673
25-2931111198733057752
30-34280991140732312965
35-392868991976128251113
40-443082383624879961405
45-493201726432847991226
50-542422307385036082878
55-592107859723018793266
60-6421605816403743175212
65-6922447927522562476866
70-7422257845091546236182
75-7918410267451499178199
80-841406679587887169013
85+110242173405894010627

この表のデータをタブ区切りテキストファイルにしたdeaths.txtを読みこんで,左にスウェーデン,右にカザフスタンを配置し,人口,死亡数,年齢別死亡率を比較できるように3つのグラフを横に並べてpng形式で描画するコードがcomp2pop.Rである。図を下に示す。

Compare age-structures between Sweden and Kazakhastan

特定年齢層を強調した日本の人口ピラミッドを描く

長期統計や国勢調査データなどから男女年齢各歳別人口だけ取り出してタブ区切りテキスト形式にしたファイルをjpop.txtとしてここにおく。このファイルを読み込めば,すべての国勢調査年の男女各歳別の人口ピラミッドを描くことは容易である。そのままの数字だと軸ラベルとして表示される桁数が大きすぎるので,10000で割って,タイトルに「(単位:万人)」と入れると見栄えが良い。

pyramid()関数で塗りつぶし色を指定するLcolとRcolというオプションは,実はベクトルを指定でき,特定年齢層だけを別の色で塗ることも可能である。母子保健対象年齢層を強調するために色を変え,戦後すぐと最新の2005年のピラミッドを並べて描くコードをpyramid2mch.Rに示す。図を下に示す。

戦後と最近の日本における母子保健対象の比較

日本の人口ピラミッドのアニメGIFを作ってみる

他に用意するソフト

これはRとOpenOffice.orgだけではできないので,ここでは古溝剛さんが公開されているGiamというソフトを使ってみる。Windows XP Professional SP3では,とくに何の問題もなくインストールできた。

データ読み込み

特定年齢層を強調した日本の人口ピラミッドを描くで示したjpop.txtを,OpenOffice.orgのCalcに読み込み,全部コピーしてから新しいシートで「形式を選択して貼り付け」の「行と列の入れ替え」オプションにチェックを入れて貼り付けし,できあがった表を全部選択してコピーし,エディタに貼り付けた後で,正規表現検索置換を駆使し,多少の手作業も追加してRコード化した。このRコードdemogjpn.Rは,長期人口動態統計Jvitalとか国勢調査年の男女年齢5歳階級別人口と死亡数を含むJASMといった他のデータフレームも含んでいるが,Rコンソールでsource("http://minato.sip21c.org/demography/demogjpn.R")と打てば,データフレームJpopに長期の日本人口の男女年齢各歳別(ただし高齢部分は85歳以上を合計している)データがセットされる(追記:2012年6月現在では,JvitalやJASMやJpopはパッケージfmsbに含めてCRANで公開しているので,fmsbをインストールしておいてロードするだけで使えるようになる)。

固定サイズのpngファイルを自動出力させる

データフレームJpopに含まれている変数は,最初の列が年齢Age(ただし最高年齢のところが"85+"となっているため,整数型ではなくFactorつまり要因型になっている),2列目からが1888年から5年おきに1918年までと,1920年から5年おきに1940年までと,1947年と,1950年から5年おきに2005年までの年齢別人口である(変数名はM2005,F1888のように,男女を示す先頭文字と4桁年号である)。

自動的にすべての年を処理するにはfor()を用いる。数字を含んだ文字列を作るにはsprintf()を用いると便利である。データの読み込みからpngファイルの一括生成まで含んだコードはmake-all-pyramids-japan.Rとなる(実行するとカレントディレクトリに大量のpngファイルが自動作成されるので注意)。

Giamを使ってアニメGIF化する

Giamを起動し,メニューバー「ファイル」の「コマの挿入」を選び,上で生成されたpngファイルを全部選んで「OK」する。実はいろいろなオプションが指定できるようだが,とりあえずウェイト(コマ間の待ち時間)をデフォルトの10/100秒から倍の20/100秒にして,GIF形式で保存してみると(書き込みオプションはデフォルトのまま),下のアニメGIFができあがる。

日本の人口ピラミッドの変化

ただし,2013年2月現在では,animationパッケージを使う方が簡単だと思う。作り方は2012年Rユーザ会で発表した内容を参照されたい。


Correspondence to: minato-nakazawa[atmark]umin.net.

リンクと引用について