Animazione dei movimenti spaziali in Python
Animazione dinamica dei movimenti spaziali in Python
Come trasformare una matrice di origine-destinazione in un’animazione incantevole
I dati spaziali sono intrinsecamente visivi e i progressi nella visualizzazione di dati (geo-)spaziali in Python hanno reso molto facile tracciare rapidamente mappe di tutte le forme e dimensioni. È anche possibile creare facilmente animazioni di grafici e mappe semplici. In particolare, le mappe coropletiche, con poligoni statici e colori che cambiano, possono essere facilmente create grazie a funzioni predefinite.
Ma quando si tratta di dati di movimento e di animare delle linee, il compito è un po’ più complicato. Qui cercherò di dare un esempio di come ho cercato di risolvere l’animazione dei dati di movimento spaziale in Python.
Dati iniziali
Per iniziare, abbiamo bisogno di alcuni dati con timestamp (linea-data); in questo esempio userò i dati di bike sharing del sistema di bike sharing di Oslo, in Norvegia. I dati sono liberamente disponibili sotto la Norwegian Licence for Open Government Data (NLOD) 2.0/Open Government License, dal sito web di Oslo Bysykkel.
import geopandas as gpd
import pandas as pd
# Importa dati da un file csv
data = pd.read_csv("https://data.urbansharing.com/oslobysykkel.no/trips/v1/2023/10.csv")
data = data[['started_at', 'ended_at', 'duration', 'start_station_latitude', 'start_station_longitude', 'end_station_latitude', 'end_station_longitude']]
# Seleziona solo i dati di un giorno
data['start_day'] = data['started_at'].apply(lambda x: int(x[8:11]))
data = data[data["start_day"]==day]
data
Dato che i dati consistono nei punti di partenza e arrivo dei viaggi, dobbiamo creare una linea tra i punti e per farlo possiamo utilizzare l’implementazione dell’algoritmo di Dijkstra in NetworkX.
- Impara a disimparare le macchine
- 4 Pandas One-Liners Che Risolvono Task Particolari In Modo Efficientie.
- Una panoramica del calcolo matriciale perché la moltiplicazione delle matrici è così?
Creazione delle linee di movimento
Prima di poter creare le linee di movimento, abbiamo bisogno di una rete di strade che possiamo utilizzare per il calcolo del percorso più breve. Con osmnx
possiamo ottenere una rete ciclabile da OpenStreetMap dell’area di nostro interesse. Utilizzeremo l’estensione dei dati dei viaggi in bicicletta come area di studio.
import osmnx as ox
# Crea un GeoDataFrame dalle stazioni
initial_data = gpd.GeoDataFrame(data, geometry=gpd.points_from_xy(data['start_station_longitude'], data['start_station_latitude']), crs="EPSG:4326")
# Ottieni i limiti totali
total_bounds = ...