ã¿ãªããããã«ã¡ã¯ïŒ
ä»æ¥ã¯äœçœ®ã®èŠèŠåã«ã€ããŠã話ããŸãã 空éåç
§ãæ確ã«æã£ãŠããçµ±èšãæå
ã«æã£ãŠããã®ã§ãåžžã«çŸããå°å³ãäœããããšæãã§ãããã ã§ããã°ãããŒãããã¯ã®ããã²ãŒã·ã§ã³ããã³æ
å ±ãŠã£ã³ããŠã䜿çšããŠãã ããã ãããŠãã¡ãããåŸã§ã€ã³ã¿ãŒãããå
šäœã«èŠèŠåã®é²æç¶æ³ã瀺ãããšãã§ããããã«ïŒ
äŸãšããŠãã¢ã¹ã¯ã¯ã§æè¿è¡°éããŠããå°æ¹éžæãèããŠã¿ãŸãããã ããŒã¿èªäœã¯ã¢ã¹ã¯ã¯åžéžæ管çå§å¡äŒã®ãŠã§ããµã€ãããååŸã§ããŸã ãããŒã¿ã»ããã¯https://gudkov.ru/ããååŸã§ããŸã ã ããã«ã¯äœããã®èŠèŠåããããŸãããããã«æ·±ããªããŸãã ã ãããç§ãã¡ã¯äœã§çµããã¹ãã§ããïŒ
éžæå§å¡äŒã®ãµã€ãã®ããŒãµãŒãæžãã®ã«å°ãæéãè²»ãããŠãå¿
èŠãªããŒã¿ãåãåããŸããã ããã§ã¯ãã€ã³ããŒãããå§ããŸãããã
茞å
¥åimport pandas as pd import numpy as np import os import pickle
Linuxãã·ã³ã§jupyterããŒãããã¯ã䜿çšããŠããŸãã Windowsãã·ã³ã§ã³ãŒãã䜿çšããå Žåã¯ãããã¹ãã®éèŠãªéžè±ã ãã§ãªãããã¹ã®èšè¿°ã«ã泚æããŠãã ããã
éåžžããããžã§ã¯ãã«ã¯åå¥ã®ãã©ã«ããŒã䜿çšãããããç°¡åã«ããããã«çŸåšã®ãã£ã¬ã¯ããªãèšå®ããŸãã
os.chdir('/data01/jupyter/notebooks/habr/ods_votes/')
ããã«ãéžæå§å¡äŒã®ãµã€ãèªäœããããŒã¿ãåéããå¿
èŠããããŸãã ããŒã¿ã解æããããã«ãå¥ã®ããŒãµãŒãäœæããŸããã ããã»ã¹å
šäœã«ã¯10ã15åããããŸãã ãªããžããªããååŸã§ããŸã ã
ããŒã¿ãã¬ãŒã ãå
éšã«æã€å€§ããªèŸæžãäœæããããšã«ããŸããã htmlããŒãžãããŒã¿ãã¬ãŒã ã«å€æããããã«ãread_htmlã䜿çšããå¿
èŠãªããŒã¿ãã¬ãŒã ãçµéšçã«éžæãããã®åŸå°ãåŠçãè¡ããäœåãªéšåãæšãŠãŠäžè¶³åãè¿œå ããŸããã 以åã¯ãåœäºè
ã«é¢ããããŒã¿ããã§ã«åŠçããŠããŸããã æåã¯ããããã¯ç¹ã«èªã¿ããããããŸããã§ããã ããã«ãåãããŒãã£ãŒã®ç°ãªãã¹ãã«ããããŸãïŒé¢çœãã§ãããå Žåã«ãã£ãŠã¯ç°ãªãã¹ãã«ã§ã¯ãªããå®éã«ã¯ç°ãªãéšåã§ãïŒã
éžæå§å¡äŒã®ããŒã¿ã®åæ
ãã£ã¬ã¯ããªãçŽæ¥çµã¿ç«ãŠãŸãã ããã§äœãèµ·ãã£ãŠããŸããïŒ
- è¡æ¿ããã³åžåºçºæã®æ§é ãçµã¿ç«ãŠãããŠããŸãã
- å°åéžæå§å¡äŒïŒTECïŒãžã®èšåã¯ãã¹ãŠåéãããŸãã
- åTECã«ã€ããŠãåè£è
ã®ãªã¹ããåéãããŸãã
- åTECå
ã«ã¯ãå°åºéžæå§å¡äŒïŒOECïŒãéãŸããŸãã
- DECã®çµ±èšãšåè£è
ã®çµ±èšã¯ãDECããšã«åéãããŸãã
- åä¿¡ããããŒã¿ã»ããããåžåºçºæã®çµ±èšãåéããŸãã
ãã®èšäºã®ãªããžããªã«ã¯ãæ¢è£œã®ããŒã¿ãå«ãŸããŠããŸãã ãããã䜿çšããŸãã
æ祚çãæ祚æ°ïŒçºè¡ãããæ°ããç Žæããæ°ãŸã§ïŒãããŒãã£ãŒéã®åº§åžã®ååžã«é¢ããçµ±èšæ
å ±ãå«ãããŒã¿ãã¬ãŒã ãååŸããŸããã
èŠèŠåãéå§ã§ããŸãïŒ
ãžãªãã³ãã®ãžãªããŒã¿ã䜿çšããåºæ¬äœæ¥
ãžãªããŒã¿ãæäœããã«ã¯ãgeopandasã©ã€ãã©ãªã䜿çšããŸãã ãžãªãã³ããšã¯äœã§ããïŒ ããã¯ãå°ççæœè±¡åã«ãããã³ãã®æ©èœã®æ¡åŒµïŒShapelyããç¶æ¿ïŒã§ãããéžæããªãŒããŒã¬ã€ãéèšïŒPostgresqlã®PostGISãªã©ïŒã®ãžãªããŒã¿ã§å°ççæäœãåæã§ããŸãã
ãžãªã¡ããªã«ã¯3ã€ã®åºæ¬çãªã¿ã€ããããããšãæãåºãããŠãã ãã-ãã€ã³ããã©ã€ã³ïŒãŸãã¯ãæ¥ç¶ãããã»ã°ã¡ã³ãã§æ§æãããŠããããããªã©ã€ã³ïŒãããã³ããªãŽã³ã ãããã®ãã¹ãŠã«ã¯ããã«ãïŒãã«ãïŒã®ãªãã·ã§ã³ãããããžãªã¡ããªã¯ãåã
ã®å°ççãšã³ãã£ãã£ã1ã€ã«çµã¿åããããã®ã§ãã ããšãã°ãå°äžéã®åºå£ã¯ãã€ã³ããããããŸãããããé§
ãã®æ¬è³ªã«çµã¿èŸŒãŸããããã€ãã®åºå£ã¯ãã§ã«ãã«ããã€ã³ãã§ãã
éèŠãªåŸégeopandasã¯ãWindowsç°å¢ã®æšæºçãªPythonã€ã³ã¹ããŒã«ã§ã¯ãpipãä»ããŠã€ã³ã¹ããŒã«ããããšã«æ¶æ¥µçã§ããããšã«æ³šæããŠãã ããã åé¡ã¯ããã€ãã®ããã«ãäŸåé¢ä¿ã§ãã Geopandasã¯ãWindowsçšã®å
¬åŒãã«ãããªãfionaã©ã€ãã©ãªã®æœè±¡åã«äŸåããŠããŸãã ããšãã°ãDockerã³ã³ãããŒã§Linuxç°å¢ã䜿çšããããšãçæ³çã§ãã ããã«ãWindowsã§ã¯ãcondaãããŒãžã£ãŒã䜿çšããŠããªããžããªãããã¹ãŠã®äŸåé¢ä¿ããã«ã§ããŸãã
åžçºæã®ãžãªã¡ããªã§ã¯ããã¹ãŠãéåžžã«ç°¡åã§ãã ãããã¯ãOpenStreetMapïŒ è©³çŽ°ã¯ãã¡ã ïŒãŸãã¯NextGIS ã¢ããããŒããªã©ããç°¡åã«ååŸã§ããŸãã æ¢è£œã®å³åœ¢ã䜿çšããŸãã
ããã§ã¯å§ããŸãããïŒ å¿
èŠãªã€ã³ããŒããå®è¡ããmatplotlibãã£ãŒããã¢ã¯ãã£ãã«ããŸã...
import geopandas as gpd %matplotlib inline mo_gdf = gpd.read_file('atd/mo.shp') mo_gdf.head()
ã芧ã®ãšãããããã¯äœ¿ãæ
£ããDataFrameã§ãã ãžãªã¡ããªãã£ãŒã«ãã¯ãWKT圢åŒã®å°çãªããžã§ã¯ãïŒãã®å Žåã¯ããªãŽã³ïŒã®è¡šçŸã§ãããããç¥ãããŠããããã¹ãã§ãïŒè©³çŽ°ã«ã€ããŠã¯ã httpsïŒ//en.wikipedia.org/wiki/Well-known_textãåç
§ããŠãã ãã ïŒã ãªããžã§ã¯ãã®ããããç°¡åã«äœæã§ããŸãã
mo_gdf.plot()
ã¢ã¹ã¯ã¯ãæšæž¬ïŒ 確ãã«ãããŸã銎æã¿ããªãããã§ãã ãã®çç±ã¯ãå°å³ã®æ圱ã§ãã Habrã«ã¯æ¢ã«åªããæè²ããã°ã©ã ããããŸãã
ãã®ããããã䜿ãæ
£ããWebã¡ã«ã«ãã«å³æ³ã§ããŒã¿ã衚瀺ããŸãïŒcrsãã©ã¡ãŒã¿ãŒã䜿çšããŠãåæå³æ³ãç°¡åã«ååŸã§ããŸãïŒã è¡æ¿åºã®ååã§ããªãŽã³ã«è²ãä»ããŸãã ç·ã®å¹
ã0.5ã«èšå®ããŸãã cmapã®ã«ã©ãŒãªã³ã°æ¹æ³ã¯ãæšæºã®matplotlibå€ã䜿çšããŸãïŒç§ã®ããã«ãèŠããŠããªãå Žåã¯ã ããã«ããŒãã·ãŒãããããŸã ïŒã ãããã®å¡äŸã衚瀺ããã«ã¯ãå¡äŸãã©ã¡ãŒã¿ãŒãèšå®ããŸãã ããŠãfigsizeã¯ãããã®ãµã€ãºã決å®ããŸãã
mo_gdf_wm = mo_gdf.to_crs({'init' :'epsg:3857'})
èªæ²»äœã®çš®é¡ããšã«å°å³ãäœæã§ããŸãã
mo_gdf_wm.plot(column = 'TYPE_MO', linewidth=0.5, cmap='plasma', legend=True, figsize=[15,15])
ãã®ãããåžåºçºæã®çµ±èšããããäœæããŸãã å
ã«ãåè
ã®ããŒã¿ãã¬ãŒã ãäœæããŸããã
ããŒã¿ãã¬ãŒã ãšãžãªããŒã¿ãã¬ãŒã ãçµã¿åãããŠå°å³ãäœæããå¿
èŠããããŸãã å°ãã®é«ªãåžåºçºæã®ååãcombãã®ã§ãé©ãããšãªãã€ãªãããã§ããŸããã
winners['municipal_low'] = winners['okrug'].str.lower() winners['municipal_low'] = winners['municipal_low'].str.replace('', '') mo_gdf_wm['name_low'] = mo_gdf_wm['NAME'].str.lower() mo_gdf_wm['name_low'] = mo_gdf_wm['name_low'].str.replace('', '') full_gdf = winners.merge(mo_gdf_wm[['geometry', 'name_low']], left_on='municipal_low', right_on='name_low', how='left') full_gdf = gpd.GeoDataFrame(full_gdf)
åè
ã衚瀺ãããåçŽãªã«ããŽãªããããäœæããŸãã ä»å¹Žã®ã·ã¥ãããŒãå°åºã§ã¯ãå®éã«éžæã¯ãããŸããã§ããã
full_gdf.plot(column = 'top1', linewidth=0, cmap='GnBu', legend=True, figsize=[15,15])
æ祚çïŒ
full_gdf.plot(column = 'voters_percent', linewidth=0, cmap='BuPu', legend=True, figsize=[15,15])
å±
äœè
ïŒ
full_gdf.plot(column = 'voters_oa', linewidth=0, cmap='YlOrRd', legend=True, figsize=[15,15])
ãããïŒ çŽ æŽãããèŠèŠåãåŸãŸããã ããããããŒã¹ããããšããã²ãŒã·ã§ã³ã®äž¡æ¹ãå¿
èŠã§ãã cartoframesã©ã€ãã©ãªã¯ç§ãã¡ã®å©ãã«ãªããŸãã
ã«ãŒããã¬ãŒã ã䜿çšãããžãªããŒã¿ã®èŠèŠå
ãžãªããŒã¿ã®èŠèŠåã«æã䟿å©ãªããŒã«ã®1ã€ãCartoã§ãã ãã®ãµãŒãã¹ã䜿çšããããã«ãcartoframesã©ã€ãã©ãªããããŸããããã«ãããJupyterããŒãããã¯ãããµãŒãã¹ã®æ©èœãçŽæ¥æäœã§ããŸãã
éèŠãªåŸécartoframesã©ã€ãã©ãªã¯ãèšèšæ©èœã®ããã«Windowsã§æ
éã«æ±ãå¿
èŠããããŸãïŒããšãã°ãããŒã¿ã»ããã«å
¥åãããšããã©ã€ãã©ãªã¯linuxãã©ã«ãã¹ã¿ã€ã«ã䜿çšããããšããŸãããããã¯æ²ããçµæã«ã€ãªãããŸãïŒã ããªã«æåããŒã¿ã䜿çšãããšãèªåã®è¶³ãç°¡åã«æã€ããšãã§ããŸãïŒcp1251ãšã³ã³ãŒããã¯ã©ã³ãžã¢ããªãŒã«å€æã§ããŸãïŒã Dockerã³ã³ãããŸãã¯ãã«Linuxã§äœ¿çšããããšããå§ãããŸãã ã©ã€ãã©ãªã¯pipââãä»ããŠã®ã¿é
眮ãããŸãã Windowsã§ã¯ãcondaçµç±ã§geopandasãæåã«ã€ã³ã¹ããŒã«ããããšã§ïŒãŸãã¯ãã¹ãŠã®äŸåé¢ä¿ãæåã§èšå®ããããšã§ïŒãæ£åžžã«ã€ã³ã¹ããŒã«ã§ããŸãã
Cartoframesã¯WGS84æ圱ã§åäœããŸãã ããŒã¿ã»ãããåæ圱ããŸãã 2ã€ã®ããŒã¿ãã¬ãŒã ãæ¥ç¶ãããšãæ圱æ
å ±ã倱ãããå ŽåããããŸãã å床èšå®ããåæ圱ããŸãã
full_gdf.crs = ({'init' :'epsg:3857'}) full_gdf = full_gdf.to_crs({'init' :'epsg:4326'})
å¿
èŠãªã€ã³ããŒããè¡ã...
import cartoframes import json import warnings warnings.filterwarnings("ignore")
Cartoã¢ã«ãŠã³ãããããŒã¿ãè¿œå ããŸãã
USERNAME = ' Carto' APIKEY = ' API'
æåŸã«ãCartoã«æ¥ç¶ããŠããŒã¿ã»ãããå
¥åããŸãã
cc = cartoframes.CartoContext(api_key=APIKEY, base_url='https://{}.carto.com/'.format(USERNAME)) cc.write(full_gdf, encode_geom=True, table_name='mo_votes', overwrite=True)
ããŒã¿ã»ããã¯ãCartoããã¢ã³ããŒãã§ããŸãã ãã ãããããŸã§ã®ãšãããå®å
šãªãžãªããŒã¿ãã¬ãŒã ã¯ãããžã§ã¯ãå
ã«ã®ã¿ååšããŸãã 確ãã«ãgdalãšshapelyã䜿çšããŠãPostGISãžãªã¡ããªã®ãã€ããªè¡šçŸãWKTã«æ»ãããšãã§ããŸãã
ãã©ã°ã€ã³ã®æ©èœã¯åãã£ã¹ãã§ãã æ®å¿µãªãããçŸåšã®ããŒãžã§ã³ã§ã¯ãååã«stråãå²ãåœãŠãããããŒã¿ãã¬ãŒã ãããŒãã«ã«æ³šãããŠããŸãã ããã¯ãã«ãŒããæäœãããšãã«èŠããŠããå¿
èŠããããŸãã
æåŸã«å°å³ïŒ ããŒã¿ã«è²ãä»ããããŒã¹ãããã«é
眮ããŠããã²ãŒã·ã§ã³ãæå¹ã«ããŸãã ããã§æè²ãã¿ãŒã³ãèŠãããšãã§ããŸã ã
ã¯ã©ã¹åå²ã®éåžžã®äœæ¥ã§ã¯ãåãã£ã¹ãã䜿çšããŠã¯ãšãªãäœæããŸãã PostgreSQLã®æ§æ
query_layer = 'select cartodb_id, the_geom, the_geom_webmercator, voters_oa::integer, voters_percent::float, state_out::float from mo_votes'
ãããã£ãŠãæ祚çïŒ
from cartoframes import Layer, BaseMap, styling, QueryLayer l = QueryLayer(query_layer, color={'column': 'voters_percent', 'scheme': styling.darkMint(bins=7)}) map = cc.map(layers=[BaseMap(source='light', labels='front'), l], size=(990, 500), interactive=False)
äœæ°æ°
l = QueryLayer(query_layer, color={'column': 'voters_oa', 'scheme': styling.burg(bins=7)}) map = cc.map(layers=[BaseMap(source='light', labels='front'), l], size=(990, 500), interactive=False)
ãããŠãäŸãã°ãèªå®
æ祚
l = QueryLayer(query_layer, color={'column': 'state_out', 'scheme': styling.sunsetDark(bins=5)}) map = cc.map(layers=[BaseMap(source='light', labels='front'), l], size=(990, 500), interactive=False)
çŸæç¹ã§ã¯ãcartoframesã§ã¯ãæ
å ±ãŠã£ã³ããŠãããŒãããã¯ãŠã£ã³ããŠã«çŽæ¥åã蟌ã¿ãå¡äŸã衚瀺ããå°å³ãCartoã«å
¬éããããšã¯ã§ããŸããã ãã ãããããã®ãªãã·ã§ã³ã¯å®è£
äžã§ãã
Jupyter Notebookã«ã«ãŒããåã蟌ããããè€éã§éåžžã«æè»ãªæ¹æ³ãè©ŠããŠã¿ãŸããã...
Foliumã䜿çšããŠäœçœ®ãèŠèŠåãã
ãã®ãããããã²ãŒã·ã§ã³ã ãã§ãªããå°å³äžã®æ
å ±ãŠã£ã³ããŠãååŸããããšèããŠããŸãã ãŸãããµãŒããŒãŸãã¯githubã§èŠèŠåãå
¬éããæ©äŒãåŸãŸãã ãã©ãªãŠã ã¯ç§ãã¡ãå©ããŠãããŸãã
éèŠãªåŸéFoliumã©ã€ãã©ãªã¯éåžžã«ç¹æ®ãªãã®ã§ãã ããã¯ãå°å³äœæã®èŠèŠåãæ
åœããLeaflet JSã©ã€ãã©ãªã®Pythonã©ãããŒã§ãã 次ã®æäœã¯ããŸãèŠãç®ã¯ãããããŸããããå¿é
ããå¿
èŠã¯ãããŸããããã¹ãŠã説æããŸãã
import folium
Cartoã®ãããªã·ã³ãã«ãªèŠèŠåã¯ç°¡åã§ãã äœãèµ·ãã£ãŠããã®ïŒ
- éžæãã座æšã®äžå¿ã«ãããã€ã³ã¹ã¿ã³ã¹mãäœæããŸãã
- ã«ãŒãã°ã©ã ã®ã€ã³ã¹ã¿ã³ã¹ãè¿œå ïŒã³ããã¬ã¹ïŒ
ã«ãŒãã°ã©ã ã€ã³ã¹ã¿ã³ã¹ã§ã¯ãå€ãã®å±æ§ãèšå®ããŸãã - geo_data-ãžãªããŒã¿ãããŒã¿ãã¬ãŒã ã®ããŒã¿ãgeojsonã«å€æããŸãã
- name-ã¬ã€ã€ãŒã®ååãèšå®ããŸã;
- ããŒã¿-ããŒã¿èªäœãããŒã¿ãã¬ãŒã ãããéžæããŸãã
- key_on-æ¥ç¶ããããŒïŒgeojsonã§ã¯ããã¹ãŠã®å±æ§ãåå¥ã®èŠçŽ ãããããã£ã«æãç³ãŸããŠããããšã«æ³šæããŠãã ããïŒ;
- å-ã«ã©ãŒãªã³ã°ã®ããŒãšå±æ§ã
- fill_colorãfill_opacityãline_weightãline_opacity-å¡ãã€ã¶ãã«ã©ãŒã¹ã±ãŒã«ãå¡ãã€ã¶ãéæ床ãç·å¹
ãéæ床ã
- legend_name-å¡äŸã®ã¿ã€ãã«ã
- ãã€ã©ã€ã-ãªããžã§ã¯ãã®ã€ã³ã¿ã©ã¯ãã£ãæ©èœïŒãããŒæã®åŒ·èª¿è¡šç€ºãšã¯ãªãã¯æã®æ¡å€§ïŒãè¿œå ããŸãã
ã«ã©ãŒã¹ã±ãŒã«ã¯Color Brewerã©ã€ãã©ãªã«åºã¥ããŠããŸã ã ã«ãŒããæ±ãéã«äœ¿çšããããšã匷ãæšå¥šããŸãã
m = folium.Map(location=[55.764414, 37.647859]) m.choropleth( geo_data=full_gdf[['okrug', 'geometry']].to_json(), name='choropleth', data=full_gdf[['okrug', 'voters_oa']], key_on='feature.properties.okrug', columns=['okrug', 'voters_oa'], fill_color='YlGnBu', line_weight=1, fill_opacity=0.7, line_opacity=0.2, legend_name='type', highlight = True ) m
ãããã£ãŠãã€ã³ã¿ã©ã¯ãã£ããªã«ãŒãã°ã©ã ããããŸãã ããããæ
å ±ãŠã£ã³ããŠã欲ããã®ã§ãã...
ããã§ã¯ãå°ããªã©ã€ãã©ãªãããã¯ããå¿
èŠããããŸãã åTECã«ã¯åè
ãããŸãã ãããã®ããããã«ã€ããŠãåºæ¬è²ã決å®ããŸãã ãããããã¹ãŠã®å°åºã§å
ã®åå©ãæ祚ã®100ïŒ
ãæå³ããããã§ã¯ãããŸããã ååºæ¬è²ã«å¯ŸããŠã絶察ãã¯ãŒïŒ100ïŒ
ïŒãå¶åŸ¡ã¹ããŒã¯ïŒ> 50ïŒ
ïŒãããã³å調ïŒ<50ïŒ
ïŒã®3ã€ã®ã°ã©ããŒã·ã§ã³ãå®çŸ©ããŸãã è²ã決å®ããé¢æ°ãæžããŸãããïŒ
def party_color(feature): party = feature['properties']['top1'] percent = feature['properties']['top1_percent'] if party == ' ': if percent == 100: color = '#969696' elif 50 < percent < 100: color = '#bdbdbd' else: color = '#d9d9d9' elif party == '': if percent == 100: color = '#78c679' elif 50 < percent < 100: color = '#addd8e' else: color = '#d9f0a3' elif party == '': if percent == 100: color = '#ef3b2c' elif 50 < percent < 100: color = '#fb6a4a' else: color = '#fc9272' elif party == ' ': if percent == 100: color = '#2171b5' elif 50 < percent < 100: color = '#4292c6' else: color = '#6baed6' elif party == '': if percent == 100: color = '#ec7014' elif 50 < percent < 100: color = '#fe9929' else: color = '#fec44f' return {"fillColor":color, "fillOpacity":0.8,"opacity":0}
次ã«ãæ
å ±ãŠã£ã³ããŠã®htmlçæé¢æ°ãäœæããŸãã
def popup_html(feature): html = '<h5> {}</h5>'.format(feature['properties']['okrug']) for p in ['top1', 'top2', 'top3']: if feature['properties'][p + '_elected'] > 0: html += '<br><b>{}</b>: {} '.format(feature['properties'][p], feature['properties'][p + '_elected']) return html
æåŸã«ãããŒã¿ãã¬ãŒã ã®åãªããžã§ã¯ããgeojsonã«å€æããŠãããã«è¿œå ããåã¹ã¿ã€ã«ããããŒåäœãããã³æ
å ±ãŠã£ã³ããŠã«ã¢ã¿ããããŸã
m = folium.Map(location=[55.764414, 37.647859], zoom_start=9) for mo in json.loads(full_gdf.to_json())['features']: gj = folium.GeoJson(data=mo, style_function = party_color, control=False, highlight_function=lambda x:{"fillOpacity":1, "opacity":1}, smooth_factor=0) folium.Popup(popup_html(mo)).add_to(gj) gj.add_to(m) m
æåŸã«ãããããä¿åããŸãã ããšãã°ã Githubã§å
¬éã§ããŸãã
m.save('tmp/map.html')
ãããã«
ã·ã³ãã«ãªãã±ãŒã·ã§ã³å¯èŠåããŒã«ã䜿çšãããšãæŽå¯ã®ç¡éã®ç¯å²ãèŠã€ããããšãã§ããŸãã ãããŠãããŒã¿ãšèŠèŠåã«é¢ããå°ãã®äœæ¥ã§ãæŽå¯ãCartoãŸãã¯githubã§æ£åžžã«å
¬éã§ããŸãã ãã®èšäºã®ãªããžã㪠ã
ããã§ãšãããããŸããããªãã¯ä»ãæ¿æ²»åŠè
ã§ãïŒ
éžæçµæãåæããããšãåŠã³ãŸããã ã³ã¡ã³ãã§æŽå¯ãå
±æããŠãã ããïŒ