RESAS APIから市区町村データを取得して郡名を追加
Nid: 1411
- 正規化されすぎて使いづらいので、都道府県コードと都道府県名を追加。
- 都道府県コードが仕様と異なるため、2桁に修正。
- 名称だけで一意になるように「都道府県名+郡名+市区町村名」のフィールドを追加。郡名は郵便局のcsvデータから取得してマージ。
データ取得コマンド 市区町村コードの先頭2桁を都道府県コードに使用
$ myapikey=xxx;for prefcode in {1..47}; do prefname=`curl -sS -H "X-API-KEY:$myapikey" "https://opendata.resas-portal.go.jp/api/v1/prefectures" | jq -r --arg prefcode "$prefcode" '.result[] | select(.prefCode==($prefcode | tonumber)) | .prefName'`;curl -sS -H "X-API-KEY:$myapikey" "https://opendata.resas-portal.go.jp/api/v1/cities?prefCode=$prefcode" | jq -r --arg prefcode "$prefcode" --arg prefname "$prefname" '.result[] | {prefCode: .cityCode | tostring | gsub("^(?<code>[0-9][0-9])[0-9]*$"; .code), cityCode: .cityCode, cityName: .cityName, bigCityFlag: .bigCityFlag, prefCodetmp: $prefcode, prefName: $prefname, cityNameLong: "\($prefname + ."cityName")"}';sleep 1s; done | tee japaneseLocalGovermentCode.json.tmp && jq -s '.' japaneseLocalGovermentCode.json.tmp >| japaneseLocalGovermentCode.json
$ jq 'length' japaneseLocalGovermentCode.json 1922
データサンプル
$ jq '.[333:336]' japaneseLocalGovermentCode.json [ { "prefCode": "06", "cityCode": "06201", "cityName": "山形市", "bigCityFlag": "0", "prefCodetmp": "6", "prefName": "山形県", "cityNameLong": "山形県山形市" }, { "prefCode": "06", "cityCode": "06202", "cityName": "米沢市", "bigCityFlag": "0", "prefCodetmp": "6", "prefName": "山形県", "cityNameLong": "山形県米沢市" }, { "prefCode": "06", "cityCode": "06203", "cityName": "鶴岡市", "bigCityFlag": "0", "prefCodetmp": "6", "prefName": "山形県", "cityNameLong": "山形県鶴岡市" } ]
データをマージしやすいように、CSVに変換。
$ jq -r '.[] | [.cityNameLong, .prefCode, .cityCode, .bigCityFlag, .prefName, .cityName]| @csv' japaneseLocalGovermentCode.json | tr -d -d '"' | sed '1icityNameLong,prefCode,cityCode,bigCityFlag,prefName,cityName' >| japaneseLocalGovermentCode.csv.tmp $ head japaneseLocalGovermentCode.csv.tmp cityNameLong,prefCode,cityCode,bigCityFlag,prefName,cityName 北海道札幌市,01,01100,2,北海道,札幌市 北海道札幌市中央区,01,01101,1,北海道,札幌市中央区 北海道札幌市北区,01,01102,1,北海道,札幌市北区 北海道札幌市東区,01,01103,1,北海道,札幌市東区 北海道札幌市白石区,01,01104,1,北海道,札幌市白石区 北海道札幌市豊平区,01,01105,1,北海道,札幌市豊平区 北海道札幌市南区,01,01106,1,北海道,札幌市南区 北海道札幌市西区,01,01107,1,北海道,札幌市西区 北海道札幌市厚別区,01,01108,1,北海道,札幌市厚別区
郵便局の郵便番号データを取得。マージ用に郡名を取り出し。
$ wget -c -O /tmp/ken_all.zip https://www.post.japanpost.jp/zipcode/dl/kogaki/zip/ken_all.zip && unzip -o -d /tmp /tmp/ken_all.zip $ nkf KEN_ALL.CSV | tr -d '"' | awk -F',' '{ print $7,$8 }' | uniq | sed -e 's/\([^都道府県]*[都道府県]\) \(.*[郡]\)*\(.*[市区町村]$\)/\1\3,\3,\2/' | awk -F"," 'BEGIN { OFS=","; print "cityNameLong,districtName" }{ print $1,$3 }' >| ken.csv
$ cat ken.csv | (head;tail) cityNameLong,districtName 北海道札幌市中央区, 北海道札幌市北区, 北海道札幌市東区, 北海道札幌市白石区, 北海道札幌市豊平区, 北海道札幌市南区, 北海道札幌市西区, 北海道札幌市厚別区, 北海道札幌市手稲区, 沖縄県渡名喜村,島尻郡 沖縄県南大東村,島尻郡 沖縄県北大東村,島尻郡 沖縄県伊平屋村,島尻郡 沖縄県伊是名村,島尻郡 沖縄県久米島町,島尻郡 沖縄県八重瀬町,島尻郡 沖縄県多良間村,宮古郡 沖縄県竹富町,八重山郡 沖縄県与那国町,八重山郡
「都道府県名+市区町村名」をキーに、2つのcsvファイルをマージ。joinコマンドは日本語をキーにするとエラーとなるので、csvkitのcsvjoinコマンドを使用。
$ csvjoin -c cityNameLong --left japaneseLocalGovermentCode.csv.tmp ken.csv >| japaneseLocalGovermentCode.csv.merged
$ cat japaneseLocalGovermentCode.csv.merged | (head;tail) cityNameLong,prefCode,cityCode,bigCityFlag,prefName,cityName,districtName 北海道札幌市,1,1100,2,北海道,札幌市, 北海道札幌市中央区,1,1101,1,北海道,札幌市中央区, 北海道札幌市北区,1,1102,1,北海道,札幌市北区, 北海道札幌市東区,1,1103,1,北海道,札幌市東区, 北海道札幌市白石区,1,1104,1,北海道,札幌市白石区, 北海道札幌市豊平区,1,1105,1,北海道,札幌市豊平区, 北海道札幌市南区,1,1106,1,北海道,札幌市南区, 北海道札幌市西区,1,1107,1,北海道,札幌市西区, 北海道札幌市厚別区,1,1108,1,北海道,札幌市厚別区, 沖縄県渡名喜村,47,47356,0,沖縄県,渡名喜村,島尻郡 沖縄県南大東村,47,47357,0,沖縄県,南大東村,島尻郡 沖縄県北大東村,47,47358,0,沖縄県,北大東村,島尻郡 沖縄県伊平屋村,47,47359,0,沖縄県,伊平屋村,島尻郡 沖縄県伊是名村,47,47360,0,沖縄県,伊是名村,島尻郡 沖縄県久米島町,47,47361,0,沖縄県,久米島町,島尻郡 沖縄県八重瀬町,47,47362,0,沖縄県,八重瀬町,島尻郡 沖縄県多良間村,47,47375,0,沖縄県,多良間村,宮古郡 沖縄県竹富町,47,47381,0,沖縄県,竹富町,八重山郡 沖縄県与那国町,47,47382,0,沖縄県,与那国町,八重山郡
マージしたファイルを整形。列順変更と、cityNameLongに郡名も含むように修正。
$ tail +2 japaneseLocalGovermentCode.csv.merged | awk -F"," 'BEGIN { OFS=","; print "prefCode,cityCode,bigCityFlag,prefName,districtName,cityName,cityNameLong" }{ print $2,$3,$4,$5,$7,$6,$5$7$6 }' >| japaneseLocalGovermentCode.csv
$ cat japaneseLocalGovermentCode.csv | (head;tail) prefCode,cityCode,bigCityFlag,prefName,districtName,cityName,cityNameLong 1,1100,2,北海道,札幌市,,北海道札幌市 1,1101,1,北海道,札幌市中央区,,北海道札幌市中央区 1,1102,1,北海道,札幌市北区,,北海道札幌市北区 1,1103,1,北海道,札幌市東区,,北海道札幌市東区 1,1104,1,北海道,札幌市白石区,,北海道札幌市白石区 1,1105,1,北海道,札幌市豊平区,,北海道札幌市豊平区 1,1106,1,北海道,札幌市南区,,北海道札幌市南区 1,1107,1,北海道,札幌市西区,,北海道札幌市西区 1,1108,1,北海道,札幌市厚別区,,北海道札幌市厚別区 47,47356,0,沖縄県,渡名喜村,島尻郡,沖縄県島尻郡渡名喜村 47,47357,0,沖縄県,南大東村,島尻郡,沖縄県島尻郡南大東村 47,47358,0,沖縄県,北大東村,島尻郡,沖縄県島尻郡北大東村 47,47359,0,沖縄県,伊平屋村,島尻郡,沖縄県島尻郡伊平屋村 47,47360,0,沖縄県,伊是名村,島尻郡,沖縄県島尻郡伊是名村 47,47361,0,沖縄県,久米島町,島尻郡,沖縄県島尻郡久米島町 47,47362,0,沖縄県,八重瀬町,島尻郡,沖縄県島尻郡八重瀬町 47,47375,0,沖縄県,多良間村,宮古郡,沖縄県宮古郡多良間村 47,47381,0,沖縄県,竹富町,八重山郡,沖縄県八重山郡竹富町 47,47382,0,沖縄県,与那国町,八重山郡,沖縄県八重山郡与那国町