Python

【Python】市区町村一覧を国土交通省APIから取得する

皆さんこんにちは。いし(@ishilog2)です。

今回はPythonを用いて、国土交通省が提供しているAPIから市区町村を取得したいと思います。

[st_toc]

導入

今回のコードではrequestsとpandasを使用します。
インストールしていない方はインストールして下さい。

pip install requests
pip install pandas

環境によってはpip3 installのこともあります。

実践

実施すること

国土交通省が提供しているAPIを使用して市区村町一覧のデータフレームを作成します。
APIの使い方:https://www.land.mlit.go.jp/webland/api.html#todofukenlist

サンプルコード

import requests
import pandas as pd

def GetMunicipalities(AreaCode):
    url = "https://www.land.mlit.go.jp/webland/api/CitySearch?area=" + AreaCode
    r = requests.get(url)
    r = r.json()
    r = r['data']
    df = pd.DataFrame(r)
    print(df)

GetMunicipalities("13")

 

結果

       id  name
0   13101  千代田区
1   13102   中央区
2   13103    港区
3   13104   新宿区
4   13105   文京区
..    ...   ...
57  13381   三宅村
58  13382  御蔵島村
59  13401   八丈町
60  13402  青ヶ島村
61  13421  小笠原村

[62 rows x 2 columns]

解説

① requestsを用いてHTMLを取得
url = "https://www.land.mlit.go.jp/webland/api/CitySearch?area=" + AreaCode
r = requests.get(url)

requests.get(‘URL’)でHTML情報を習得します。

② JSON形式でリクエストをする
soup = BeautifulSoup(r.text, 'html.parser')

APIはJSON形式で提供されるため、JSON形式でリクエストをします。

[st-mybox title=”JSONとは” fontawesome=”fa-file-text-o” color=”#757575″ bordercolor=”” bgcolor=”#fafafa” borderwidth=”0″ borderradius=”5″ titleweight=”bold” fontsize=”” myclass=”st-mybox-class” margin=”25px 0 25px 0″]

JSONとは「JavaScript Object Notation」の略で、テキストベースのデータフォーマットのことです。CSVに近いものとなります。

APIのデータ送受信はこのJSON形式がほとんどです。

[/st-mybox]

>>結果
{'status': 'OK', 'data': [{'id': '13101', 'name': '千代田区'}, {'id': '13102', 'name': '中央区'}, {'id': '13103', 'name': '港区'}, {'id': '13104', 'name': '新宿区'}, {'id': '13105', 'name': '文京区'}, {'id': '13106', 'name': '台東区'}, {'id': '13107', 'name': '墨田区'}, {'id': '13108', 'name': '江東区'}, {'id': '13109', 'name': '品川区'}, {'id': '13110', 'name': '目黒区'}, {'id': '13111', 'name': '大田区'}, {'id': '13112', 'name': '世田谷区'}, {'id': '13113', 'name': '渋谷区'}, {'id': '13114', 'name': '中野区'}, {'id': '13115', 'name': '杉並区'}, {'id': '13116', 'name': '豊島区'}, {'id': '13117', 'name': '北区'}, {'id': '13118', 'name': '荒川区'}, {'id': '13119', 'name': '板橋区'}, {'id': '13120', 'name': '練馬区'}, {'id': '13121', 'name': '足立区'}, {'id': '13122', 'name': '葛飾区'}, {'id': '13123', 'name': '江戸川区'}, {'id': '13201', 'name': '八王子市'}, {'id': '13202', 'name': '立川市'}, {'id': '13203', 'name': '武蔵野市'}, {'id': '13204', 'name': '三鷹市'}, {'id': '13205', 'name': '青梅市'}, {'id': '13206', 'name': '府中市'}, {'id': '13207', 'name': '昭島市'}, {'id': '13208', 'name': '調布市'}, {'id': '13209', 'name': '町田市'}, {'id': '13210', 'name': '小金井市'}, {'id': '13211', 'name': '小平市'}, {'id': '13212', 'name': '日野市'}, {'id': '13213', 'name': '東村山市'}, {'id': '13214', 'name': '国分寺市'}, {'id': '13215', 'name': '国立市'}, {'id': '13218', 'name': '福生市'}, {'id': '13219', 'name': '狛江市'}, {'id': '13220', 'name': '東大和市'}, {'id': '13221', 'name': '清瀬市'}, {'id': '13222', 'name': '東久留米市'}, {'id': '13223', 'name': '武蔵村山市'}, {'id': '13224', 'name': '多摩市'}, {'id': '13225', 'name': '稲城市'}, {'id': '13227', 'name': '羽村市'}, {'id': '13228', 'name': 'あきる野市'}, {'id': '13229', 'name': '西東京市'}, {'id': '13303', 'name': '瑞穂町'}, {'id': '13305', 'name': '日の出町'}, {'id': '13307', 'name': '檜原村'}, {'id': '13308', 'name': '奥多摩町'}, {'id': '13361', 'name': '大島町'}, {'id': '13362', 'name': '利島村'}, {'id': '13363', 'name': '新島村'}, {'id': '13364', 'name': '神津島村'}, {'id': '13381', 'name': '三宅村'}, {'id': '13382', 'name': '御蔵島村'}, {'id': '13401', 'name': '八丈町'}, {'id': '13402', 'name': '青ヶ島村'}, {'id': '13421', 'name': '小笠原村'}]}

このように辞書型でデータが取得されます。

③ ”Data”のキーのみ取得する
r = r['data']

今回の場合だと”Status”と”Data”の2つのキーが取得れます。r[‘Data’]で選択したキーのみにすることが出来ます。

>>結果
[{'id': '13101', 'name': '千代田区'}, {'id': '13102', 'name': '中央区'}, {'id': '13103', 'name': '港区'}, {'id': '13104', 'name': '新宿区'}, {'id': '13105', 'name': '文京区'}, {'id': '13106', 'name': '台東区'}, {'id': '13107', 'name': '墨田区'}, {'id': '13108', 'name': '江東区'}, {'id': '13109', 'name': '品川区'}, {'id': '13110', 'name': '目黒区'}, {'id': '13111', 'name': '大田区'}, {'id': '13112', 'name': '世田谷区'}, {'id': '13113', 'name': '渋谷区'}, {'id': '13114', 'name': '中野区'}, {'id': '13115', 'name': '杉並区'}, {'id': '13116', 'name': '豊島区'}, {'id': '13117', 'name': '北区'}, {'id': '13118', 'name': '荒川区'}, {'id': '13119', 'name': '板橋区'}, {'id': '13120', 'name': '練馬区'}, {'id': '13121', 'name': '足立区'}, {'id': '13122', 'name': '葛飾区'}, {'id': '13123', 'name': '江戸川区'}, {'id': '13201', 'name': '八王子市'}, {'id': '13202', 'name': '立川市'}, {'id': '13203', 'name': '武蔵野市'}, {'id': '13204', 'name': '三鷹市'}, {'id': '13205', 'name': '青梅市'}, {'id': '13206', 'name': '府中市'}, {'id': '13207', 'name': '昭島市'}, {'id': '13208', 'name': '調布市'}, {'id': '13209', 'name': '町田市'}, {'id': '13210', 'name': '小金井市'}, {'id': '13211', 'name': '小平市'}, {'id': '13212', 'name': '日野市'}, {'id': '13213', 'name': '東村山市'}, {'id': '13214', 'name': '国分寺市'}, {'id': '13215', 'name': '国立市'}, {'id': '13218', 'name': '福生市'}, {'id': '13219', 'name': '狛江市'}, {'id': '13220', 'name': '東大和市'}, {'id': '13221', 'name': '清瀬市'}, {'id': '13222', 'name': '東久留米市'}, {'id': '13223', 'name': '武蔵村山市'}, {'id': '13224', 'name': '多摩市'}, {'id': '13225', 'name': '稲城市'}, {'id': '13227', 'name': '羽村市'}, {'id': '13228', 'name': 'あきる野市'}, {'id': '13229', 'name': '西東京市'}, {'id': '13303', 'name': '瑞穂町'}, {'id': '13305', 'name': '日の出町'}, {'id': '13307', 'name': '檜原村'}, {'id': '13308', 'name': '奥多摩町'}, {'id': '13361', 'name': '大島町'}, {'id': '13362', 'name': '利島村'}, {'id': '13363', 'name': '新島村'}, {'id': '13364', 'name': '神津島村'}, {'id': '13381', 'name': '三宅村'}, {'id': '13382', 'name': '御蔵島村'}, {'id': '13401', 'name': '八丈町'}, {'id': '13402', 'name': '青ヶ島村'}, {'id': '13421', 'name': '小笠原村'}]
③ 辞書型からデータフレームに変換
df = pd.DataFrame(r)

pandasのpd.DataFrame()を使用して辞書型からデータフレームへ変換をします。

>>結果
       id  name
0   13101  千代田区
1   13102   中央区
2   13103    港区
3   13104   新宿区
4   13105   文京区
..    ...   ...
57  13381   三宅村
58  13382  御蔵島村
59  13401   八丈町
60  13402  青ヶ島村
61  13421  小笠原村

[62 rows x 2 columns]

【おまけ】地域コード表

01 北海道
02 青森県
03 岩手県
04 宮城県
05 秋田県
06 山形県
07 福島県
08 茨城県
09 栃木県
10 群馬県
11 埼玉県
12 千葉県
13 東京都
14 神奈川県
15 新潟県
16 富山県
17 石川県
18 福井県
19 山梨県
20 長野県
21 岐阜県
22 静岡県
23 愛知県
24 三重県
25 滋賀県
26 京都府
27 大阪府
28 兵庫県
29 奈良県
30 和歌山県
31 鳥取県
32 島根県
33 岡山県
34 広島県
35 山口県
36 徳島県
37 香川県
38 愛媛県
39 高知県
40 福岡県
41 佐賀県
42 長崎県
43 熊本県
44 大分県
45 宮崎県
46 鹿児島県
47 沖縄県
ABOUT ME
ishi
こんにちは。IshiLog.com管理人です。 趣味は食事とゲーム、ガジェットを買うこと。 業務推進部にてRPA等による業務効率化やWebアプリ開発等を行なっています。 このブログではPython等のプログラミングに関する備忘録として技術や知識、趣味に関することを紹介していきます。