Plotly에서 Locationmode를 사용하는 Choropleth 맵

Vaibhav Vaibhav 2023년6월20일
  1. Python의 Choropleth 맵
  2. Choropleth 지도에서 강조 영역
  3. 미국 이외의 등치 맵 플로팅하기
Plotly에서 Locationmode를 사용하는 Choropleth 맵

데이터 과학은 알고리즘, 프로세스, 시스템, 수학 및 과학적 절차를 사용하여 구조화, 비구조화 및 시끄러운 데이터에서 통찰력과 지식을 추출하고 이러한 학습을 사용하여 비즈니스 문제를 해결하고 학습 기반 솔루션을 만드는 컴퓨터 과학 분야입니다.

Python과 R은 이러한 언어가 제공하는 지원 및 기능으로 인해 데이터 과학 커뮤니티에서 유명한 두 가지 프로그래밍 언어입니다.

데이터 시각화는 데이터 과학의 핵심 구성 요소이므로 Python은 대화형 차트와 지도를 만드는 데 도움이 되는 라이브러리인 Plotly를 제공합니다.

산점도, 선 차트, 막대 차트, 파이 차트, 거품 차트, 오차 막대, 히스토그램, 2D 히스토그램, 히트맵, 캔들스틱, Mapbox choropleth 맵, 클러스터그램 등과 같은 다양한 유형의 플롯을 지원합니다.

이 기사에서는 Plotly가 지원하는 플롯 중 하나인 등치 맵에 대해 설명합니다.

Python의 Choropleth 맵

Plotly는 choropleth()라는 메서드를 제공하여 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()

출력:

기본 플롯

코드를 실행하면 새 브라우저 창이 열리고 이 대화형 등치 맵이 표시됩니다. 지도 위로 마우스를 가져가면 화면 오른쪽 상단에 몇 가지 옵션이 나타납니다.

Choropleth 지도에서 강조 영역

등치 맵의 영역은 각 위치에 대한 이름과 색상을 지정하여 강조 표시할 수 있습니다. 다음 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, MultiLineStringMultiPolygon과 같은 여러 유형을 지원합니다.

기하학적 개체 및 일부 추가 세부 정보는 Feature 개체로 알려져 있습니다. FeatureCollectionFeature 개체 집합입니다.

두 개의 choropleth 맵을 플로팅하여 더 자세히 이해해 봅시다.

브라질의 대두 생산

이러한 그래프를 그리려면 두 개의 데이터베이스가 필요합니다. 하나는 브라질과 그 주들의 모양 또는 좌표를 위한 것이고 다른 하나는 대두 생산을 위한 것입니다. 이 두 가지가 준비되면 두 테이블 간에 항목을 매핑할 기능이나 열이 있는지 확인해야 합니다.

간단히 말해서 대두 데이터베이스의 어떤 데이터가 어떤 모양 또는 좌표 데이터와 관련이 있는지 알 수 있는 방법이 필요합니다.

이 모든 것을 다룬 후에는 choropleth() 메서드를 사용하여 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_namehover_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()

출력:

인도 플롯

casesshape 변수는 각각 COVID 사례 데이터와 인도 및 해당 주의 모양 또는 좌표를 저장합니다. featureidkeyproperties.ST_NM으로 설정됩니다. shape 데이터베이스의 모든 항목에는 properties 키에 매핑된 사전 내에 상태 이름(ST_NM) 속성이 있기 때문입니다.

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.