先週は、ネタはあったんだけど、元気がなくて(体調が悪くて)ブログの更新ができなかった。。。更新チェックしにきてくれた人、ごめんなさいです。ネタがつきないのはもちろんすばらしいけど、健康ってほんとにすばらしい。
さて、今回は先々週使ったe-Statの統計データに含まれているKEY_CODEというフィールドのお話。
シェープファイルの方のKEYCODEフィールドはテキストフィールドとして読み込まれるのだが、統計データの方では数値型のフィールドとして読み込まれてしまう。このままだと結合ができないので、統計データの数値型フィールドをテキストフィールドとして読み込みたい。
数値型フィールドを文字型として読み込むなら、
- 文字型フィールドを一個作って数値型フィールドの内容をコピーする
しかしその前にテキストファイルをDBFかなにかにエクスポートせねばなるまい。それも確かに悪くはない。
あるいは元のCSVをEXCELか何かでよんで、セルの書式設定をすればよいのだろうか。最初の行のKEYCODEのところに何か文字を入れても素敵かもしれない。(ArcGISは最初の5行だか、20行だかのデータを呼んで数値型か文字型かを判断するらしいので) - schima.ini内にフィールド定義を書き込む
の2種類ぐらいの方法があるだろうか。今回は何となくスマートに見える2番目の方法を説明する。
このschima.ini、ArcGISに一度統計データを読み込むと自動的に作成される。前回の統計データを読み込んだ直後のschima.iniの中身は以下のような感じだ。
[tblT000051C13105.txt]
Format=CSVDelimited
この後ろに、何かいろいろ書き足すと、テキストファイル(CSVとか)のフィールド定義(どの列が数値型とか文字型とかを指定すること)をすることができる。
詳しくはESRIJのブログに書いてあったのでそちらを見てくださいな。
テキスト ファイルのフィールドを定義する方法
http://blog.esrij.com/arcgisblog/2010/06/schemaini-301f.html
皆さんにはこの資料に一度は目を通していただくとして、今回はもうちょっと手抜きな方法を。
一度ArcGISに追加したデータのテーブルをテキストファイルにエクスポートすると、同じschima.iniにエクスポートした結果のテーブルのフィールド定義が自動的に追加される。
例えば、前回使ったシェープファイル「h17ka13105」の属性テーブルをテキストにエクスポートすると、以下のような情報がschima.iniに追加される。
[Export_Output.txt]
ColNameHeader=True
CharacterSet=932
Format=CSVDelimited
Col1=FID_ Integer
Col2=AREA Float
Col3=PERIMETER Float
<中略>
Col38=KCODE1 Char Width 7
Col39=KEY_CODE Char Width 11
NumberDigits=6
このCol39の情報を、統計データ(tblT000051C13105.txt)のCol1の情報として指定すると、統計データをArcMapに追加したときに、見事KEY_CODEフィールドが文字型として読み込まれるようになる。
ただし、一列目だけ(Col1だけ)のフィールド定義をschima.iniに書き込むと、それより後ろというか右側の列にはむなしく<ぬる>が入る結果となる(実際にやって、非常に寂しい思いをした)。
今回の場合tblT000051C13105.txtには全部で71列のデータが入っている。これを手動でフィールド定義を書き込むのはすごくいや(笑)なので、ちょっと手を抜く方法を考えてみた。
- 「h17ka13105」シェープの属性テーブルをテキストにエクスポートしておく。(先ほど説明したとおり)
- tblT000051C13105.txtをArcMapに追加する(このときはKEY_CODEは数値型として読み込まれる)
- 2.のテーブルをテキストファイルにエクスポートする。例えばtblT000051C13105_test.txtにエクスポートする。(これで、schima.iniにtblT000051C13105_test.txtのフィールド定義が自動的に追加される。素敵。)
- schima.iniをテキストエディタで開き、以下の編集をする
- 以下の行を削除
[tblT000051C13105.txt]
Format=CSVDelimited - [tblT000051C13105_test.txt]を[tblT000051C13105.txt]に変更(_test部分を削除)
- Col1についての情報を編集
「Col1=KEY_CODE Float」となっているところを「Col1=KEY_CODE Char Width 11」と変更
シェープファイルの属性テーブルをエクスポートしたテキストファイルに関するschima.iniの下から2行目Col39の行をコピーして使うと楽。
- 以下の行を削除
これでschima.iniが以下のようになるはず。太字のところが重要ー。
[Export_Output.txt]
ColNameHeader=True
CharacterSet=932
Format=CSVDelimited
Col1=FID_ Integer
Col2=AREA Float
Col3=PERIMETER Float
Col4=H17KA13_ Integer
<中略>
Col38=KCODE1 Char Width 7
Col39=KEY_CODE Char Width 11
NumberDigits=6
[tblT000051C13105.txt]
ColNameHeader=True
CharacterSet=932
Format=CSVDelimited
Col1=KEY_CODE Char Width 11
Col2=HYOSYO Integer
Col3=HTKSYU Char Width 255
Col4=CITYNAME Char Width 255
Col5=NAME Char Width 255
Col6=T000051001 Integer
<中略>
Col71=T000051066 Integer
NumberDigits=6
[Export_Output.txt](シェープファイルの属性テーブルをエクスポートしたテキストファイル)についての情報はいらないので、削除しても構わない(あっても構わないけど)。
で、念のため、ここでArcMapを一度終了させて、再度起動しよう。
で、もう一度tblT000051C13105.txtをArcMapに追加すると。。。
めでたくKEY_CODEが左寄せで表示される(ちなみに文字型は左寄せ、数値型は右寄せらしい)。
これでシェープファイルとの結合もばっちりできる。
文京区とか1つの市区町村で地図化する際にはあまり問題にならないかもしれないが、NAMEフィールドで結合すると同じ地名があったときに、間違って結合が行われてしまう可能性がある。
ある程度まとまった市区町村単位で町丁目別の地図を作りたい場合は、今回のようにKEY_CODEをキーに結合する方が確実だと思う。
なんだか結局あんまりスマートじゃないような気もするけど。。。まぁこんなやり方もあるということで。