import%20marimo%0A%0A__generated_with%20%3D%20%220.23.16%22%0Aapp%20%3D%20marimo.App(width%3D%22full%22)%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20import%20os%0A%20%20%20%20from%20pathlib%20import%20Path%0A%0A%20%20%20%20import%20folium%0A%20%20%20%20import%20geopandas%20as%20gpd%0A%20%20%20%20import%20marimo%20as%20mo%0A%20%20%20%20import%20matplotlib.pyplot%20as%20plt%0A%20%20%20%20import%20requests%0A%0A%20%20%20%20import%20marimo_sandbox.jp_font%20as%20jp%0A%20%20%20%20from%20marimo_sandbox.data%20import%20load_population_japan%0A%0A%20%20%20%20jp.setup_japanese_font()%0A%20%20%20%20return%20Path%2C%20folium%2C%20gpd%2C%20load_population_japan%2C%20mo%2C%20os%2C%20plt%2C%20requests%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%20%E5%9C%B0%E5%9B%B3%E3%83%80%E3%83%83%E3%82%B7%E3%83%A5%E3%83%9C%E3%83%BC%E3%83%89%20(geopandas%20%2B%20folium)%0A%0A%20%20%20%20-%20%E6%97%A5%E6%9C%AC%E3%81%AE%E9%83%BD%E9%81%93%E5%BA%9C%E7%9C%8C%E5%A2%83%E7%95%8C(GeoJSON)%E3%82%92%E5%8F%96%E5%BE%97%E3%81%97%E3%81%A6%E5%9C%B0%E5%9B%B3%E4%B8%8A%E3%81%AB%E8%A1%A8%E7%A4%BA%0A%20%20%20%20-%20%E9%83%BD%E9%81%93%E5%BA%9C%E7%9C%8C%E5%88%A5%E3%81%AE%E6%A6%82%E7%AE%97%E4%BA%BA%E5%8F%A3(%E3%82%B5%E3%83%B3%E3%83%97%E3%83%AB%E3%83%87%E3%83%BC%E3%82%BF)%E3%82%92%E3%82%B3%E3%83%AD%E3%83%97%E3%83%AC%E3%82%B9%E3%83%9E%E3%83%83%E3%83%97%E3%81%A7%E5%8F%AF%E8%A6%96%E5%8C%96%0A%20%20%20%20-%20GeoJSON%20%E3%81%8C%E5%8F%96%E5%BE%97%E3%81%A7%E3%81%8D%E3%81%AA%E3%81%84%E5%A0%B4%E5%90%88%E3%81%AF%E4%B8%BB%E8%A6%81%E9%83%BD%E5%B8%82%E3%83%9E%E3%83%BC%E3%82%AB%E3%83%BC%E3%81%AB%E3%83%95%E3%82%A9%E3%83%BC%E3%83%AB%E3%83%90%E3%83%83%E3%82%AF%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%201.%20%E3%83%87%E3%83%BC%E3%82%BF%E3%81%AE%E6%BA%96%E5%82%99%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(Path%2C%20os%2C%20requests)%3A%0A%20%20%20%20GEOJSON_URL%20%3D%20%22https%3A%2F%2Fraw.githubusercontent.com%2Fdataofjapan%2Fland%2Fmaster%2Fjapan.geojson%22%0A%20%20%20%20cache_dir%20%3D%20Path(os.path.expanduser(%22~%2F.cache%2Fmarimo-sandbox%22))%0A%20%20%20%20cache_dir.mkdir(parents%3DTrue%2C%20exist_ok%3DTrue)%0A%20%20%20%20geojson_path%20%3D%20cache_dir%20%2F%20%22japan.geojson%22%0A%0A%20%20%20%20if%20not%20geojson_path.exists()%3A%0A%20%20%20%20%20%20%20%20response%20%3D%20requests.get(GEOJSON_URL%2C%20timeout%3D30)%0A%20%20%20%20%20%20%20%20response.raise_for_status()%0A%20%20%20%20%20%20%20%20geojson_path.write_bytes(response.content)%0A%20%20%20%20return%20(geojson_path%2C)%0A%0A%0A%40app.cell%0Adef%20_(geojson_path%2C%20gpd)%3A%0A%20%20%20%20japan%20%3D%20gpd.read_file(geojson_path)%0A%20%20%20%20return%20(japan%2C)%0A%0A%0A%40app.cell%0Adef%20_(load_population_japan)%3A%0A%20%20%20%20population%20%3D%20load_population_japan()%0A%20%20%20%20return%20(population%2C)%0A%0A%0A%40app.cell%0Adef%20_(japan%2C%20population)%3A%0A%20%20%20%20merged%20%3D%20japan.merge(population%2C%20on%3D%22nam%22%2C%20how%3D%22left%22)%0A%20%20%20%20missing%20%3D%20merged%5Bmerged%5B%22population%22%5D.isna()%5D%5B%22nam%22%5D.tolist()%0A%20%20%20%20return%20merged%2C%20missing%0A%0A%0A%40app.cell%0Adef%20_(merged%2C%20missing%2C%20mo)%3A%0A%20%20%20%20mo.md(%0A%20%20%20%20%20%20%20%20f%22%22%22%23%23%23%20%E9%83%BD%E9%81%93%E5%BA%9C%E7%9C%8C%E6%95%B0%3A%20%7Blen(merged)%7D%20%E4%BB%B6%20(%E3%83%87%E3%83%BC%E3%82%BF%E5%8F%96%E5%BE%97%20OK)%0A%20%20%20%20%E4%BA%BA%E5%8F%A3%E3%83%87%E3%83%BC%E3%82%BF%E3%81%8C%E7%84%A1%E3%81%84%E7%9C%8C%3A%20%7Bmissing%20or%20'%E3%81%AA%E3%81%97'%7D%0A%20%20%20%20%22%22%22%0A%20%20%20%20)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%202.%20folium%20%E3%82%B3%E3%83%AD%E3%83%97%E3%83%AC%E3%82%B9%E3%83%9E%E3%83%83%E3%83%97%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(folium%2C%20merged)%3A%0A%20%20%20%20map_center%20%3D%20%5B36.5%2C%20138.5%5D%0A%20%20%20%20m%20%3D%20folium.Map(location%3Dmap_center%2C%20zoom_start%3D6%2C%20tiles%3D%22OpenStreetMap%22)%0A%0A%20%20%20%20folium.Choropleth(%0A%20%20%20%20%20%20%20%20geo_data%3Dmerged%2C%0A%20%20%20%20%20%20%20%20name%3D%22%E4%BA%BA%E5%8F%A3(%E6%A6%82%E7%AE%97)%22%2C%0A%20%20%20%20%20%20%20%20data%3Dmerged%2C%0A%20%20%20%20%20%20%20%20columns%3D%5B%22nam%22%2C%20%22population%22%5D%2C%0A%20%20%20%20%20%20%20%20key_on%3D%22feature.properties.nam%22%2C%0A%20%20%20%20%20%20%20%20fill_color%3D%22YlOrRd%22%2C%0A%20%20%20%20%20%20%20%20fill_opacity%3D0.7%2C%0A%20%20%20%20%20%20%20%20line_opacity%3D0.2%2C%0A%20%20%20%20%20%20%20%20legend_name%3D%22%E4%BA%BA%E5%8F%A3(%E6%A6%82%E7%AE%97)%22%2C%0A%20%20%20%20).add_to(m)%0A%0A%20%20%20%20folium.LayerControl().add_to(m)%0A%20%20%20%20m%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%203.%20%E9%83%BD%E5%B8%82%E3%83%9E%E3%83%BC%E3%82%AB%E3%83%BC%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(folium)%3A%0A%20%20%20%20cities%20%3D%20%5B%0A%20%20%20%20%20%20%20%20(%22%E6%9D%B1%E4%BA%AC%22%2C%2035.6762%2C%20139.6503%2C%20%22%E9%A6%96%E9%83%BD%22)%2C%0A%20%20%20%20%20%20%20%20(%22%E5%A4%A7%E9%98%AA%22%2C%2034.6937%2C%20135.5023%2C%20%22%E7%B5%8C%E6%B8%88%E9%83%BD%E5%B8%82%22)%2C%0A%20%20%20%20%20%20%20%20(%22%E5%90%8D%E5%8F%A4%E5%B1%8B%22%2C%2035.1815%2C%20136.9066%2C%20%22%E4%B8%AD%E4%BA%AC%E5%9C%8F%22)%2C%0A%20%20%20%20%20%20%20%20(%22%E6%9C%AD%E5%B9%8C%22%2C%2043.0618%2C%20141.3545%2C%20%22%E5%8C%97%E6%B5%B7%E9%81%93%22)%2C%0A%20%20%20%20%20%20%20%20(%22%E7%A6%8F%E5%B2%A1%22%2C%2033.5902%2C%20130.4017%2C%20%22%E4%B9%9D%E5%B7%9E%22)%2C%0A%20%20%20%20%20%20%20%20(%22%E4%BB%99%E5%8F%B0%22%2C%2038.2682%2C%20140.8694%2C%20%22%E6%9D%B1%E5%8C%97%22)%2C%0A%20%20%20%20%5D%0A%20%20%20%20city_map%20%3D%20folium.Map(location%3D%5B36.5%2C%20138.5%5D%2C%20zoom_start%3D5%2C%20tiles%3D%22OpenStreetMap%22)%0A%20%20%20%20for%20name%2C%20lat%2C%20lon%2C%20note%20in%20cities%3A%0A%20%20%20%20%20%20%20%20folium.Marker(%0A%20%20%20%20%20%20%20%20%20%20%20%20location%3D%5Blat%2C%20lon%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20popup%3Df%22%7Bname%7D%20(%7Bnote%7D)%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20tooltip%3Dname%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20icon%3Dfolium.Icon(color%3D%22blue%22%2C%20icon%3D%22info-sign%22)%2C%0A%20%20%20%20%20%20%20%20).add_to(city_map)%0A%20%20%20%20city_map%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%204.%20geopandas%20%E3%81%AB%E3%82%88%E3%82%8B%E8%A7%A3%E6%9E%90%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(japan)%3A%0A%20%20%20%20areas%20%3D%20japan.copy()%0A%20%20%20%20areas%5B%22area_km2%22%5D%20%3D%20areas.geometry.area%20%2F%201_000_000%0A%20%20%20%20largest%20%3D%20areas.sort_values(%22area_km2%22%2C%20ascending%3DFalse).head(5)%5B%0A%20%20%20%20%20%20%20%20%5B%22nam%22%2C%20%22area_km2%22%5D%0A%20%20%20%20%5D%0A%20%20%20%20return%20(largest%2C)%0A%0A%0A%40app.cell%0Adef%20_(largest%2C%20mo)%3A%0A%20%20%20%20mo.ui.table(largest.reset_index(drop%3DTrue))%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(japan%2C%20mo%2C%20plt)%3A%0A%20%20%20%20fig%2C%20ax%20%3D%20plt.subplots(figsize%3D(8%2C%209))%0A%20%20%20%20japan.plot(ax%3Dax%2C%20color%3D%22lightblue%22%2C%20edgecolor%3D%22black%22%2C%20linewidth%3D0.3)%0A%20%20%20%20ax.set_title(%22%E6%97%A5%E6%9C%AC%E3%81%AE%E9%83%BD%E9%81%93%E5%BA%9C%E7%9C%8C%E5%A2%83%E7%95%8C%22)%0A%20%20%20%20ax.set_axis_off()%0A%20%20%20%20mo.mpl.interactive(fig)%0A%20%20%20%20return%0A%0A%0Aif%20__name__%20%3D%3D%20%22__main__%22%3A%0A%20%20%20%20app.run()%0A
589b72c445d42a190d573fcbb8a667c7