LoginSignup
6
5

More than 5 years have passed since last update.

日本の自治体の一覧が欲しい

Posted at

政府が公開しているデータがいくらかある。

全国地方公共団体コード

利点

  • データ構成はシンプル
  • 「市」と「区 (東京23区)」と「町」「村」が同じ階層

欠点

  • Microsoft Excel 97-2003 形式
    • MacならNumbers使えばCSVに変換できるが
  • 政令指定都市の「区」は別のシート
    • NumbersでCSVに変換すると、別のCSVファイルとして書き出される
  • (「区」を持つ) 政令指定都市とその他の市の区別がデータ上ない
  • 「郡」の情報がない
  • 都道府県も同じ列に並んでいる
  • 市区町村と都道府県の結びつきが弱い

統計に用いる標準地域コード

利点

  • 最初からCSV形式で用意されている
  • 地方公共団体コードが 仕様 (PDF) に従って分割されている。可読性は下がるが、
    • 都道府県と結びつけやすい
    • (相変わらず都道府県と市区町村が同列に並んでいるが) プログラムで分類しやすい
  • 「郡」の情報がある (ただし…)
  • 政令指定都市の区が同一ファイルに記載されている (ただし…)

欠点

  • 文字コードが Shift_JIS なので文字化け注意
    • 変換すればいいんだけどさ…
  • データ階層がめちゃくちゃ
    • 政令指定都市と「郡」と「総合振興局」(北海道限定) が同じ階層
    • 北海道の自治体で「総合振興局」がある場合、「郡」の情報はない
    • 東京都の島嶼部の「支庁」の情報が混ざる (現在、正式な地名ではない)

対策

上記の地方公共団体コード仕様から、各行がどのデータに当てはまるか分類することができる。

  • sityouson-code
    • 0: 都道府県
    • 100以上199以下:
      • 10の倍数: 政令指定都市または「東京都特別区部」
      • それ以外: 「区」
    • 201以上299以下: 市
    • 300以上:「郡」または「総合振興局」または「支庁」または「町村」
      • 北海道の場合
        • 30の倍数: 総合振興局
        • それ以外: 町村
      • 沖縄県の場合 (※)
        • 300, 320, 340, 370, 380: 郡
        • それ以外: 町村
      • その他の都府県の場合:
        • 20の倍数: 郡
        • それ以外: 町村

※沖縄県島尻郡の例外

沖縄県島尻郡は 341 からなので本来なら 341~359 が割り当てだが、町村数が多く 362 まで使用しており、341~369 が割り当てられている。次の宮古郡の割り当てはその分減らされ 371~379 である。

参考: Wikipediaによる解説と上記の仕様書

これらに気をつければ、標準地域コードから充分正規化された市町村データが取得できそう。

市区町村の一覧を取得

今回はそんなに細かい分類は求められていなかったので、以下の方針とした。

  • 政令指定都市は市名と区名を結合する (ex. 「札幌市中央区」)
  • その他の市および東京特別区は市名そのまま (ex. 「鹿児島市」「千代田区」)
  • 町村については
    • 北海道の /.*総合振興局/ は無視し町村名のみ (ex. 「西興部村」)
    • 東京都の離島地域の「支庁」は無視し町村名のみ (ex. 「小笠原村」)
    • その他の町村は郡名と町村名を結合する (ex. 「夷隅郡大多喜町」)

入力は上記のCSV, 出力はYML形式とする。

cities.yml
- :prefecture_id: 1
  :name: 札幌市中央区
- :prefecture_id: 1
  :name: 札幌市北区
- :prefecture_id: 1
  :name: 札幌市東区
# ...以下省略

で、できたコードがこちら

GitHub Gist - strviola / convert_prefecture_cities.rb

結論

「市町村コードの値」じゃなくてYAMLかなんかで正規化してほしかったな…

6
5
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
5