Plotly の Locationmode を使用したコロプレス マップ

Vaibhav Vaibhav 2024年2月15日
  1. Python でのコロプレス マップ
  2. コロプレス マップのハイライト エリア
  3. 米国以外のコロプレス マップのプロット
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 は、PointLineStringPolygonMultiPointMultiLineString、および MultiPolygon のいくつかのタイプをサポートしています。

幾何学的オブジェクトといくつかの追加の詳細は、Feature オブジェクトとして知られています。 FeatureCollectionFeature オブジェクトのセットです。

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 の症例データと、インドとその州の形状または座標がそれぞれ格納されます。 featureidkeyproperties.ST_NM に設定されます。これは、shape データベースのすべてのエントリが、properties キーにマップされたディクショナリ内に状態名 (ST_NM) プロパティを持っているためです。

著者: Vaibhav Vaibhav
Vaibhav Vaibhav avatar Vaibhav Vaibhav avatar

Vaibhav is an artificial intelligence and cloud computing stan. He likes to build end-to-end full-stack web and mobile applications. Besides computer science and technology, he loves playing cricket and badminton, going on bike rides, and doodling.