Plotly の Locationmode を使用したコロプレス マップ
データ サイエンスは、アルゴリズム、プロセス、システム、数学、および科学的手順を使用して、構造化データ、非構造化データ、およびノイズの多いデータから洞察と知識を抽出し、それらの学習を使用してビジネス上の問題を解決し、学習ベースのソリューションを作成するコンピューター サイエンスの分野です。
Python と R は、これらの言語が提供するサポートと機能により、データ サイエンス コミュニティで有名な 2つのプログラミング言語です。
データ ビジュアライゼーションはデータ サイエンスの重要な要素であるため、Python はインタラクティブなチャートやマップの作成に役立つライブラリ Plotly を提供しています。
散布図、折れ線グラフ、棒グラフ、円グラフ、バブル チャート、エラー バー、ヒストグラム、2D ヒストグラム、ヒートマップ、ローソク足、Mapbox コロプレス マップ、クラスターグラムなど、さまざまな種類のプロットをサポートしています。
この記事では、Plotly がサポートするプロットの 1つ、つまりコロプレス マップについて説明します。
Python でのコロプレス マップ
Plotly は、コロプレス マップを作成できる choropleth()
メソッドを提供します。 このメソッドの構文は次のとおりです。
plotly.express.choropleth(
data_frame=None,
lat=None,
lon=None,
locations=None,
locationmode=None,
geojson=None,
color=None,
scope=None,
center=None,
title=None,
width=None,
height=None,
)
次の Python コードは、このメソッドを使用してコロプレス マップをプロットする方法を示しています。
import plotly.express as px
figure = px.choropleth(locationmode="USA-states", color=[2], scope="usa")
figure.show()
出力:
コードを実行すると新しいブラウザ ウィンドウが開き、このインタラクティブなコロプレス マップが表示されます。 マップにカーソルを合わせると、画面の右上隅にいくつかのオプションが表示されます。
コロプレス マップのハイライト エリア
コロプレス マップ上の領域は、場所ごとに名前と色を指定することで強調表示できます。 次の Python コードは同じことを示しています。
import plotly.express as px
figure = px.choropleth(
locations=["WA", "GA", "FL", "NY"],
locationmode="USA-states",
color=[2, 4, 6, 8],
scope="usa",
)
figure.show()
出力:
米国以外のコロプレス マップのプロット
デフォルトでは、Plotly は米国の州のみをサポートしています。 他の国とその州をプロットするには、それらの国と州の GeoJSON データが必要です。
GeoJSON は、地理的特徴を表すための形式です。 GeoJSON は、Point
、LineString
、Polygon
、MultiPoint
、MultiLineString
、および MultiPolygon
のいくつかのタイプをサポートしています。
幾何学的オブジェクトといくつかの追加の詳細は、Feature
オブジェクトとして知られています。 FeatureCollection
は Feature
オブジェクトのセットです。
2つのコロプレス マップをプロットして、これをさらに理解しましょう。
ブラジルの大豆生産
このようなグラフをプロットするには、2つのデータベースが必要です。 1つはブラジルとその州の形状または座標用で、もう 1つは大豆生産用です。 これら 2つのことが整ったら、2つのテーブル間でエントリをマップするための機能または列があることを確認する必要があります。
簡単に言えば、大豆データベースのどのデータがどの形状または座標データに関連しているかを知る方法が必要です。
これらすべてをカバーしたら、choropleth()
メソッドを使用して、同じコロプレス マップを生成します。 実装については、次の Python コードを参照してください。
import json
import pandas as pd
import plotly as plt
import plotly.express as px
from urllib.request import urlopen
# Brazil coordinates / shape
with urlopen(
"https://raw.githubusercontent.com/codeforamerica/click_that_hood/master/public/data/brazil-states.geojson"
) as response:
brazil = json.load(response)
# Since the database doesn't have an ID or feature using which values will be mapped between the coordinate/shape database and soybean database, we are adding an ID ourselves.
for feature in brazil["features"]:
feature["id"] = feature["properties"]["name"]
# Soybean database for states in Brazil
soybean = pd.read_csv(
"https://raw.githubusercontent.com/nayanemaia/Dataset_Soja/main/soja%20sidra.csv"
)
figure = px.choropleth(
soybean, # soybean database
locations="Estado", # define the limits on the map/geography
geojson=brazil, # shape information
color="Produção", # defining the color of the scale via database
hover_name="Estado", # details to show on hover
hover_data=["Longitude", "Latitude"], # details to show on hover
title="Soybean production in Brazil", # title of the map
)
figure.update_geos(fitbounds="locations", visible=False)
figure.show()
出力:
hover_name
および hover_data
属性を使用して、ユーザーがマップの個々の部分にカーソルを合わせた場合に表示する情報を指定できます。 fig.update_geos()
は、表示するつもりのないメイン マップ (ブラジル マップ) の周りのすべてをトリミングします。
インドでのアクティブなCOVID19ケース
import pandas as pd
import plotly.express as px
cases = pd.read_csv(
"https://gist.githubusercontent.com/jbrobst/56c13bbbf9d97d187fea01ca62ea5112/raw/e388c4cae20aa53cb5090210a42ebb9b765c0a36/active_cases_2020-07-17_0800.csv"
)
shape = "https://gist.githubusercontent.com/jbrobst/56c13bbbf9d97d187fea01ca62ea5112/raw/e388c4cae20aa53cb5090210a42ebb9b765c0a36/india_states.geojson"
figure = px.choropleth(
cases,
geojson=shape,
# ID or feature to use for mapping values between the two databases
featureidkey="properties.ST_NM",
locations="state",
color="active cases", # a field in the COVID cases database used for the color
color_continuous_scale="Blues",
)
figure.update_geos(fitbounds="locations", visible=False)
figure.show()
出力:
cases
変数と shape
変数には、COVID の症例データと、インドとその州の形状または座標がそれぞれ格納されます。 featureidkey
は properties.ST_NM
に設定されます。これは、shape
データベースのすべてのエントリが、properties
キーにマップされたディクショナリ内に状態名 (ST_NM
) プロパティを持っているためです。