[PYTHON] Animation von Geodaten durch Geopandas

Einführung

geopandas ist eine Erweiterung von pandas, einer Python-Bibliothek, die Daten einschließlich geografischer Daten in tabellarischer Form wie Pandas verarbeiten kann. Geopandas enthält auch Funktionen zur Visualisierung von Geodaten. Da die Daten jedoch so wie sie sind nur an matplotlib übergeben werden, sollten Sie grundsätzlich in der Lage sein, Animationen mit matplotlib zu erstellen. Die derzeitige stabile Version von Geopandas, 0.2.1, erschwert jedoch den Zugriff auf das Künstlerobjekt. Wenn Sie animieren möchten, wird daher empfohlen, den neuesten Quellcode von github wie folgt zu installieren, bis die nächste stabile Version veröffentlicht wird.

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

Zu verwendende Daten

Dieses Mal werden wir den Übergang des Bevölkerungsverhältnisses in den 23 Bezirken Tokios visualisieren (im Bereich der geografischen Daten ist es möglicherweise schwieriger, die Daten vorzubereiten, als sie tatsächlich zu verarbeiten).

Die topografischen Daten stammen von JapanCityGeoJson 2016 tokyo23.json ) Lädt die Geojson-Datei herunter.

Bevölkerungsdaten sind [Wikipedia: Tokyo Ward](https://ja.wikipedia.org/wiki/%E6%9D%B1%E4%BA%AC%E9%83%BD%E5%8C%BA%E9 Ich habe eine Datei erstellt, die die Daten von% 83% A8) mit dem Namen 23population.csv rekonstruiert.

Animation

Lassen Sie uns die Animation tatsächlich ausführen. Unten ist der 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))

Bevölkerungsdaten werden in eine Variable namens df geladen, und Geländedaten werden in eine Variable namens geodf geladen.

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()

Um das Künstlerobjekt zu erhalten, ruft das Zeichnen der Geländedaten die Funktion gpd.plotting.plot_polygon_collection anstelle von gpd.GeoDataFrame.plot auf.

tokyo23.gif

Referenzlink

Recommended Posts

Animation von Geodaten durch Geopandas
Visualisierung von Daten nach Präfektur
Emotionale Analyse umfangreicher Tweet-Daten durch NLTK
Analyse von Finanzdaten durch Pandas und deren Visualisierung (2)
Abnormalitätserkennung von Zeitreihendaten durch LSTM (Keras)
Daten nach Schwellenwert aufteilen
Trainingsdaten von CNN
Korrelation durch Datenvorverarbeitung
Visualisierung von Daten anhand einer erklärenden Variablen und einer objektiven Variablen
Vorverarbeitung von Präfekturdaten
Auswahl der Messdaten
Was ich bei der Analyse der Daten des Ingenieurmarktes gesehen habe
Experiment zur Optimierung der Tensorflow-Daten
Klassifizieren Sie Daten nach der k-means-Methode
Gzip komprimiert Daten durch Streaming
Berechnung der Ähnlichkeit durch MinHash
Fourier-Transformation von Rohdaten
Von Django erfasste Daten wurden weitergegeben
Durchschnittliche Schätzung der begrenzten Daten
Über die Datenverwaltung von Amboss-App-Server
Wahrscheinlichkeitsvorhersage von unausgeglichenen Daten
Automatische Erfassung von Genexpressionsdaten durch Python und R.
Impressionen von Touch, einem von Python erstellten Datenvisualisierungstool