æ¥æ¬äººå£ã®çŽ3人ã«1人ãé«éœ¢è ã§ããäžã¯ãŸãã«é«éœ¢åã®æä»£ã§ãããé«éœ¢è ãå®å¿ããŠæ¥œããéãããéœéåºçã¯ã©ãã§ãããããä»åã¯ãPythonã§æ¥æ¬ã®é«éœ¢è ã®å²åãå°å³ã«è²åãããŠæç»ããŠã¿ãŸãããããããããäœãããžãã£ãã«æ®ãããã³ããèŠããŠããã§ããããã
ä»å䜿ããéœéåºçïŒå¹Žéœ¢ããŒã¿ãã«ã€ããŠ
ä»å䜿ãããŒã¿ã¯ã2024幎10æã®ããŒã¿ã«åºã¥ãããéœéåºçïŒå¹Žéœ¢ããŒã¿ãã§ããç·åççµ±èšå±(ãã¡ã)ããããŒã¿ãããŠã³ããŒãããŸãããããã®ããŒãžããã¯ããããããªããŒã¿ãããŠã³ããŒãã§ããã®ã§ãããä»åã¯ãé«éœ¢è ã®ååžå³ãäœãããã®ã§ãããŒãžæ«å°Ÿã®ã第3衚ãéœéåºçã幎霢ïŒ3åºåïŒãç·å¥³å¥äººå£âç·äººå£ïŒ2024幎10æ1æ¥çŸåšïŒãã®Excelãã¡ã€ã«ãããŠã³ããŒãããŠå©çšããŠã¿ãŸãããã
ãã®ãã¡ã€ã«ãéããšãéœéåºçå¥ã«ã15ææªæºãã15ã64æ³ãã64æ³ä»¥äžãâŠã®ããã«åºåãããããŒã¿ãèšèŒãããŠããŸããæ¬¡ã®ãããªExcelã®è¡šã§ãã
Excel衚ããå¿ èŠãªããŒã¿ãæœåºããã
ãã®è¡šããéœéåºçå¥ã®ã15ææªæºãã15ã64æ³ãã64æ³ä»¥äžãããã¡75æä»¥äžãã®äººæ°ãåãåºããŠãCSVãã¡ã€ã«ã«ä¿åããŸããããå ·äœçã«ã¯ãã»ã«ã®B14ããH60ãæœåºããŠCSV圢åŒã§ä¿åããŸããããExcelã®ã»ã«ãéžæããŠã³ããŒãããšãã¯ãªããããŒãã«ã¿ãåºåãã®ããã¹ããååŸã§ããã®ã§ããããããã¹ããã¡ã€ã«ãarea_population.txtãã«ä¿åããŸãããããã®éãPythonããæ±ããããããã«ãæåãšã³ã³ãŒãã£ã³ã°ãUTF-8ã«ããŠãããŸãããã
ãããšã次ã®ããã«ãéœéåºçã³ãŒãã»éœéåºçåã»ç©ºçœã»15æ³æªæºã»15ã64æ³ã»65æ³ä»¥äžã»ãã¡75æä»¥äžã®7åã®ã¿ãåºåãããã¹ããšãªããŸãã
ãªããããã§äœæããããŒã¿ã¯ããã¡ãã®GistããããŠã³ããŒãã§ããããã«ããŸããã
ãjapanmapãã§æ¥æ¬å°å³ãè²åãããã
æ¥æ¬å°å³ãæè»œã«è²åãããã«ã¯ãPythonã®ã©ã€ãã©ãªãjapanmapãã䟿å©ã§ããéœéåºçã³ãŒããæå®ããŠãèªåçã«è²ãå¡ãåããããšãã§ããŸãã
ä»åããPythonãæè»œã«å®è¡ã§ããã¯ã©ãŠããµãŒãã¹ãGoogle Colabããã¡ããå©çšããŠãããã°ã©ã ãå®è¡ããŠã¿ãŸããããColabã¯ãGoogleã¢ã«ãŠã³ãããããã°ãæ°è»œã«Pythonãå®è¡ã§ãããµãŒãã¹ã§ããææãã©ã³ããããŸãããã¡ãã£ãšã°ã©ããæç»ããããããªããç¡æã®ç¯å²ã§ååã§ãã
æåã«ãColabã®æ°èŠããŒãããã¯ãäœæããããå¿ èŠãªã©ã€ãã©ãªãã€ã³ã¹ããŒã«ããŸãããããŸããå ã»ã©äœæããŠGistã«ã¢ããããŒãããããã¹ããã¡ã€ã«ãããŠã³ããŒãããŸãããã
Colabã®ã»ã«ã«ä»¥äžã®ã³ãŒãã貌ãä»ããŠå®è¡ããŠã¿ãŸãããã
# japanmapã®ã€ã³ã¹ããŒã«
! pip install japanmap
# éœéåºçã®å¹Žéœ¢ããŒã¿ã®ããŠã³ããŒã
! wget https://gist.githubusercontent.com/kujirahand/c59913050edc3b0bc8cd80646f18550c/raw/08700edfd99e2c1108eb0bd980669311de24ec39/area_population.txt
ãããšãColabã®ã¯ã©ãŠããã·ã³äžã«ããarea_population.txtããšããããã¹ããã¡ã€ã«ãããŠã³ããŒããããŸãããã®ãã¡ã€ã«ãPythonã®ã¡ã¢ãªã«èªã¿èŸŒãã§ã¿ãŸãããã以äžã®ããã°ã©ã ãå®è¡ãããšãããã¹ããã¡ã€ã«ãèªã¿èŸŒãã§ãããŒã¿ã倿°resultã«æ ŒçŽããŸãã
# ããŒã¿ãèªã¿åºããŠå€æ°resultã«æ ŒçŽãã
import csv
result = []
with open("area_population.txt", "r", encoding="utf-8") as f:
data = csv.reader(f, delimiter="\t")
for row in data:
no = int(row[0]) # éœéåºçã³ãŒã
name = row[1].replace("\u3000", "").strip() # éœéåºçå
u15 = int(row[3].replace(",", "")) # 15ææªæº
u64 = int(row[4].replace(",", "")) # 15ã64æ
o65 = int(row[5].replace(",", "")) # 65æä»¥äž
o75 = int(row[6].replace(",", "")) # ãã¡75æä»¥äž
print(f"{no},{name},{u15},{u64},{o65},{o75}")
result.append([no, name, u15, u64, o65, o75])
é«éœ¢è ã®å²åãèšç®ããŠå°å³ã«æç»ããŠã¿ãã
ç¶ããŠãé«éœ¢è ã®å²åãèšç®ããŠãå°å³ã«æç»ããŠã¿ãŸããããjapanmapã䜿ããšãéœéåºçã³ãŒããæå®ããŠãç°¡åã«è²åãããå°å³ãæç»ã§ããŸãã以äžã®ã³ãŒããå®è¡ããŠã¿ãŸãããã
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import cm, colors
from japanmap import picture
# {éœéåºçã³ãŒã(1-47): ææšå€} ã®èŸæžããŒã¿ãäœã
values = {}
for row in result:
code, name, u15, u64, o65, o75 = row
values[code] = o65 / (u15 + u64 + o65) # å²åãåºã --- (â»1)
def draw_map(values):
# ---- valuesãæ£èŠå ----
arr = np.array(list(values.values()), dtype=float)
vmin = np.nanmin(arr) if arr.size else 0.0
vmax = np.nanmax(arr) if arr.size else 1.0
norm = colors.Normalize(vmin=vmin, vmax=vmax)
# ---- é£ç¶ã«ã©ãŒãããã§RGB(0-255)ãž ----
cmap = plt.get_cmap("YlOrRd") # èŠåããããé»è²âèµ€
def to_rgb255(x):
r, g, b, _ = cmap(norm(x))
return (int(r*255), int(g*255), int(b*255))
# ---- éœéåºçããšã®è²èŸæžïŒæªæå®çã¯èç°ïŒ----
base_gray = (230, 230, 230)
color_map = {code: base_gray for code in range(1, 48)}
for k, val in values.items():
if val is not None and not np.isnan(val):
color_map[k] = to_rgb255(val)
# ---- å°å³ç»åã®æç» ----
img = picture(color_map)
fig, ax = plt.subplots(figsize=(6, 7))
ax.imshow(img)
ax.axis("off")
# --- ã«ã©ãŒããŒã®æç» ---
sm = cm.ScalarMappable(cmap=cmap, norm=norm)
sm.set_array([]) # ãããŒ
cbar = plt.colorbar(sm, ax=ax, fraction=0.03, pad=0.02)
plt.tight_layout()
plt.show()
draw_map(values)
ããã°ã©ã ã®ãã€ã³ãã¯ã(ïŒ1)ã®éšåã§ããããã§ãé«éœ¢è ïŒ65æä»¥äžïŒã®äººæ°ããç·äººå£ïŒ15ææªæºïŒ15ã64æïŒ65æä»¥äžïŒã§å²ã£ãŠãé«éœ¢è ã®å²åãèšç®ããŠããŸãããã®å²åããjapanmapã«æž¡ãããšã§ãéœéåºçããšã«è²åãããå°å³ãæç»ããŸãã
å®éã«å®è¡ããŠã¿ããšã次ã®ãããªæ¥æ¬å°å³ãæç»ãããŸããé«éœ¢è ã®å²åãé«ãéœéåºçãèµ€ã§ãäœãå°åãé»è²ã«å¡ãåããŸãã
念ã®ãããããã°ã©ã äžã§å²ãåºããé«éœ¢è ã®å²åã衚ã倿°valuesã®äžäœ5ä»¶ã衚瀺ãããŠã¿ãŸããã
# valuesããœãŒãããŠäžäœ10ä»¶ãã©ã³ãã³ã°åœ¢åŒã§è¡šç€º
import operator
names = {row[0]:row[1] for row in result}
sorted_values = sorted(values.items(), key=operator.itemgetter(1), reverse=True)
for i, (k, v) in enumerate(sorted_values[:5]):
print(f"{i+1:2}äœ {names[k]}\t{v}")
ãããšã次ã®ããã«è¡šç€ºãããŸããå ã»ã©æç»ããå°å³ãšäžèŽããããšãåãããŸãã
1äœ ç§ç°ç 0.3950892857142857
2äœ é«ç¥ç 0.366412213740458
3äœ åŸ³å³¶ç 0.35766423357664234
4äœ éæ£®ç 0.35738831615120276
5äœ å±±åœ¢ç 0.3560830860534125
ãªããé«éœ¢è ã®ãã¡75æä»¥äžã®å²åããåæ§ã®æ¹æ³ã«èšç®ããŠã¿ããšã次ã®ãããªçµæãšãªããŸãããäžäœ2ä»¶ã¯å šãåãã§ã䌌ãé¡ã¶ãã䞊ã³ãŸããã
1äœ ç§ç°ç 0.22098214285714285
2äœ é«ç¥ç 0.216793893129771
3äœ å±±å£ç 0.20843091334894615
4äœ å³¶æ ¹ç 0.20404984423676012
5äœ åŸ³å³¶ç 0.20145985401459854
é«éœ¢è ã®å²åãé«ãå°åã®ç¹åŸŽã¯ïŒ
ããããŠå°å³ããã¹ã5ã®ã©ã³ãã³ã°ãèŠããšããããããè¥å¹Žå±€ã®éœåžéšæµåºãé²ãã§ããéœéåºçãäžäœã«æ¥ãŠããããšãåãããŸãã
ãããããããã®å°åã«ã€ããŠãæ¹ããŠèª¿ã¹ãŠã¿ããšããã€ãã¹èŠçŽ ã°ããã§ã¯ãªãããã§ããäŸãã°ãé«ç¥çã¯ã人å£åœããã®ç é¢ç åºæ°ãå€ããšã®ããšã§ããåçåŽåçãå ¬éããŠããå»çæœèšïŒéæ ã»åæ ïŒèª¿æ»ã»ç é¢å ±å(ãã¡ã)ãèŠããšãé«ç¥çãæãå€ããç§ç°ã»åŸ³å³¶ã»é森ã»å±±åœ¢ã¯ãå šåœå¹³åãäžåã£ãŠããŸãããã®ãããé«éœ¢è ã«ãšã£ãŠå®å¿ããŠäœããå°åãšãèšããŸãã
ãŸããç°èæ®ãããç¹éããå®å³¶ç€Ÿã®ã¢ã³ã±ãŒãã§ã¯ãç§ç°åžããã·ãã¢äžä»£ãäœã¿ãããŸã¡ããšããŠã1äœã«éžã°ããããšããããŸã(ææ¥æ°èã®èšäº)ãèªç¶ãè±ãã§é«éœ¢è ã«å¯Ÿããè¡æ¿ãµãŒãã¹ãè¡ãå±ããŠããããšãªã©ãçç±ãšããããšã§ãã
ããããç¹ãèãããšãé«éœ¢è ã®å²åãå€ãå°åã¯ãé«éœ¢è ã®ããã®æœèšãå å®ããåŸåããããäœã¿ãããå°åã«ãªã£ãŠãããšããããšãåãããŸããã
ãŸãšã
以äžãä»åã¯ãPythonã§é«éœ¢è ã®å²åãå€ãéœéåºçããããäœæããŠã¿ãŸãããçµæãå ã«ããŠããã®å°åã調ã¹ãŠèŠããšãåã«é«éœ¢è ãå€ãã ãã§ãªããé«éœ¢è ã®ããã®æœèšã楜ãã¿ãå€ãå°åã§ããããšãèŠããŠããŸããã
ä»åã¯ãæ¥æ¬å°å³ã«å¯ŸããŠãåã«å²åã«å¿ããè²ãå¡ã£ãã ãã§ããããå ã»ã©ç޹ä»ããåçåŽåçã®å»çæœèšããŒã¿ãªã©ãçµã¿åãããŠã¿ããšãããã«æçŸ©æ·±ãçå®ãèŠããŠãããã§ãã
æ¬çš¿ã§ç޹ä»ããããã«ãPythonãªãæ¯èŒçç°¡åã«å®çŸã§ããŸãã®ã§ããã²çãããææŠããŠã¿ãŠãã ããã
èªç±åããã°ã©ããŒããããã¯ãã©ã«ãŠãããã°ã©ãã³ã°ã®æ¥œãããäŒããæŽ»åãããŠããã代衚äœã«ãæ¥æ¬èªããã°ã©ãã³ã°èšèªããªã§ããã ãããã¹ã鳿¥œããµã¯ã©ããªã©ã2001幎ãªã³ã©ã€ã³ãœãã倧è³å ¥è³ã2004幎床æªèžãŠãŒã¹ ã¹ãŒããŒã¯ãªãšãŒã¿èªå®ã2010幎 OSSè²¢ç®è ç« åè³ããããŸã§50å以äžã®æè¡æžãå·çãããçŽè¿ã§ã¯ããå€§èŠæš¡èšèªã¢ãã«ã䜿ãããªãããã®ããã³ãããšã³ãžãã¢ãªã³ã°ã®æç§æž(ãã€ããåºç)ããPythonã§ã€ãããã¹ã¯ãããã¢ããª(ãœã·ã )ããå®è·µåã身ã«ã€ãã Pythonã®æç§æž 第2çããã·ãŽããã¯ãã©ã PythonèªååŠçã®æç§æž(ãã€ããåºç)ããªã©ã




