Maison >développement back-end >Tutoriel Python >Comment calculer rapidement les distances entre les coordonnées géographiques en Python et Pandas pour de grands ensembles de données ?

Comment calculer rapidement les distances entre les coordonnées géographiques en Python et Pandas pour de grands ensembles de données ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-02 18:58:02342parcourir

How Can You Quickly Calculate Distances Between Geographic Coordinates in Python and Pandas for Large Datasets?

approximation rapide de Haversine en Python et Pandas

Le calcul des distances entre les coordonnées géographiques à l'aide de la formule Haversine peut prendre beaucoup de temps pour les grands ensembles de données. Pour les applications où la précision n'est pas critique et où les points se trouvent à une courte distance (par exemple, moins de 50 miles), il existe des optimisations qui peuvent accélérer considérablement le processus.

Implémentation Numpy vectorisée

La formule Haversine peut être vectorisée à l'aide de tableaux NumPy. Cette approche exploite les fonctions mathématiques optimisées de NumPy pour effectuer des calculs sur des tableaux entiers, éliminant ainsi le besoin de boucles explicites et améliorant les performances.

<code class="python">import numpy as np

def haversine_np(lon1, lat1, lon2, lat2):
    lon1, lat1, lon2, lat2 = map(np.radians, [lon1, lat1, lon2, lat2])

    dlon = lon2 - lon1
    dlat = lat2 - lat1

    a = np.sin(dlat/2.0)**2 + np.cos(lat1) * np.cos(lat2) * np.sin(dlon/2.0)**2

    c = 2 * np.arcsin(np.sqrt(a))
    km = 6378.137 * c
    return km</code>

Intégration Pandas

Intégration du vecteur La fonction NumPy avec les dataframes Pandas est simple. Les entrées de haversine_np peuvent être directement fournies sous forme de colonnes à partir du dataframe. Par exemple :

<code class="python">import pandas as pd

# Randomly generated data
lon1, lon2, lat1, lat2 = np.random.randn(4, 1000000)
df = pd.DataFrame(data={'lon1':lon1,'lon2':lon2,'lat1':lat1,'lat2':lat2})

# Calculate distances using vectorized NumPy function
km = haversine_np(df['lon1'], df['lat1'], df['lon2'], df['lat2'])

# Append distances to dataframe
df['distance'] = km</code>

Avantages de la vectorisation

La vectorisation évite le besoin de boucles explicites, qui sont intrinsèquement lentes en Python. Au lieu de cela, les opérations vectorisées sont effectuées directement sur les tableaux, en exploitant le code C sous-jacent optimisé de NumPy. Cela entraîne des améliorations significatives des performances, en particulier pour les grands ensembles de données.

Remarque :

Bien que cette approche optimisée fournisse des accélérations substantielles, elle introduit un petit compromis en termes de précision par rapport à la formule originale non vectorisée. Cependant, dans les cas où les distances sont inférieures à 50 miles et où la précision n'est pas primordiale, les avantages en termes de performances l'emportent sur la perte marginale de précision.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn