Dessinez une carte colorée au niveau préfectoral comme celle ci-dessous avec Python Pour le niveau ville / quartier / ville / village, accédez à ici
À propos, les données utilisaient le nombre de voitures particulières détenues dans tout le pays.
Il y a une [Liste de codes](# Liste de codes) à la fin de la page.
Utilisez une bibliothèque appelée japanmap pour créer des cartes colorées
pip install japanmap
Préparation d'autres bibliothèques
import numpy as np
import pandas as pd
import cv2
from PIL import Image
import matplotlib.colors
import matplotlib.pyplot as plt
from japanmap import *
Lire les données Les données ont été traitées en téléchargeant le fichier Excel 2019 à partir de ici.
df = pd.read_csv("how_many_cars.csv")
df = df.iloc[:53,:8]
Enregistrer le nombre de voitures particulières par préfecture au format dictionnaire
for k,n in zip(df["Bureau des transports"], df["Voiture de voyageurs"]):
if k in ["Sapporo", "Hakodate", "Asahikawa", "Muroran", "Kushiro", "Obihiro", "Kitami"]:
tmp=1
else:
tmp = pref_code(k)
tmp = pref_names[tmp]
#print(k,tmp)
if tmp not in num_dict:
num_dict[tmp] = n
else:
num_dict[tmp] += n
Le contenu de num_dict est toujours comme ça
num_dict
>> print(num_dict)
{'Préfecture de Mie': 1161089.0,
'Kyoto': 1007847.0,
...
'Préfecture de Tottori': 346273.0,
'Préfecture de Kagoshima': 955360.0}
Convertir la valeur num_dict créée du nombre d'unités en informations de couleur (RVB)
n_min = min(num_dict.values())
n_max = max(num_dict.values())
#print(n_min)
#print(n_max)
cmap = plt.cm.rainbow
norm = matplotlib.colors.Normalize(vmin=n_min, vmax=n_max)
def color_scale(r):
tmp = cmap(norm(r))
return (tmp[0]*255, tmp[1]*255, tmp[2]*255)
for k,v in num_dict.items():
num_dict[k] = color_scale(v)
Contenu du num_dict final
num_dict
>> print(num_dict)
{'Préfecture de Mie': (19.5, 157.4059464288972, 241.021876181009),
'Kyoto': (41.49999999999999, 128.85792190698177, 246.1066417260737),
...
'Préfecture de Tottori': (127.5, 0.0, 255.0),
'Préfecture de Kagoshima': (47.5, 120.63885699318257, 247.29821868892742)}
Tracer en passant num_dict à japanmap
plt.figure(figsize=(10,8))
plt.imshow(picture(num_dict))
sm = plt.cm.ScalarMappable(cmap=cmap, norm=norm)
plt.colorbar(sm)
plt.show()
c'est tout!
pip install japanmap
import numpy as np
import pandas as pd
import cv2
from PIL import Image
import matplotlib.colors
import matplotlib.pyplot as plt
from japanmap import *
df = pd.read_csv("how_many_cars.csv")
df = df.iloc[:53,:8]
num_dict={}
for k,n in zip(df["Bureau des transports"], df["Voiture de voyageurs"]):
if k in ["Sapporo", "Hakodate", "Asahikawa", "Muroran", "Kushiro", "Obihiro", "Kitami"]:
tmp=1
else:
tmp = pref_code(k)
tmp = pref_names[tmp]
#print(k,tmp)
if tmp not in num_dict:
num_dict[tmp] = n
else:
num_dict[tmp] += n
n_min = min(num_dict.values())
n_max = max(num_dict.values())
#print(n_min)
#print(n_max)
cmap = plt.cm.rainbow
norm = matplotlib.colors.Normalize(vmin=n_min, vmax=n_max)
def color_scale(r):
tmp = cmap(norm(r))
return (tmp[0]*255, tmp[1]*255, tmp[2]*255)
for k,v in num_dict.items():
num_dict[k] = color_scale(v)
plt.figure(figsize=(10,8))
plt.imshow(picture(num_dict))
sm = plt.cm.ScalarMappable(cmap=cmap, norm=norm)
plt.colorbar(sm)
plt.show()
Recommended Posts