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