🗺️
Geolonia 住所データを使って本物っぽい住所を生成する
動機
日本国内のサンプル住所データを作りたく、faker を使って作ったけど、都道府県と市区町村の組み合わせがおかしくて(福島県横浜市鶴見区って何?)扱いづらいので、もうちょっと本物っぽく作りたい。
faker で作成した際に参考にしたページ。
ではどうするか?
Geolonia 住所データ(https://geolonia.github.io/japanese-addresses/)を使って、ランダムに実際に存在する市区町村の住所を生成する。
(ただし、番地以降は存在しないものにする)
使用するパッケージのインストール
pip install requests faker
コード
real_jp_address.py
import sys
import random
import requests
from faker import Faker
fake = Faker('ja_JP')
geolonia_api_base = 'https://geolonia.github.io/japanese-addresses/api'
prefectures = requests.get(f'{geolonia_api_base}/ja.json').json()
prefecture_choices = list(prefectures.keys())
address_details = {}
def random_address_jp():
prefecture = random.choice(prefecture_choices)
cities = prefectures[prefecture]
city = cities[random.randrange(0, len(cities) - 1)]
if prefecture not in address_details or city not in address_details[prefecture]:
url = f'{geolonia_api_base}/ja/{prefecture}/{city}.json'
new_entry = requests.get(url).json()
if prefecture not in address_details:
address_details[prefecture] = {}
address_details[prefecture][city] = new_entry
towns = address_details[prefecture][city]
town = towns[random.randrange(0, len(towns))]['town']
koaza = towns[random.randrange(0, len(towns))]['koaza']
ban = fake.ban()
gou = fake.gou()
return f'{prefecture}{city}{town}{koaza}{ban}{gou}'
def main(args):
for _ in range(30):
address = random_address_jp()
print(address)
if __name__ == "__main__":
main(sys.argv)
特定の都道府県の住所のみ生成したい場合
特定の都道府県や、指定した都道府県(例:関東地方の都道府県のみ)の住所を作成したい場合は、上記のコードの prefecture_choices をうまく設定してあげればできます。
富山県のみ指定してみた(富山県は最も市区町村が少ないらしい; 2022年5月現在)。
prefecture_choices = ['富山県']
関東地方の都道府県のみ指定してみる。
prefecture_choices = [
'茨城県',
'埼玉県',
'千葉県',
'東京都',
'神奈川県',
]
Discussion