2017-05-12 2 views
1

Ich habe zwei Datensätze, die ich brauche auf einem Abstand zwischen zwei Koordinaten Zustand miteinander zu verbinden. Ich habe eine Funktion erstellt, die Haversines formula verwendet, um distance_km zu berechnen, aber in Leistungseinschränkungen für wie lange es dauert.zwei Datenrahmen auf geringste Abstand zwischen den Koordinaten Python

Datensatz 1:

building_id | lat | lng 
-------------|-------|-------- 
     1  | 32.11 | -71.22 
     2  | 32.44 | -72.25 
     3  | 31.75 | -71.36``` 

Datensatz 2:

building_id | lat | lng 
------------|-------|-------- 
     4  | 31.65 | -73.52 
     5  | 32.78 | -70.21 
     6  | 36.15 | -72.49 

Jeder Datensatz verfügt über mehr als 10.000 Gebäude in ihnen, und ich möchte Daten-Set 2-Datensatz 1 passen, aber nur dann, wenn die Entfernung in km beträgt weniger als 0,0075.

ich zur Zeit durch jede Zeile des Datensatzes 1 am iterieren und alle lat lng Combos von Daten-Set 2 den Mindestabstand zu bestimmen aufzublicken

dataset_2_latlng_dict = dict(zip(dataset_2.lng,dataset_2.lat)) 

for index, row in dataset_1.iterrows(): 
    lat = row['lat'] 
    lng = row['lng'] 
    all_dist = [] 
    final_list = [] 
    for key, value in dataset_2_latlng_dict.iteritems(): 
     distance = utils.distance_km(key,value,lng,lat) 
     all_dist.extend([distance]) 
     final_list = sorted(all_dist, key=float) 
    dataset_1['min_distance'] = final_list[0] 
+0

Haben Sie eine größere Datenmenge, die für den Test verwendet werden könnte? –

Antwort

0

Sie keine Daten zu bieten hat, so will ich diese verlassen Antwort nur als beschreibend.

Wie Sie erwarten, gibt es keinen Grund, die Abstände zu jedem der anderen Gebäuden zu berechnen. Die 7,5-Meter-Spezifikation bedeutet, dass die Lat und Longs VERY in der Nähe direkt für alle Gebäude, die nahe beieinander sind.

Der Abstand zwischen den Breitenlinien variiert an den Polen am Äquator zu 111.7km zwischen 110.6km. Wenn wir eine Fehlermarge und eine Rundung hinzufügen, um diese Analyse zu vereinfachen, können wir eine Schätzung von 100 km pro Grad verwenden. Dies bedeutet, dass die maximale Entfernung von 0,0075 km maximal 0,000075 Grad beträgt. Daher wird jedes Gebäude, das den 0,0075 km Abstandsstandard erfüllt, notwendigerweise auch den 0,000075 Breitengrad-Standard erfüllen. Wenn Sie die Berechnungen auf Gebäude beschränken, die innerhalb von 0,000075 Grad liegen, müssen Sie nur die Berechnung für eine viel kleinere Untergruppe von Gebäuden durchführen.

Daher können Sie die Standortlisten einfach nach Breitengrad sortieren und dann die Listen durchqueren, indem Sie die Entfernungen nur für Gebäude mit einem Breitengrad von 0,000075 Grad (7,5 Meter) eines Gebäudes auf der anderen Liste vergleichen.

Verwandte Themen