Kohei Blog

夫・父親・医療系エンジニア

【近傍分析】緯度軽度から指定範囲の場所を抽出する

f:id:kei_01011:20210608180807p:plain

Aテーブルにある緯度経度と、Bテーブルにある緯度経度を総当たりさせて、Bの事業所の半径250m圏内にあるA事業所を抽出したい。

geopyを使用

!pip install geopy

コード

import pandas as pd
A = pd.read_csv('A.csv')
B = pd.read_csv('B.csv')
A_list = hp.values.tolist()
B_list = ph.values.tolist()

from geopy.distance import geodesic
match_lists = []

for B_item in B_list:
    B_id = B_item[0]
    B_lat = B_item[1]
    B_lng = B_item[2]

    for A_item in A_list:
        match_list = {}
        A_id = A_item[0]
        A_lat = A_item[1]
        A_lng = A_item[2]
        bStation = (B_lat,B_lng)
        aStation = (A_lat,a_lng)
        dis = geodesic(bStation,aStation).m
        
        if(dis < 250):
            match_list['A_id'] = A_id
            match_list['B_id'] = B_id
            match_list['distance'] = dis
            match_lists.append(match_list)            
        else:
            pass


df = pd.DataFrame(match_lists)

ロジックは簡単で、単純にループで総当たりさせて、

geodesic(bStation,aStation).mで、2点間の距離をだした。

データフレームには、250m範囲の事業所が縦持ちで入っているので、商圏分析的に使用できる。