Анимация пространственного движения в Python

Анимация трехмерного движения в Python

Как превратить матрицу происхождения-назначения в завораживающую анимацию

Статическая карта перемещений с использованием данных о велопрокате. Изображение от автора

Пространственные данные по своей природе являются визуальными, и преимущества визуализации (гео-)пространственных данных с помощью Python позволяют легко и быстро строить карты всех форм и размеров. Создание анимаций диаграмм и простых карт тоже довольно просто. Особенно при работе с хороплетическими картами, где есть готовые функции для создания статических полигонов с изменяющимися цветами.

Однако, когда речь идет о перемещении данных и создании анимированных линий, задача становится немного сложнее. В этой статье я попытаюсь привести пример того, как я пытался решить задачу анимации пространственных движений с использованием Python.

Начальные данные

Для начала нам понадобятся некоторые данные (линии) с метками времени; в этом примере я буду использовать данные о велопрокатной системе в Осло, Норвегия. Данные общедоступны в рамках “Лицензии Норвежского правительства по открытым данным (NLOD) 2.0″/Open Government License и доступны на главной странице Oslo Bysykkel.

import geopandas as gpdimport pandas as pd# Импорт данных из csvdata = 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']]# Ограничение данных только одним днемdata['start_day'] = data['started_at'].apply(lambda x: int(x[8:11]))data = data[data["start_day"]==day]data

Так как данные представляют собой начальные и конечные точки поездок, нам нужно создать линию между этими точками, и для этого мы можем использовать реализацию алгоритма Дейкстры в NetworkX.

Создание линий перемещения

Прежде чем мы сможем создать линии перемещения, нам понадобится сеть улиц, которую мы можем использовать для вычисления кратчайшего пути. С помощью osmnx мы можем получить сеть велосипедных дорожек из OpenStreetMap для интересующей нас области. Мы будем использовать границы данных о поездках на велосипеде как нашу исследуемую область.

import osmnx as ox# Создание GeoDataFrame из станцийinitial_data = gpd.GeoDataFrame(data, geometry=gpd.points_from_xy(data['start_station_longitude'],data['start_station_latitude']),crs="EPSG:4326")# Получение общих границtotal_bounds =…