【Pandas】geopandasで世界地図(+特定の地域の地図)を表示する方法[Python]

  • URLをコピーしました!
目次

Geopandas

前回、日本地図を表示するライブラリjapanmapを紹介しました。

今回はさらに世界地図や特定の地域の地図を表示することができるgeopandasというライブラリをいじってみます。

前回のjapanmapはmatplotlibを使って日本地図を表示していましたが、今回のgeopandasはその名が示す通りPandasの拡張ライブラリのようです。

それでは始めていきましょう。

geopandasのインストール

geopandasのインストールはいつも通りpipでできます。

pip install geopandas

世界地図を表示

geopandasのライブラリには最初から3つのサンプルデータが入っています。

一つ目が「naturalearth_lowres」、二つ目が「raturalearth_cities」、三つ目が「nybb」です。

そして「naturalearth_lowres」には世界の国の形のデータ、人口、存在する大陸名、3文字表記などの情報が含まれています。

データを読み込むには、geopandasをインポートして、「geopandas.datasets.get_path(“サンプルデータ名”)」、そして「geopandas.read_file(データ)」とします。

import geopandas

world = geopandas.datasets.get_path("naturalearth_lowres")  
data = geopandas.read_file(world)

print(data)

実行結果
         pop_est      continent                      name iso_a3  gdp_md_est   
0       889953.0        Oceania                      Fiji    FJI        5496  \
1     58005463.0         Africa                  Tanzania    TZA       63177   
2       603253.0         Africa                 W. Sahara    ESH         907   
3     37589262.0  North America                    Canada    CAN     1736425   
4    328239523.0  North America  United States of America    USA    21433226   
..           ...            ...                       ...    ...         ...   
172    6944975.0         Europe                    Serbia    SRB       51475   
173     622137.0         Europe                Montenegro    MNE        5542   
174    1794248.0         Europe                    Kosovo    -99        7926   
175    1394973.0  North America       Trinidad and Tobago    TTO       24269   
176   11062113.0         Africa                  S. Sudan    SSD       11998   

                                              geometry  
0    MULTIPOLYGON (((180.00000 -16.06713, 180.00000...  
1    POLYGON ((33.90371 -0.95000, 34.07262 -1.05982...  
2    POLYGON ((-8.66559 27.65643, -8.66512 27.58948...  
3    MULTIPOLYGON (((-122.84000 49.00000, -122.9742...  
4    MULTIPOLYGON (((-122.84000 49.00000, -120.0000...  
..                                                 ...  
172  POLYGON ((18.82982 45.90887, 18.82984 45.90888...  
173  POLYGON ((20.07070 42.58863, 19.80161 42.50009...  
174  POLYGON ((20.59025 41.85541, 20.52295 42.21787...  
175  POLYGON ((-61.68000 10.76000, -61.10500 10.890...  
176  POLYGON ((30.83385 3.50917, 29.95350 4.17370, ...  

[177 rows x 6 columns]

2023年6月現在の国連加盟国は193カ国なのに対し、177カ国しかないことに注意してください。

このデータから世界地図を表示するには読み込んだデータに「.plot()」とします。

import geopandas

world = geopandas.datasets.get_path("naturalearth_lowres")  
data = geopandas.read_file(world)

data.plot()

実行結果

ちなみに「raturalearth_cities」には世界の都市に関する位置情報が含まれています。

import geopandas

cities = geopandas.datasets.get_path("naturalearth_cities")  
data = geopandas.read_file(cities)

print(data)

実行結果
               name                     geometry
0      Vatican City    POINT (12.45339 41.90328)
1        San Marino    POINT (12.44177 43.93610)
2             Vaduz     POINT (9.51667 47.13372)
3           Lobamba   POINT (31.20000 -26.46667)
4        Luxembourg     POINT (6.13000 49.61166)
..              ...                          ...
238  Rio de Janeiro  POINT (-43.21212 -22.90731)
239       São Paulo  POINT (-46.62697 -23.55673)
240          Sydney  POINT (151.21255 -33.87137)
241       Singapore    POINT (103.85387 1.29498)
242       Hong Kong   POINT (114.18306 22.30693)

[243 rows x 2 columns]

こちらも243都市しかないので、あくまでも一部ということです。

ちなみに先ほどの世界地図上に都市をプロットするにはそれぞれのデータを読み込んで、「都市データ.plot(ax=地図データ)」とします。

またこの際、「color」のオプションでマーカーの色を、「markersize」でマーカーのサイズを変えることができます。

import geopandas

world = geopandas.datasets.get_path("naturalearth_lowres")  
world_data = geopandas.read_file(world)
cities = geopandas.datasets.get_path("naturalearth_cities")  
cities_data = geopandas.read_file(cities)

data = world_data.plot()
cities_data.plot(ax=data, color="Red", markersize=2)

実行結果

ちなみに「nybb」はニューヨークのデータらしいので割愛します。

地図に色を塗る方法

geopandasで地図に色を塗る場合、地域を指定して色を塗るというのではなく、ある列のデータを使って色を塗り分けるという形になります。

「naturalearth_lowres」のデータには「pop_est」という列があり、これは人工を示しているので、こちらの列のデータを使って世界地図を塗り分けてみましょう。

「.plot()」のオプションに「column=”カラム名”」、「cmap=”カラーマップ名”」を追加します。

import geopandas

world = geopandas.datasets.get_path("naturalearth_lowres")  
data = geopandas.read_file(world)

data.plot(column="pop_est", cmap="jet")

実行結果

特定の地域の地図を表示

geopandasは世界地図専用のライブラリではなく、シェープデータと呼ばれる地図上に記載される地域の位置や形状の情報を使い、地図を表示するライブラリです。

つまりシェープデータがあれば他の地域も表示できるというわけです。

例えばこちらのサイトでは色々な地域のシェープデータを取得することができます。

ページにアクセスして、下の方に進むとデータ一覧がありますので、「Name」の場所の「Filter」に「Japan」と入力すると日本のデータがピックアップされます。

「Full Release」の列のダウンロードマークをクリックするとデータをダウンロードできます。

ダウンロードしたデータを開いてみると色々なファイルがあることがわかります。

今回使用するのは「geoBoundaries-JPN-ADM0_simplified.geojson」です。

「geopandas.read_file(データファイルパス)」でgeopandasに読み込むことができます。

import geopandas

japan = "./geoBoundaries-JPN-ADM0-all/geoBoundaries-JPN-ADM0.geojson"
data = geopandas.read_file(japan)

data.plot()

ただ気をつけることはこのシェープデータは日本のシェープデータで、都道府県とか地域とかに分かれていないので、先ほどのように人口で塗り分けるなんてことはできません。

次回はJupyter notebookでファイル名をライブラリ名としてしまったことで起きたエラーを紹介します。

ではでは今回はこんな感じで。

よかったらシェアしてね!
  • URLをコピーしました!

コメント

コメントする

目次