サイトトップ | Software TipsR tips

R tips: EpiInfoによる塗り分け地図

最終更新:2022年 2月 20日 (日曜日)(URL更新)




このページは2004年8月のベトナムでゲアン省の塗り分け地図を作ったときのメモを下敷きにしている。が,ゲアン省の地図ではあまりピンと来ないかもしれないので,群馬県の地図にした場合で説明する。

Epi Infoとは

米国CDCが開発し,無料で配布しているデータマネジメント環境である。Rとの大きな違いは,(1)入力フォームを設計してデータ入力ができる,(2)標準データ形式がMS-Accessと互換,(3)メニュー操作が標準(コマンド打ちも可能)で,複数の言語で既に開発されているメニューファイル(これもMS-Access形式なので自分で編集することもできる)を差し替えて設定することで,日本語版,フランス語版,中国語版,などが簡単にできる,(4)カバーしている統計処理の種類はRに比べると見劣りする,(5)グラフ出力はラスタが基本なので,Rのように多種多様な出力ができるものに比べると加工の自由度が低い,(6)MS-Windows版しかない,(7)(たぶん)ソースは非公開,といった点である。目的次第で,Rを使った方がいい場合もあるし,Epi Infoの方が適している場合もあると思われる。

ソフトやマニュアルのダウンロードは,米国CDCの公式サイトから可能である。2011年1月26日付けで,バージョン3.5.3がリリースされている。日本語版(メニューが日本語化されたもの)も,岡山理科大学総合情報学部情報科学科にいらした山本英二さんが研究協力者としてスタッフになっている岡山大学大学院医歯薬学総合研究科疫学・衛生学分野によって提供されている。

シェイプファイルのダウンロードと加工

シェイプファイルとは,ESRIが提供しているGIS用の地図情報データの形式である。拡張子がshpとなっている。全世界について,郡レベルくらいまでは無料でダウンロードできる。ESRIが無料で提供しているArcExplorerなどを使って地図をマウスで選びながら場所を選ぶ方法もあるが,場所が決まっていれば,DIVA-GISのサイトからCountryで国名を選び,ThemeをAdministrative Boundariesと指定してzip圧縮されたファイルをダウンロードする方が手っ取り早いだろう。しかしこの方法では,日本の場合,最小の区分が都道府県単位になってしまい,市町村別の地図が得られない。そこで,ESRI Japanの全国市町村界データからjapan.zipをダウンロードして展開する。そこから群馬県だけの市町村別区分データを取り出したいときは,以下のように操作する(以下の操作は英語版Epi Info 3.2.2によったものである)。

  1. Epi Infoを起動し,メインメニューからCreate Mapsを選ぶ
  2. FileからMap Managerを開く
  3. 使いたいのは群馬県だけなので,Add Layer Partialで先ほどダウンロードしたファイルを展開してできたjapan_jdg.shpを呼び出す
  4. PREFをクリックして都道府県名の降順に並べなおす。上の方が空白になっているが,スライドバーを下げればデータが出てくるので慌てることはない
  5. 群馬県だけ全部選択して(シフトキーを押しながら矢印キーを押す)OKボタンをクリックする
  6. 保存するファイル名を聞かれるので適当にファイル名をつける。gunma.shpとした
  7. FileのExitでEpi Mapを終了する

なお,シェイプファイル自体を,Epi Mapの中で加工することもできる。地図画像をスキャンしてからマウスで線をトレースするなどの手段で,細かい区分の地図を作ることも不可能ではない。

塗り分け地図用データの準備

基本的にはMS-Access形式のデータで,1つのテーブル内に,(1)シェイプファイルに含まれているのと同じ名前で地名が入っている変数,(2)塗り分けのための基準値として使う数値が入っている変数群(1つでもよい),が含まれているものを用意すればよい。MS-Accessがなければ,Epi Info内で作ることができる。

DIVA-GISやESRIが提供しているシェイプファイルが常に正しいとは限らないので,dbfファイルを編集しなくてはいけない場合もある。「同じ名前」ということで問題なのは,群馬県の場合,東村が3つあることである。こういう場合,市町村名で照合するのは不都合なので,番号を使うとよい。ESRI提供のシェイプファイルには,市町村名の変数CITY1の他に,市町村コードの変数JCODEも入っているので,データベースでもそちらを入力する(ネットで探すと,都道府県別の市区町村コード一覧表が見つかった。また,ZIPJISにも含まれている。総務省も提供している)。

では,群馬県の高齢者関係主要指標から,市町村別65歳以上人口比率のデータ(index01-1-5.xlsファイルのI-4表)を入力してみよう(実はEpi Mapでシェイプファイルを開いた状態で,Map ManagerからAdd Dataすることもできるようだが,データファイルとシェイプファイルが別々にある場合の方が一般的と思われるので,そちらを説明する)。

(注)群馬県のデータ提供ページが変わって、高齢者関係主要指標というページは既にない。市町村別65歳以上人口比率データを得るには、住民基本台帳データから、年報の市町村別男女年齢5歳階級別人口(令和になってから、何故か、「年齢5階層別」と不思議なミスタイプがされているけれども、リンク先のExcelファイルには年齢5歳階級別人口が入っている)をダウンロードすれば良い。

  1. Epi InfoのメインメニューからMake Viewを選ぶ
  2. FileからNewを選び,mdbファイル名を指定する。ここではgunma.mdb(リンク先はこのやり方で作成したデータ入力済みファイル。約200 KB)とした
  3. View名を指定する。ここではagedpropとした
  4. 右クリックしてフィールドを定義していく。例えばQuestion or Promptに市区町村JISコード?と入力し(日本語を入れるときは右側のFontをMS UI Gothicなどにせねばならない。Sans Serifなどのままだと化ける),Field NameをJCODEとし,Field or VariableのTypeをText,Sizeを6としてRequiredにチェックを入れてからOKボタンを押す。高齢者割合2003年の変数としてAP2003,2001年の変数としてAP2001を入力することにした
  5. フィールド定義が終わったらFileのSaveをしてから,FileのEnter Dataを選ぶ
  6. Table名とIDの初期値を入れるようにウィンドウが現れる。Table名がView名と同じでIDの初期値が1でよければ,そのままOKボタンをクリックすればいい
  7. 入力フォームが表示されるので,順番にデータを入れていく。すべて入力し終わったらSave dataボタンをクリックして(適宜途中でもSaveした方が安全だが),FileのExitを選ぶ

塗り分け地図を作るための操作

2003年の群馬県市町村別65歳以上人口割合による塗り分け地図
  1. Epi InfoのメインメニューからAnalyze Dataを選び,まずデータベースの方を指定するため,DataのRead(Import)を選んで,データを読み込む(先にChange Projectでgunma.mdbを選んでおけば,そのファイルが存在するディレクトリが,結果出力が自動保存される作業ディレクトリになる)。gunma.mdbの中の,viewagedpropというテーブルを使用する。塗り分け地図の作成に際して,データベースの方に同じポリゴンの数字が何度も出てくる場合は,出現回数(Count),合計(Sum),平均(Average),最大(Max),最小(Min)を使うか,あるいは左上の1 record per geographic entityというボックスにチェックして最後に出てきた数字だけを有効にすることができる。しかし,データを読んだあとで,Select/IfのSelectで条件指定しておけば,テーブルの一部のデータだけを使うことも可能である
  2. StatisticsのMapを選ぶ。ここでShapefileとして,先ほど作成したgunma.shpを指定する。
  3. 続いて,その下のGeographic VariableというフィールドでJCODEという変数を選ぶ
  4. 左上の1 record per geographic entityにチェックを入れる
  5. その2行下のGeographic variableとしてJCODEを指定する。
  6. Data variableとして色々な変数を指定し,OKボタンをクリックすると,その変数の値に従って市町村を何段階か(デフォルトでは5段階)に区分し,塗り分けた地図が作成される。例えば,AP2003を指定した場合,右図(ただし下記のやり方で色を変更し,市町村名を重ね書きした後のもの)が表示される(注:現状では,JCODEが一致しないという警告が出てくるが,無視してcontinueして問題ない。たぶんデータベース上でText型のフィールドにしたのが悪かったのだと思う)
  7. Map_TypeからChoroplethを選ぶと色分けの仕方を変えることができる。Std LabelsのところでText FieldにCITY1を指定し,OverlayにチェックをしてからApplyすることを繰り返すと(重ね書きするときは予めOverlayを指定しておかないと駄目なため),塗り分けした上に市町村名を重ね書きした状態の図もできる
  8. この地図はプリントできるほか,BMP画像ファイル(自動保存されたもの; 1.3 MB)としてファイルに保存したりクリップボードにコピーしたりできる

Rでは?

(※)同じことがRでできれば,ベクトルグラフィックスとして編集可能な図ができるので,軽いし,美しくなって嬉しいと思われるのだが,ライブラリがまだ十分でないので難しい。RmapはCRANに入っていないのでインストールが難しいのと,シェイプファイルの出力ができない。maptoolsとshapefilesはインストールは簡単だが,シェイプファイルのサブセットを作ることができないなど,問題があってうまくできなかった。

(追記)シェイプファイルのサブセットを作ることにはまだ成功していないのだが,それ以降ならRのmaptoolsライブラリ(CRANからダウンロードしてインストールできる)を使ってベクトルグラフィックスとして作成することは可能である。サブセットgunma.shp,gunma.shx,gunma.dbfができているとして,タブ区切りテキスト形式のデータファイルagedprop.txtを使って,make_ap2003.Rを実行すれば,きれいな地図(pdf形式,62.1 KB)ができあがる。

(※)2005年2月24日追記:RjpWikiの情報を元に試行錯誤した結果,Rとmaptoolsだけでも日本全体のシェイプファイルから群馬県のサブセットを作って描画することに成功した(但し,Windows XP+SP2でR-2.0.1日本語対応版という環境では,そのサブセットをファイルに書き出そうとするとRが落ちてしまう)。日本のシェイプファイルとデータファイルと同じディレクトリにap2003map.Rを置いて実行すると,下図ができあがる。

群馬県高齢者割合で区分した塗り分け地図

(※)2022年2月20日追記:このページを作ってから、データもソフトもURLも大きく変わったので、デッドリンクを直すことを含めて最低限修正した。Rでの地図描画についてはR Tips/グラフィクス/地図関連を参照されたい。


リンクと引用について