[Python] Farbiges Kartenplot auf der Ebene von Stadt / Gemeinde / Stadt / Dorf

Zweck dieses Artikels

Zeichnen Sie mit Python eine farbige Karte auf Stadtebene wie die folgende Informationen zur Präfekturebene finden Sie unter hier.

plot08.png

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

Kommentar

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.

plot07.jpg 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!

Codeliste

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

Referenz

Nationaler Dienst zum Herunterladen numerischer Landinformationen 09. Mehrere Funktionen zu einer Funktion kombinieren Lesen und Zeichnen von Formdateien und Geojson mit Python

Recommended Posts

[Python] Farbiges Kartenplot auf der Ebene von Stadt / Gemeinde / Stadt / Dorf
[Python] Passen Sie den Standard für die Farbkarte an
[Python] Importieren Sie das Modul eine Ebene höher
Rufen Sie den Python-Debugger jederzeit auf
Python-Grundkurs (Ende 15)
Vergleichen Sie die Geschwindigkeit von Python Append und Map
Senden Sie Google Mail am Ende des Vorgangs [Python]
Verbreiten Sie die Kartenkacheln des Geographical Institute mit Python
Zum Zeitpunkt des Python-Updates mit Ubuntu
Entfernen Sie eine bestimmte Zeichenfolge am Ende von Python
[Python] Geigenplot
Python bei Docker
Zeichnen und verstehen Sie die multivariate Normalverteilung in Python
Schauen wir uns das Streudiagramm vor der Datenanalyse an
Aufgaben zu Beginn eines neuen Python-Projekts