熊猫:使用邻接矩阵进行高效的空间分析

时间:2013-05-29 14:42:49

标签: python pandas geospatial geopy

我有一个非常大的带有坐标的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,我需要不同时间计算点之间的距离。通常需要相互比较的点是相同的,例如当我想计算每天从Carl到所有其他买家的距离时。

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   

您建议将此邻接矩阵作为数据结构,以及如何实现查找,使其比专用距离计算更快。

我会非常感谢任何帮助。

安迪

0 个答案:

没有答案