[PYTHON] Animation des géodonnées par geopandas

introduction

geopandas est une extension de pandas, une bibliothèque python qui peut gérer des données, y compris des données géographiques au format tabulaire comme les pandas. geopandas comprend également des fonctionnalités de visualisation de géodonnées. Cependant, comme les données sont simplement transmises à matplotlib telles quelles, vous devriez pouvoir créer des animations avec matplotlib. Cependant, la version stable actuelle de geopandas, 0.2.1, rend difficile l'accès à l'objet artiste. Par conséquent, si vous souhaitez animer, il est recommandé d'installer à partir du dernier code source de github comme suit jusqu'à ce que la prochaine version stable soit publiée.

pip install -U git+https://github.com/geopandas/geopandas/

Données à utiliser

Cette fois, nous allons visualiser la transition du ratio de population dans les 23 quartiers de Tokyo (pour les données géographiques, il peut être plus difficile de préparer les données que de les traiter réellement).

Les données topographiques vont de JapanCityGeoJson 2016 à tokyo23.json ) Télécharge le fichier geojson.

Les données démographiques sont [Wikipedia: Tokyo Ward](https://ja.wikipedia.org/wiki/%E6%9D%B1%E4%BA%AC%E9%83%BD%E5%8C%BA%E9 J'ai créé un fichier qui a reconstruit les données de% 83% A8) avec le nom 23population.csv.

animation

Exécutons réellement l'animation. Ci-dessous le code.

import geopandas as gpd

df = pd.read_csv('23population.csv')
geodf = gpd.read_file('tokyo23.json').dissolve(by="id").sort_index()
years = np.sort(np.unique(df.year.values))

Les données de population sont chargées dans une variable appelée df et les données de terrain sont chargées dans une variable appelée geodf.

from matplotlib.animation import FuncAnimation
fig, ax = plt.subplots()
ims = []
def update_fig(year):
    if len(ims) > 0:
        ims[0].remove()
        del ims[0]
    geos = geodf['geometry'].values
    sum = np.sum(df[(df.year==year)].sort_values(by='city').population)
    population_rates = df[(df.year==year)].sort_values(by='city').population/sum
    artist = gpd.plotting.plot_polygon_collection(ax, geos, population_rates, True, cmap="Reds")
    ims.append(artist)
    ax.set_title('year = ' + str(year))
    return ims
anim = FuncAnimation(fig, update_fig, interval=1000, repeat_delay=3000, frames=years)
fig.show()

Pour obtenir l'objet artist, dessiner les données de terrain n'est pas gpd.GeoDataFrame.plot mais appelle la fonction gpd.plotting.plot_polygon_collection qui y est appelée.

tokyo23.gif

Lien de référence

Recommended Posts

Animation des géodonnées par geopandas
Visualisation des données par préfecture
Analyse émotionnelle des données de tweet à grande échelle par NLTK
Analyse des données financières par pandas et leur visualisation (2)
Détection d'anomalies des données de séries chronologiques par LSTM (Keras)
Fractionner les données par seuil
Données de formation par CNN
Corrélation par prétraitement des données
Comment visualiser les données par variable explicative et variable objective
Pré-traitement des données préfectorales
Sélection des données de mesure
Ce que j'ai vu en analysant les données du marché des ingénieurs
Expérience de réglage des données Tensorflow
Classer les données par la méthode k-means
Gzip compresser les données en streaming
Calcul de similitude par MinHash
Transformée de Fourier des données brutes
Données acquises par Django reliées
Estimation moyenne des données plafonnées
À propos de la gestion des données d'Anvil-App-Server
Prédiction de probabilité de données déséquilibrées
Acquisition automatique des données de niveau d'expression génique par python et R
Impressions de toucher Dash, un outil de visualisation de données réalisé par python