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/
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.
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.
Recommended Posts