[Python] Tracé de carte en couleur au niveau de la ville / quartier / ville / village

Objectif de cet article

Dessinez une carte colorée au niveau de la ville comme celle ci-dessous avec Python Pour le niveau préfectoral, allez sur ici

plot08.png

Au début, je pensais utiliser geopandas + geoplot, mais je ne pouvais pas bien installer geoplot avec Google Colab, j'ai donc abandonné Geoplot et commis diverses erreurs pour arriver à la méthode la plus simple. Fondamentalement, ce n'est pas grave si les géopandas peuvent être installés en plus.

À propos, la couleur de chaque couleur est basée sur la valeur du nombre aléatoire cette fois, veuillez donc modifier les données le cas échéant.

Il y a une [Liste de codes](# Liste de codes) à la fin de la page.

Commentaire

Utilisez une bibliothèque appelée geopandas pour créer des cartes colorées

pip install geopandas

Préparation d'autres bibliothèques

import numpy as np
import geopandas as gpd
import random
import matplotlib.colors
import matplotlib.pyplot as plt

Téléchargez les données de forme (polygone) de la ville, du quartier, de la ville et du village à partir du "National land numerical information download service" et utilisez le logiciel d'édition approprié (QGIS, etc.) ) Pour effectuer un prétraitement.

Comme indiqué ci-dessous, il est nécessaire de combiner des données constituées de plusieurs polygones en un seul, même s'ils se trouvent dans la même ville, quartier, ville et village. Simplifiez également, si nécessaire, les polygones.

plot07.jpg Lorsque vous utilisez QGIS, veuillez consulter ici.

Exportez les données prétraitées au format geojson et chargez-les avec des géopandas Je veux que vous changiez le répertoire des fichiers comme il convient.

filename = "/content/drive/My Drive/Colab Notebooks/pref47.geojson"
df = gpd.read_file(filename, encoding='SHIFT-JIS')

Ajoutez également les données utilisées pour la coloration à la trame de données au format geopandas ici. L'utilisation est la même que celle des pandas, c'est donc facile à comprendre. Cette fois, par souci de simplicité, une valeur aléatoire est utilisée, mais on suppose que des données telles que la population et les salaires seront saisies ici.

df["target"] = [random.random() for i in range(df.shape[0])]

Définissez une fonction qui détermine la couleur à peindre à partir des données de chaque ville, quartier, ville et village.

def colors_scale(arr):
    n_min = min(arr)
    n_max = max(arr)
    cmap = plt.cm.rainbow
    norm = matplotlib.colors.Normalize(vmin=n_min, vmax=n_max)

    arr = [cmap(norm(r)) for r in arr]
    return arr, cmap, norm

Enfin un tracé de carte De la même manière que les pandas, seules les données d'intérêt sont sélectionnées et utilisées comme mini_df. Le but est de passer une liste d'informations de couleur avec color = lors de l'exécution de df.plot

mini_df = df[df["N03_001"].isin(["Préfecture d'Ehime", "Préfecture de Tokushima", "Préfecture de Kagawa", "Préfecture de Kochi"])]

num_color, cmap, norm = colors_scale(mini_df["num"])

mini_df.plot(color=num_color, figsize=(10,6))
sm = plt.cm.ScalarMappable(cmap=cmap, norm=norm)
plt.colorbar(sm)
plt.show()

c'est tout!

Liste de codes

pip install geopandas
import numpy as np
import geopandas as gpd
import random
import matplotlib.colors
import matplotlib.pyplot as plt

filename = "/content/drive/My Drive/Colab Notebooks/pref47.geojson"
df = gpd.read_file(filename, encoding='SHIFT-JIS')

df["target"] = [random.random() for i in range(df.shape[0])]

def colors_scale(arr):
    n_min = min(arr)
    n_max = max(arr)
    cmap = plt.cm.rainbow
    norm = matplotlib.colors.Normalize(vmin=n_min, vmax=n_max)

    arr = [cmap(norm(r)) for r in arr]
    return arr, cmap, norm


mini_df = df[df["N03_001"].isin(["Préfecture d'Ehime", "Préfecture de Tokushima", "Préfecture de Kagawa", "Préfecture de Kochi"])]

num_color, cmap, norm = colors_scale(mini_df["num"])

mini_df.plot(color=num_color, figsize=(10,6))
sm = plt.cm.ScalarMappable(cmap=cmap, norm=norm)
plt.colorbar(sm)
plt.show()

référence

Service national de téléchargement d'informations numériques sur les terres 09. Combinez plusieurs fonctionnalités en une seule fonctionnalité Lire et dessiner des fichiers de formes et geojson à l'aide de python

Recommended Posts

[Python] Tracé de carte en couleur au niveau de la ville / quartier / ville / village
[Python] Ajuster la norme de la carte des couleurs
[Python] Importez le module d'un niveau supérieur
Appelez le débogueur python à tout moment
Cours de base Python (à la fin de 15)
Comparez la vitesse d'ajout et de carte Python
Envoyer Gmail à la fin du processus [Python]
Répandre les tuiles de la carte de l'Institut géographique avec Python
Au moment de la mise à jour de python avec ubuntu
Supprimer une chaîne spécifique à la fin de python
[Python] Parcelle de violon
python chez docker
Tracer et comprendre la distribution normale multivariée en Python
Regardons le diagramme de dispersion avant l'analyse des données
Tâches au démarrage d'un nouveau projet python