[PYTHON] Visualisierung von Daten nach Präfektur

Was ist das

Ich habe eine Bibliothek (Japanmap) für ** Python3 ** erstellt, die die Karte Japans nach Präfektur farblich kodiert. Das Ausführungsbeispiel wird auf dem Jupyter-Notizbuch bestätigt.

Installation

Du kannst es mit pip machen. numpy [^ 1], OpenCV und Pillow sind ebenfalls installiert. xlrd wird zum Lesen von Excel-Dateien verwendet.

bash


pip install -U japanmap jupyter matplotlib pandas xlrd

Was ist ein Präfekturcode?

Präfekturcode (im Folgenden als Präfekturcode abgekürzt) ist 01 für jede durch JIS X 0401 definierte Präfektur. Ab 47 Codes. Das Programm behandelt es als Ganzzahl (ignoriert die führende 0).

Bestätigung des Präfekturnamens

Sie finden den Präfekturnamen für jeden Präfekturcode mit pref_names.

python3


from japanmap import pref_names
pref_names[1]
>>>
'Hokkaido'

Den Präfekturcode für den Präfekturnamen finden Sie mit pref_code.

python3


from japanmap import pref_code
pref_code('Kyoto'), pref_code('Kyoto府')
>>>
(26, 26)

Sie finden den Präfekturcode für jede der acht regionalen Abteilungen in Gruppen.

python3


from japanmap import groups
groups['Kanto']
>>>
[8, 9, 10, 11, 12, 13, 14]

Weiße Karte

Sie können eine weiße Karte (Rasterdaten) mit Bild erhalten.

python3


%config InlineBackend.figure_formats = {'png', 'retina'}
%matplotlib inline
import matplotlib.pyplot as plt
from japanmap import picture
plt.rcParams['figure.figsize'] = 6, 6
plt.imshow(picture());

image.png

Sie können die Präfektur auch mit Farbe bemalen.

python3


plt.imshow(picture({'Hokkaido': 'blue'}));

image.png

In PNG-Datei speichern

Sie können es in einer Datei mit savefig speichern.

python3


plt.imshow(picture({'Hokkaido': 'blue'}))
plt.savefig('japan.png')

Benachbarte Informationen

Mit is_faced2sea können Sie sehen, ob der Bereich einschließlich des Bürostandorts für den Präfekturcode zum Meer zeigt.

python3


from japanmap import is_faced2sea
for i in [11, 26]:
    print(pref_names[i], is_faced2sea(i))
>>>
Präfektur Saitama Falsch
Präfektur Kyoto stimmt

Mit is_sandwiched2sea können Sie sehen, ob der Bereich einschließlich des Bürostandorts für den Präfekturcode zwischen dem Meer liegt. (Gibt es zwei oder mehr nicht durchgehende Strände?)

python3


from japanmap import is_sandwiched2sea
for i in [2, 28]:
    print(pref_names[i], is_sandwiched2sea(i))
>>>
Präfektur Aomori Falsch
Präfektur Hyogo stimmt

Angrenzend wird der Präfekturcode angezeigt, in dem der Bereich einschließlich des Standortes der Agentur neben dem Präfekturcode liegt.

python3


from japanmap import adjacent
for i in [2, 20]:
    print(pref_names[i], ':', ' '.join([pref_names[j] for j in adjacent(i)]))
>>>
Präfektur Aomori:Präfektur Iwate Präfektur Akita
Präfektur Nagano:Präfektur Gunma Präfektur Saitama Präfektur Niigata Präfektur Toyama Präfektur Yamanashi Präfektur Gifu Präfektur Shizuoka Präfektur Aichi

Grenzvektordaten

Mit get_data können Sie die Punkteliste und die Punktindexliste jeder Präfektur abrufen. Sie können dies verwenden, um eine Liste der Präfekturgrenzen (Indexliste) mit pref_points abzurufen.

python3


from japanmap import get_data, pref_points
qpqo = get_data()
pnts = pref_points(qpqo)
pnts[0]  #Grenzkoordinaten von Hokkaido(Längengrad Breitengrad)aufführen
>>>
[[140.47133887410146, 43.08302992960164],
 [140.43751046098984, 43.13755540826223],
 [140.3625317793531, 43.18162745988813],
...

Sie können die Randdaten mit pref_map visualisieren.

python3


from japanmap import pref_map
svg = pref_map(range(1,48), qpqo=qpqo, width=2.5)
svg

image

In SVG-Datei speichern

pref_map ist im SVG-Format. Sie können es wie folgt in einer Datei speichern.

python3


with open('japan.svg', 'w') as fp:
    fp.write(svg.data)

Ein Beispiel für Graustufen nur in Kanto.

python3


pref_map(groups['Kanto'], cols='gray', qpqo=qpqo, width=2.5)

image

Konvertieren Sie das Flächenverhältnis der Präfektur anhand der Präfekturdaten (Bevölkerung).

Konvertieren wir das Flächenverhältnis auf der Karte durch das Bevölkerungsverhältnis. Bevölkerungsdaten von "Ich sehe, Statistikakademie" des Statistikbüros des Ministeriums für innere Angelegenheiten und Kommunikation Drücken Sie 2017 auf "Source Statistics Table" am unteren Bildschirmrand Laden wir die Datei (a00400.xls) der Bevölkerung [^ 2] nach Präfektur herunter.

python3


import pandas as pd
df = pd.read_excel('a00400.xls', usecols=[9, 12, 13, 14], skiprows=18, skipfooter=3,
                   names='Präfektur Männer und Frauen insgesamt Männer und Frauen'.split()).set_index('Präfekturen')
df[:3]
Geschlecht insgesamt Mann Frau
Präfekturen
Hokkaido 5320 2506 2814
Präfektur Aomori 1278 600 678
Präfektur Iwate 1255 604 651

Zeigen wir sie in absteigender Reihenfolge des Bevölkerungsverhältnisses an. "5,09", das Verhältnis von Tokio, entspricht dem 5,09-fachen des Präfektur-Durchschnitts.

python3


df['Verhältnis'] = df.Geschlecht insgesamt/ df.Geschlecht insgesamt.mean()
df.sort_values('Verhältnis', ascending=False)[:10]
Geschlecht insgesamt Mann Frau Verhältnis
Präfekturen
Tokio 13724 6760 6964 5.090665
Präfektur Kanagawa 9159 4569 4590 3.397362
Präfektur Osaka 8823 4241 4583 3.272729
Präfektur Aichi 7525 3764 3761 2.791260
Saitama 7310 3648 3662 2.711510
Präfektur Chiba 6246 3103 3143 2.316839
Präfektur Hyogo 5503 2624 2879 2.041237
Hokkaido 5320 2506 2814 1.973356
5107 2415 2692 1.894348
3675 1810 1866 1.363174

python3


from japanmap import trans_area
qpqo = get_data(True, True, True)
pref_map(range(1,48), qpqo=trans_area(df.Präfektur Shizuoka Lassen Sie es uns visualisieren. Sie können die Fläche der Präfektur mit `trans_area` in das angegebene Verhältnis umwandeln. Wenn beispielsweise das Umwandlungsverhältnis für jede Präfektur "[2, 1, 1, 1, ...]" beträgt, hat Hokkaido die doppelte ursprüngliche Fläche und andere Präfekturen haben das gleiche Verhältnis wie die ursprüngliche Fläche. Im Folgenden wird die Fläche verdoppelt, wenn die Bevölkerung doppelt so hoch ist wie der Durchschnitt. Geschlecht insgesamt, qpqo), width=2.5)

image

Ich habe versucht, es rau zu machen und die Verzerrung so weit wie möglich zu reduzieren, aber es ist ziemlich schwerwiegend.

Visualisieren Sie die Bevölkerung auf einer weißen Karte

Mit den folgenden Schritten können Sie die Präfektur mit einer großen Population in Dunkelrot visualisieren.

python3


cmap = plt.get_cmap('Reds')
norm = plt.Normalize(vmin=df.Geschlecht insgesamt.min(), vmax=df.Geschlecht insgesamt.max())
fcol = lambda x: '#' + bytes(cmap(norm(x), bytes=True)[:3]).hex()
plt.colorbar(plt.cm.ScalarMappable(norm, cmap))
plt.imshow(picture(df.Geschlecht insgesamt.apply(fcol)));

image.png

4 Farbproblem

Lösen Sie das 4-Farben-Problem mithilfe von Adjazenzinformationen Lass uns gehen.

Malen wir ganz Japan mit 4 Farben, so dass eine Präfektur eine Farbe ist und die benachbarten Präfekturen unterschiedlich sind. Das Problem, benachbarten Objekten auf diese Weise unterschiedliche Farben zuzuweisen, wird als Vertex-Farbproblem bezeichnet. Das Problem der Scheitelpunktfärbung besteht darin, den Scheitelpunkten mit der minimalen Anzahl von Farben Farben zuzuweisen, sodass benachbarte Scheitelpunkte im Diagramm unterschiedliche Farben haben. Als Anwendung hierfür besteht beispielsweise ein Problem beim Bestimmen der Frequenz für jede Basisstation eines Mobiltelefons. (Unterschiedliche Farben → unterschiedliche Frequenzen → Sie können sprechen, da die Funkwellen nicht stören)

area.png

Lösen Sie das 4-Farben-Problem

Es wurde mathematisch bewiesen, dass unabhängig von der ebenen Karte die angrenzenden Bereiche unterschiedlich sind und die Farben immer innerhalb von 4 Farben liegen. Es ist jedoch nicht offensichtlich, wie sie separat zu malen sind. Hier lösen wir die mathematische Optimierung.

Die mathematische Optimierung wird verwendet, um Dinge wie die Kostenminimierung zu lösen, kann aber auch Probleme mit Einschränkungen ohne Zielfunktion lösen. Das für die mathematische Optimierung verwendete Paket PuLP finden Sie unter Python in Optimization.

table.png

Zum Ausführen benötigen Sie zusätzliches PuLP und ortoolpy (pip install pulp ortoolpy).

python3


import pandas as pd
from ortoolpy import model_min, addbinvars, addvals
from pulp import lpSum
from japanmap import pref_names, adjacent, pref_map
m = model_min()  #Mathematisches Modell(1)
df = pd.DataFrame([(i, pref_names[i], j) for i in range(1, 48) for j in range(4)], 
                  columns=['Code', 'Präfektur', 'Farbe'])
addbinvars(df)  #Variablentabelle(2)
for i in range(1, 48):
    m += lpSum(df[df.Code == i].Var) == 1  #1 Präfektur 1 Farbe(3)
    for j in adjacent(i):
        for k in range(4):  #Verschiedene Farben für benachbarte Präfekturen(4)
            m += lpSum(df.query('Code.isin([@i, @j])und Farbe== @k').Var) <= 1
m.solve()  #Lösung(5)
addvals(df)  #Ergebniseinstellung(6)
Vier Farben= ['red', 'blue', 'green', 'yellow']
cols = df[df.Val > 0].Farbe.apply(四Farbe.__getitem__).reset_index(drop=True)
pref_map(range(1, 48), cols=cols, width=2.5)

image

[^ 1]: numpy ist eine Bibliothek linearer Algebra wie die Matrixberechnung. Als ähnliche Software wurde häufig MATLAB verwendet. Da sich numpy und MATLAB auf derselben Basis befinden, gibt es keinen großen Leistungsunterschied. Obwohl MATLAB aufgeladen ist, haben Python und Numpy den Vorteil, dass sie kostenlos verwendet werden können. [^ 2]: Tabelle 2 Präfektur, Geschlechterbevölkerung und Bevölkerungsverhältnis - Gesamtbevölkerung, japanische Bevölkerung (Stand 1. Oktober 2014) (Excel: 41 KB)

Recommended Posts

Visualisierung von Daten nach Präfektur
Vorverarbeitung von Präfekturdaten
Analyse von Finanzdaten durch Pandas und deren Visualisierung (2)
Analyse von Finanzdaten durch Pandas und deren Visualisierung (1)
Visualisierung von Daten anhand einer erklärenden Variablen und einer objektiven Variablen
Visualisierung der von numpy erstellten Matrix
10 Auswahlen der Datenextraktion durch pandas.DataFrame.query
Animation von Geodaten durch Geopandas
Impressionen von Touch, einem von Python erstellten Datenvisualisierungstool
Empfehlung von Altair! Datenvisualisierung mit Python
Echtzeitvisualisierung von Thermografie AMG8833-Daten in Python
Emotionale Analyse umfangreicher Tweet-Daten durch NLTK
Visualisierung des Trainee-Rankings von Produce 101 Japan durch Scraping
Visualisierungsnotiz von Python
Python-Datenvisualisierungsbibliotheken
Daten nach Schwellenwert aufteilen
Trainingsdaten von CNN
Korrelation durch Datenvorverarbeitung
Datenvisualisierung mit Pandas
Auswahl der Messdaten
[Python] Zeichnen Sie Daten nach Präfektur auf einer Karte (Anzahl der Autos im ganzen Land)
Abnormalitätserkennung von Zeitreihendaten durch LSTM (Keras)
Übersicht und Tipps von Seaborn mit statistischer Datenvisualisierung
Lassen Sie uns die von der Präfektur Shimane veröffentlichten Niederschlagsdaten visualisieren
[Wissenschaftlich-technische Berechnung mit Python] Plot, Visualisierung, Matplotlib von 2D-Daten, die aus einer Datei gelesen wurden
Preisunterschiede nach Präfektur (2019)
Experiment zur Optimierung der Tensorflow-Daten
Scraping von IDWR-Bulletin-Daten nach Anzahl der Berichte pro Influenza-Fixpunkt und nach Präfektur
Klassifizieren Sie Daten nach der k-means-Methode
Gzip komprimiert Daten durch Streaming
Berechnung der Ähnlichkeit durch MinHash
Python-Anwendung: Datenvisualisierung # 2: matplotlib
Datenvisualisierungsmethode mit Matplotlib (1)
Negative / positive Beurteilung von Sätzen und Visualisierung von Gründen durch Transformer
Fourier-Transformation von Rohdaten
Von Django erfasste Daten wurden weitergegeben
Durchschnittliche Schätzung der begrenzten Daten
Datenvisualisierungsmethode mit Matplotlib (2)
Visualisierungsnotiz von Pandas, Seaborn
Negative / positive Beurteilung von Sätzen durch BERT und Visualisierung von Gründen
Visualisierung besessener Fähigkeiten [Fortsetzung]
Über die Datenverwaltung von Amboss-App-Server
Was ich bei der Analyse der Daten des Ingenieurmarktes gesehen habe
Wahrscheinlichkeitsvorhersage von unausgeglichenen Daten
Eine einfache Datenanalyse von Bitcoin, die von CoinMetrics in Python bereitgestellt wird
Lassen Sie uns die von der Präfektur Shimane veröffentlichten Daten zum Flusswasserstand visualisieren
Die Datenvisualisierungsbibliothek "folium" von Python ist sehr einfach zu bedienen
Praxis der Datenanalyse durch Python und Pandas (Tokyo COVID-19 Data Edition)
[Python] Visualisierung von Längsschnittdaten (Plot, Box Whisker, Violin-Diagramm, Konfidenzintervall, Histogramm)
[Python] Taple-Version des Pulldowns der Präfektur
Erste Satellitendatenanalyse von Tellus
Fehler geteilt durch 0 Verarbeitung von ZeroDivisionError 2
Erweiterung des Python-Wörterbuchs um Argumente
Fehler geteilt durch 0 Behandlung von ZeroDivisionError
[ns3-30] Aktivieren Sie die Visualisierung von Python-Skripten
Zusammenfassung der grundlegenden Implementierung von PyTorch
Train_test_split des Feature-Betrags, der von dict gehalten wird
So verwenden Sie das Python-Visualisierungspaket ordnungsgemäß
Datenvisualisierung in Python-Draw Cool Heatmaps