Mapas de coropletas con modo de ubicación en Plotly

Vaibhav Vaibhav 15 febrero 2024
  1. Mapas de coropletas en Python
  2. Resaltar áreas en el mapa de coropletas
  3. Trazar mapas de coropletas que no sean EE. UU.
Mapas de coropletas con modo de ubicación en Plotly

La ciencia de datos es una rama de las ciencias de la computación que utiliza algoritmos, procesos, sistemas, matemáticas y procedimientos científicos para extraer información y conocimientos de datos estructurados, no estructurados y ruidosos y utiliza esos aprendizajes para resolver problemas comerciales y crear soluciones basadas en el aprendizaje.

Python y R son dos lenguajes de programación famosos en la comunidad de ciencia de datos debido al soporte y las capacidades que ofrecen estos lenguajes.

Dado que la visualización de datos es un componente clave de la ciencia de datos, Python ofrece una biblioteca, Plotly, que nos ayuda a crear gráficos y mapas interactivos.

Admite varios tipos de gráficos, como gráficos de dispersión, gráficos de líneas, gráficos de barras, gráficos circulares, gráficos de burbujas, barras de error, histogramas, histogramas 2D, mapas de calor, velas japonesas, mapas de coropletas de Mapbox, clustergramas, etc.

En este artículo, hablaremos sobre uno de los gráficos que admite Plotly, a saber, los mapas de coropletas.

Mapas de coropletas en Python

Plotly ofrece un método, coropletas(), que nos permite crear mapas de coropletas. Este método tiene la siguiente sintaxis.

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,
)

El siguiente código de Python muestra cómo usar este método para trazar un mapa de coropletas.

import plotly.express as px

figure = px.choropleth(locationmode="USA-states", color=[2], scope="usa")
figure.show()

Producción:

Trama basica

Se abrirá una nueva ventana del navegador al ejecutar el código, mostrando este mapa interactivo de coropletas. Al pasar el cursor sobre el mapa, aparecen algunas opciones en la esquina superior derecha de la pantalla.

Resaltar áreas en el mapa de coropletas

Las áreas en un mapa de coropletas se pueden resaltar especificando sus nombres y colores para cada ubicación. El siguiente código de Python muestra lo mismo.

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()

Producción:

áreas resaltadas

Trazar mapas de coropletas que no sean EE. UU.

De forma predeterminada, Plotly solo es compatible con los estados de EE. UU. Para trazar otros países y sus estados, necesitamos datos de GeoJSON para esos países y estados.

GeoJSON es un formato para representar características geográficas. GeoJSON admite varios tipos: Point, LineString, Polygon, MultiPoint, MultiLineString y MultiPolygon.

Los objetos geométricos y algunos detalles adicionales se conocen como objetos Feature. Una FeatureCollection es un conjunto de objetos Feature.

Entendamos esto mejor trazando dos mapas de coropletas.

Producción de soja en Brasil

Para trazar un gráfico de este tipo, necesitaremos dos bases de datos; uno para la forma o coordenadas de Brasil y sus estados y otro para la producción de soja. Una vez que estas dos cosas estén en su lugar, debemos asegurarnos de tener una función o columna para asignar entradas entre las dos tablas.

En pocas palabras, necesitamos una forma de saber qué datos en la base de datos de soya se relacionan con qué forma o datos de coordenadas.

Una vez que tengamos todo esto cubierto, usaremos el método coropletas() para generar un mapa de coropletas para el mismo. Consulte el siguiente código de Python para la implementación.

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()

Producción:

parcela brasil

Los atributos hover_name y hover_data se pueden usar para especificar qué información se debe mostrar si un usuario se desplaza sobre partes individuales del mapa. fig.update_geos() recorta todo alrededor del mapa principal (mapa de Brasil), que no pretendemos mostrar.

Casos activos de COVID19 en India

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()

Producción:

trama de la india

Las variables cases y shape almacenan datos de casos de COVID y la forma o coordenadas de India y sus estados, respectivamente. La featureidkey se establece en properties.ST_NM porque cada entrada en la base de datos shape tiene una propiedad de nombre de estado (ST_NM) dentro del diccionario asignada a la clave properties.

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.