こんにちは、都道府県データは比較的データの扱いが簡単なのですが、市町村のデータしかないときに都道府県と紐づけたいといったことは案外大変です。

そんなこんなでいろいろ調べてみると

http://jusyo.jp/csv/new.php

ここに、市町村名と都道府県がまとまっているデータが公開されているのを見つけました

これをうまく利用して、市町村名を入力にして、都道府県名を出力とするような関数を作ってみましょう

実装


img0.jpg

このリンクからデータをダウンロードしてきて展開します。
中にzenkoku.csvが入っていると思います。

中身を見てみましょう

img1.jpg

img2.jpg

ちょっと読み込みが大変です
codecsをいじらないといけないみたいなので

https://monaledge.com/article/164

これと同じ手法を使って読み込みます

import codecs
import pandas as pd


# 市町村、都道府県データはここからダウンロードしてきた : http://jusyo.jp/csv/new.php
with codecs.open('./zenkoku.csv', "r", "Shift-JIS", "ignore") as file:
    df = pd.read_table(file, delimiter=",")

def predict_logic(city):     
    return_obj = ''
    hit_area = df[df['市区町村'].str.contains(city)]
    # 同名の市町村がちょくちょくあるので2つ以上になることもある
    city_candidates = hit_area['都道府県'].unique()
    # 都道府県のインデックスを探す
            
    return city_candidates 
>>> predict_logic('旭川')                                                                                               array(['北海道'], dtype=object)                                                                                         >>> predict_logic('札幌')                                                                                               array(['北海道'], dtype=object)                                                                                         >>> predict_logic('つくば')                                                                                             array(['茨城県'], dtype=object)                                                                                         >>> predict_logic('神戸')                                                                                               array(['岐阜県', '兵庫県'], dtype=object)  

いろいろ試した結果

神戸って「こうどちょう」ってところが岐阜にあるらしいですね