Zeichnen Sie mit Python eine farbige Karte auf Stadtebene wie die folgende Informationen zur Präfekturebene finden Sie unter hier.
Zuerst dachte ich über die Verwendung von Geopandas + Geoplot nach, aber ich konnte Geoplot mit Google Colab nicht gut installieren. Deshalb gab ich Geoplot auf und machte verschiedene Fehler, um zur einfachsten Methode zu gelangen. Grundsätzlich ist es in Ordnung, wenn Geopandas zusätzlich installiert werden können.
Übrigens basiert die Farbe jeder Farbe diesmal auf dem Wert der Zufallszahl. Bitte ändern Sie die Daten entsprechend.
Am Ende der Seite befindet sich eine [Codeliste](# Codeliste).
Verwenden Sie eine Bibliothek namens geopandas, um farbige Karten zu erstellen
pip install geopandas
Vorbereitung anderer Bibliotheken
import numpy as np
import geopandas as gpd
import random
import matplotlib.colors
import matplotlib.pyplot as plt
Laden Sie die Daten der Form (des Polygons) der Stadt, des Bezirks, der Stadt und des Dorfes von "Nationaler Dienst zum Herunterladen numerischer Landinformationen" herunter und verwenden Sie eine geeignete Bearbeitungssoftware (QGIS usw.). ) Vorverarbeitung durchführen.
Wie unten gezeigt, müssen Daten, die aus mehreren Polygonen bestehen, zu einem zusammengefasst werden, obwohl sie sich in derselben Stadt, Gemeinde, Gemeinde und demselben Dorf befinden. Vereinfachen Sie gegebenenfalls auch die Polygone.
Informationen zur Verwendung von QGIS finden Sie unter hier.
Exportieren Sie die vorverarbeiteten Daten im Geojson-Format und laden Sie sie mit Geopandas Ich möchte, dass Sie das Verzeichnis der Dateien entsprechend ändern.
filename = "/content/drive/My Drive/Colab Notebooks/pref47.geojson"
df = gpd.read_file(filename, encoding='SHIFT-JIS')
Fügen Sie hier auch die zum Färben verwendeten Daten zum Datenrahmen im Geopandas-Format hinzu. Die Verwendung ist die gleiche wie bei Pandas, daher ist es leicht zu verstehen. Dieses Mal wird der Einfachheit halber ein zufälliger Wert verwendet, es wird jedoch davon ausgegangen, dass hier Daten wie Bevölkerung und Löhne eingegeben werden.
df["target"] = [random.random() for i in range(df.shape[0])]
Definieren Sie eine Funktion, die die Farbe aus den Daten für jede Stadt, Gemeinde, Stadt und jedes Dorf bestimmt.
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
Endlich Kartenplot Wie bei Pandas werden nur die interessierenden Daten ausgewählt und als mini_df verwendet. Der Punkt ist, eine Liste von Farbinformationen mit color = zu übergeben, wenn Sie df.plot ausführen
mini_df = df[df["N03_001"].isin(["Präfektur Ehime", "Präfektur Tokushima", "Präfektur Kagawa", "Präfektur 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()
das ist alles!
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äfektur Ehime", "Präfektur Tokushima", "Präfektur Kagawa", "Präfektur 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()
Nationaler Dienst zum Herunterladen numerischer Landinformationen 09. Mehrere Funktionen zu einer Funktion kombinieren Lesen und Zeichnen von Formdateien und Geojson mit Python
Recommended Posts