座標を持つ非常に大きな DataFrame があります。次の例を見てみましょう。
df = pd.DataFrame({
'Buyer': 'Carl Mark Carl Joe Mark Carl'.split(),
'Quantity': [5,2,5,10,1,5],
'Lat':[50.111, 48.777, 50.111, 52.523, 48.777, 50.111],
'Lng' : [8.6805, 9.1807, 8.6805, 13.411, 9.1807, 8.6805],
'Date' : [
DT.datetime(2013,1,1,13,0),
DT.datetime(2013,1,1,13,5),
DT.datetime(2013,1,1,20,0),
DT.datetime(2013,2,6,10,0),
DT.datetime(2013,2,6,12,0),
DT.datetime(2013,2,6,14,0),
]})
import geopy
df['Point'] = df.apply(lambda row: geopy.Point(row['Lat'], row['Lng']), axis=1)
この DataFrame に基づいて、ポイント間の距離を何度も計算する必要があります。多くの場合、互いに比較する必要があるポイントは同じです。たとえば、カールから他のすべての購入者までの距離を毎日計算したい場合などです。
def dis_calc(df):
p = geopy.Point(50.111,8.6805)
sum = 0.0
for i, row in df.iterrows():
dist = geopy.distance.distance(p, row['Point']).km
sum = sum + dist
return sum
gr = df.groupby(df.Date.map(lambda d: d.date()))
gr.apply(dis_calc)
これを効率的に行い、同じ距離を何度も計算する必要がないようにするために、購入者とその相互の距離を含む隣接行列を構築したいと考えています。その結果、距離計算を行う代わりに、この行列を照会できました。
次の方法で何か:
| Carl | Mark | Joe
----------------------
Carl |10 km | 5km | 10km
Mark | | 20km | 15km
Joe | | | 25km
この隣接行列のデータ構造として何をお勧めしますか?また、専用の距離計算よりも高速になるようにルックアップをどのように実装しますか?
助けていただければ幸いです。
アンディ