前回:https://shikuuk.blogspot.com/2025/05/pythongisfoliumfolium-in-python_27.html
ChoroplethMapに苦戦しましたが、何とか関東およびその近辺の都道府県のDataについてMapをDrawすることができました。こうなるともう一度全国版にChallageしたいというのが人情だと思います。
そこで、Gemini先生にGeoJSON形式でMultiPolygonを扱うことができるのかを、改めて質問しました。回答は以下の通りです。
はい、GeoJSON形式はMultiPolygonを扱うことができます。
GeoJSON仕様では、MultiPolygon
は複数の Polygon
オブジェクトの集合を表すジオメトリタイプとして明確に定義されています。
以下に MultiPolygon
のGeoJSON形式の例を示します。
{
"type": "MultiPolygon",
"coordinates": [
[
[
[102.0, 2.0], [103.0, 2.0], [103.0, 3.0], [102.0, 3.0], [102.0, 2.0]
]
],
[
[
[100.0, 0.0], [101.0, 0.0], [101.0, 1.0], [100.0, 1.0], [100.0, 0.0]
],
[
[100.2, 0.2], [100.8, 0.2], [100.8, 0.8], [100.2, 0.8], [100.2, 0.2]
]
]
]
}
この例では、coordinates
プロパティは複数のPolygonの配列となっており、それぞれのPolygonはさらに外部リングと内部リング(穴)の配列として表現されています。
GeoJson形式でMultiPolygonをCan't UseなのでErrorがOccurしているのかとSeemしていましたが、どうも原因がことなるようです。ですので、これまでMake&UseしてきたCodeも含めて、AllJapanVersionのPopulation of Each PrefectureのThe Rate of Total PopulationをDrawするコードをCreatします。
>Code< まずは国土数値情報の行政区域から自治体境界情報をGetします。
>Output<
N03_001 | N03_002 | N03_003 | N03_004 | N03_005 | N03_007 | geometry | |
---|---|---|---|---|---|---|---|
0 | 北海道 | 石狩振興局 | None | 札幌市 | 中央区 | 01101 | POLYGON ((141.25694 42.99782, 141.2563 42.9978... |
1 | 北海道 | 石狩振興局 | None | 札幌市 | 北区 | 01102 | POLYGON ((141.33325 43.07505, 141.3326 43.0757... |
2 | 北海道 | 石狩振興局 | None | 札幌市 | 東区 | 01103 | POLYGON ((141.37341 43.0684, 141.37333 43.0684... |
3 | 北海道 | 石狩振興局 | None | 札幌市 | 白石区 | 01104 | POLYGON ((141.38202 43.04832, 141.38193 43.048... |
4 | 北海道 | 石狩振興局 | None | 札幌市 | 豊平区 | 01105 | POLYGON ((141.36371 42.94154, 141.36378 42.941... |
... | ... | ... | ... | ... | ... | ... | ... |
124128 | 沖縄県 | None | 八重山郡 | 与那国町 | None | 47382 | POLYGON ((122.93299 24.4517, 122.93299 24.4517... |
124129 | 沖縄県 | None | 八重山郡 | 与那国町 | None | 47382 | POLYGON ((122.93396 24.4482, 122.93396 24.4482... |
124130 | 沖縄県 | None | 八重山郡 | 与那国町 | None | 47382 | POLYGON ((122.94213 24.44395, 122.94214 24.443... |
124131 | 沖縄県 | None | 八重山郡 | 与那国町 | None | 47382 | POLYGON ((122.99876 24.43985, 122.99875 24.439... |
124132 | 沖縄県 | None | 八重山郡 | 与那国町 | None | 47382 | POLYGON ((122.93308 24.45176, 122.93308 24.451... |
124133 rows × 7 columns
>Code< EPSGコードを確認します。
>Output< EPSGコードを4326にTranslationするRequirementがあるようです。
EPSG:6668
>Code< JapaneseGov.GeneralAffairsのe-Statから都道府県別の人口比率のデータをGet
>Output< 全部記載すると長いので、先頭あたりだけ掲載します。
{'GET_STATS_DATA': {'RESULT': {'STATUS': 0, 'ERROR_MSG': '正常に終了しました。', 'DATE': '2025-05-29T05:40:43.625+09:00'}, 'PARAMETER': {'LANG': 'J', 'STATS_DATA_ID': '0003448233', 'NARROWING_COND': {'CODE_TIME_SELECT': 2021000000}, 'DATA_FORMAT': 'J', 'START_POSITION': 1, 'METAGET_FLG': 'Y'}, 'STATISTICAL_DATA': {'RESULT_INF': {'TOTAL_NUMBER': 48, 'FROM_NUMBER': 1, 'TO_NUMBER': 48}, 'TABLE_INF': {'@id': '0003448233', 'STAT_NAME': {'@code': '00200524', '$': '人口推計'}, 'GOV_ORG': {'@code': '00200', '$': '総務省'}, 'STATISTICS_NAME': '人口推計 各年10月1日現在人口 令和2年国勢調査基準 統計表', 'TITLE': {'@no': '006', '$': '都道府県別人口の割合-総人口'}, 'CYCLE': '年次', 'SURVEY_DATE': 0, 'OPEN_DATE': '2025-04-14', 'SMALL_AREA': 0, 'COLLECT_AREA': '該当なし', 'MAIN_CATEGORY': {'@code': '02', '$': '人口・世帯'}, 'SUB_CATEGORY': {'@code': '01', '$': '人口'}, 'OVERALL_TOTAL_NUMBER': 336, 'UPDATED_DATE': '2025-04-14', 'STATISTICS_NAME_SPEC': {'TABULATION_CATEGORY': '人口推計', 'TABULATION_SUB_CATEGORY1': '各年10月1日現在人口', 'TABULATION_SUB_CATEGORY2': '令和2年国勢調査基準', 'TABULATION_SUB_CATEGORY3': '統計表'}, 'DESCRIPTION': '', 'TITLE_SPEC': {'TABLE_NAME': '都道府県別人口の割合-総人口'}}, 'CLASS_INF': {'CLASS_OBJ': [{'@id': 'tab', '@name': '表章項目', 'CLASS': {'@code': '003', '@name': '人口割合', '@level': '', '@unit': '%'}}, {'@id': 'area', '@name': '全国・都道府県', 'CLASS': [{'@code': '00000', '@name': '全国', '@level': '1'}, {'@code': '01000', '@name': '北海道', '@level': '2'}, {'@code': '02000', '@name': '青森県', '@level': '2'}, {'@code': '03000', '@name': '岩手県', '@level': '2'}, {'@code': '04000', '@name': '宮城県', '@level': '2'}, {'@code': '05000', '@name': '秋田県', '@level': '2'}, {'@code': '06000', '@name': '山形県', '@level': '2'}, {'@code': '07000', '@name': '福島県', '@level': '2'}, {'@code': '08000', '@name': '茨城県', '@level': '2'}, {'@code': '09000', '@name': '栃木県', '@level': '2'}, {'@code': '10000', '@name': '群馬県', '@level': '2'}, {'@code': '11000', '@name': '埼玉県', '@level': '2'}, {'@code': '12000', '@name': '千葉県', '@level': '2'}, {'@code': '13000', '@name': '東京都', '@level': '2'}, {'@code': '14000', '@name': '神奈川県', '@level': '2'}, {'@code': '15000', '@name': '新潟県', '@level': '2'}, {'@code': '16000', '@name': '富山県', '@level': '2'}, {'@code': '17000', '@name': '石川県', '@level': '2'}, {'@code': '18000', '@name': '福井県', '@level': '2'}, {'@code': '19000', '@name': '山梨県', '@level': '2'}, {'@code': '20000', '@name': '長野県', '@level': '2'}, {'@code': '21000', '@name': '岐阜県', '@level': '2'}, {'@code': '22000', '@name': '静岡県', '@level': '2'}, {'@code': '23000', '@name': '愛知県', '@level': '2'}, {'@code': '24000', '@name': '三重県', '@level': '2'}, {'@code': '25000', '@name': '滋賀県', '@level': '2'}, {'@code': '26000', '@name': '京都府', '@level': '2'}, {'@code': '27000', '@name': '大阪府', '@level': '2'}, {'@code': '28000', '@name': '兵庫県', '@level': '2'}, {'@code': '29000', '@name': '奈良県', '@level': '2'}, {'@code': '30000', '@name': '和歌山県', '@level': '2'}, {'@code': '31000', '@name': '鳥取県', '@level': '2'}, {'@code': '32000', '@name': '島根県', '@level': '2'}, {'@code': '33000', '@name': '岡山県', '@level': '2'}, {'@code': '34000', '@name': '広島県', '@level': '2'}, {'@code': '35000', '@name': '山口県', '@level': '2'}, {'@code': '36000', '@name': '徳島県', '@level': '2'}, {'@code': '37000', '@name': '香川県', '@level': '2'}, {'@code': '38000', '@name': '愛媛県', '@level': '2'}, {'@code': '39000', '@name': '高知県', '@level': '2'}, {'@code': '40000', '@name': '福岡県', '@level': '2'}, {'@code': '41000', '@name': '佐賀県', '@level': '2'}, {'@code': '42000', '@name': '長崎県', '@level': '2'}, {'@code': '43000', '@name': '熊本県', '@level': '2'}, {'@code': '44000', '@name': '大分県', '@level': '2'}, {'@code': '45000', '@name': '宮崎県', '@level': '2'}, {'@code': '46000', '@name': '鹿児島県', '@level': '2'}, {'@code': '47000', '@name': '沖縄県', '@level': '2'}]}, {'@id': 'time', '@name': '時間軸(年)', 'CLASS': {'@code': '2021000000', '@name': '2021年', '@level': '1'}}]}, 'DATA_INF': {'NOTE': [{'@char': '***', '$': '該当数値がないもの'}, {'@char': '-', '$': '該当数値がないもの\u3000'}], 'VALUE': [{'@tab': '003', '@area': '00000', '@time': '2021000000', '@unit': '%', '$': '100.00'}, {'@tab': '003', '@area': '01000', '@time': '2021000000', '@unit': '%', '$': '4.13'}, {'@tab': '003', '@area': '02000', '@time': '2021000000', '@unit': '%', '$': '0.97'},
>Code< Jsonの辞書DataのKeyをわかりやすい名称にしたうえで、PandasDataFrameにTranslateします。
>Output<
タブ | 都道府県コード | 調査年 | 単位 | 人口比(対全国人口) | |
---|---|---|---|---|---|
0 | 003 | 00000 | 2021000000 | % | 100.00 |
1 | 003 | 01000 | 2021000000 | % | 4.13 |
2 | 003 | 02000 | 2021000000 | % | 0.97 |
3 | 003 | 03000 | 2021000000 | % | 0.95 |
4 | 003 | 04000 | 2021000000 | % | 1.82 |
>Code< 都道府県コードを都道府県名に紐づけて、GeoPandasDataFrameの列名に合わせて'N03_001'とします。
>Output<
タブ | 都道府県コード | 調査年 | 単位 | 人口比(対全国人口) | N03_001 | |
---|---|---|---|---|---|---|
0 | 003 | 00000 | 2021000000 | % | 100.00 | 全国 |
1 | 003 | 01000 | 2021000000 | % | 4.13 | 北海道 |
2 | 003 | 02000 | 2021000000 | % | 0.97 | 青森県 |
3 | 003 | 03000 | 2021000000 | % | 0.95 | 岩手県 |
4 | 003 | 04000 | 2021000000 | % | 1.82 | 宮城県 |
>Code< 人口比の値のTypeをConfirmします。
>Output< 'object'なので、数値型(int of float)にNeedToTranlateです。
object
>Code< 人口比の数値をFloat型にTranslateします。
>Output<
>Code< gdfのEPSGを4326にTranlateしたうえで、都道府県名'N03_001'に基づき市町村の境界Dataを都道府県別にして結合(disolve)し、gdf_prefに格納
>Output<
N03_001 | geometry | N03_002 | N03_003 | N03_004 | N03_005 | N03_007 | |
---|---|---|---|---|---|---|---|
0 | 三重県 | MULTIPOLYGON (((136.02156 33.7343, 136.02154 3... | None | 桑名郡 | 津市 | None | 24201 |
1 | 京都府 | MULTIPOLYGON (((134.89358 35.64858, 134.89358 ... | None | 乙訓郡 | 京都市 | 北区 | 26101 |
2 | 佐賀県 | MULTIPOLYGON (((129.78926 33.44452, 129.7893 3... | None | 神埼郡 | 佐賀市 | None | 41201 |
3 | 兵庫県 | MULTIPOLYGON (((134.38287 34.71978, 134.38288 ... | None | 川辺郡 | 神戸市 | 東灘区 | 28101 |
4 | 北海道 | MULTIPOLYGON (((139.34092 41.49493, 139.34094 ... | 石狩振興局 | 石狩郡 | 札幌市 | 中央区 | 01101 |
>Code< さきほど作成したgdf_prefをGeoJson形式にTranslateして、FoliumでChoroplethMapをDraw
>Output<
前回:https://shikuuk.blogspot.com/2025/05/pythongisfoliumfolium-in-python_27.html
次回:https://shikuuk.blogspot.com/2025/05/foliumfoliumhpuser-guide-url.html
コメント
コメントを投稿