1 Exploración interactiva de datos con plotly
Author: Mike Jeziorski
Date: 5/13/2021
El código de R de este archivo está disponbie vía GitHub.
1.1 Introducción a plotly
Link a la presentación Introducción a plotly.
1.2 Graficando datos de palmerpenguins con plotly
# install.packages(c("tidyverse", "plotly", "palmerpenguins"))
library(palmerpenguins) # juego de datos científicos
library(tidyverse) # incluye dplyr y ggplot2
## ── Attaching packages ─────────────────────────────────────────────────────────────────────────────── tidyverse 1.3.0 ──
## ✔ ggplot2 3.3.3 ✔ purrr 0.3.4
## ✔ tibble 3.0.6 ✔ dplyr 1.0.4
## ✔ tidyr 1.1.2 ✔ stringr 1.4.0
## ✔ readr 1.4.0 ✔ forcats 0.5.1
## ── Conflicts ────────────────────────────────────────────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
library(plotly)
##
## Attaching package: 'plotly'
## The following object is masked from 'package:ggplot2':
##
## last_plot
## The following object is masked from 'package:stats':
##
## filter
## The following object is masked from 'package:graphics':
##
## layout
glimpse(penguins)
## Rows: 344
## Columns: 8
## $ species <fct> Adelie, Adelie, Adelie, Adelie, Adelie, Adelie, Adelie, Adelie, Adelie, Adelie, Adelie, Ade…
## $ island <fct> Torgersen, Torgersen, Torgersen, Torgersen, Torgersen, Torgersen, Torgersen, Torgersen, Tor…
## $ bill_length_mm <dbl> 39.1, 39.5, 40.3, NA, 36.7, 39.3, 38.9, 39.2, 34.1, 42.0, 37.8, 37.8, 41.1, 38.6, 34.6, 36.…
## $ bill_depth_mm <dbl> 18.7, 17.4, 18.0, NA, 19.3, 20.6, 17.8, 19.6, 18.1, 20.2, 17.1, 17.3, 17.6, 21.2, 21.1, 17.…
## $ flipper_length_mm <int> 181, 186, 195, NA, 193, 190, 181, 195, 193, 190, 186, 180, 182, 191, 198, 185, 195, 197, 18…
## $ body_mass_g <int> 3750, 3800, 3250, NA, 3450, 3650, 3625, 4675, 3475, 4250, 3300, 3700, 3200, 3800, 4400, 370…
## $ sex <fct> male, female, female, NA, female, male, female, male, NA, NA, NA, NA, female, male, male, f…
## $ year <int> 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2…
summary(penguins)
## species island bill_length_mm bill_depth_mm flipper_length_mm body_mass_g sex
## Adelie :152 Biscoe :168 Min. :32.10 Min. :13.10 Min. :172.0 Min. :2700 female:165
## Chinstrap: 68 Dream :124 1st Qu.:39.23 1st Qu.:15.60 1st Qu.:190.0 1st Qu.:3550 male :168
## Gentoo :124 Torgersen: 52 Median :44.45 Median :17.30 Median :197.0 Median :4050 NA's : 11
## Mean :43.92 Mean :17.15 Mean :200.9 Mean :4202
## 3rd Qu.:48.50 3rd Qu.:18.70 3rd Qu.:213.0 3rd Qu.:4750
## Max. :59.60 Max. :21.50 Max. :231.0 Max. :6300
## NA's :2 NA's :2 NA's :2 NA's :2
## year
## Min. :2007
## 1st Qu.:2007
## Median :2008
## Mean :2008
## 3rd Qu.:2009
## Max. :2009
##
<- penguins %>%
penguins_hm filter(!is.na(sex)) %>%
::count(species, island, sex) %>%
dplyrggplot(aes(x = sex, y = species, fill = n)) +
geom_tile() +
facet_grid(~ island) +
theme_classic() +
labs(title = "Distribution of penguins")
ggplotly(penguins_hm)
<- penguins %>%
penguins_sp filter(!is.na(sex)) %>%
ggplot(aes(x = bill_length_mm, y = body_mass_g, shape = sex, color = species,
text = paste0("Sex: ", sex,
"\nIsland: ", island,
"\nYear: ", year))) +
geom_point() +
scale_shape_manual(values = c(1, 16)) +
labs(x = "Bill length (mm)", y = "Body mass (g)")
::ggplotly(penguins_sp, tooltip = "text") plotly
<- penguins %>%
penguins_sp_i filter(!is.na(sex)) %>%
::plot_ly(x = ~bill_length_mm, y = ~body_mass_g, color = ~species,
plotlytype = "scatter", mode = "markers")
# install.packages("htmlwidgets")
library(htmlwidgets)
::saveWidget(penguins_sp_i, "penguins_scatterplot.html") htmlwidgets
1.3 Graficando datos de COVID con plotly
Datos del la Secretaría de Salud, Gobierno de México Fuente de los datos: https://datos.gob.mx/busca/dataset/informacion-referente-a-casos-covid-19-en-mexico Datos crudos: https://www.gob.mx/salud/documentos/datos-abiertos-152127
El archivo “qro_raw_210513.csv” contiene los datos para el 13 de mayo de 2021, filtrado para los residentes del estado de Querétaro.
<- readr::read_csv("qro_raw_210513.csv") qro_raw
##
## ── Column specification ────────────────────────────────────────────────────────────────────────────────────────────────
## cols(
## .default = col_double(),
## FECHA_ACTUALIZACION = col_date(format = ""),
## ID_REGISTRO = col_character(),
## ENTIDAD_UM = col_character(),
## ENTIDAD_NAC = col_character(),
## MUNICIPIO_RES = col_character(),
## FECHA_INGRESO = col_date(format = ""),
## FECHA_SINTOMAS = col_date(format = ""),
## FECHA_DEF = col_date(format = ""),
## PAIS_NACIONALIDAD = col_character()
## )
## ℹ Use `spec()` for the full column specifications.
<- qro_raw %>%
qro_covid_pos
mutate(sexo = case_when(SEXO == 1 ~ "Mujer",
== 2 ~ "Hombre",
SEXO == 99 ~ NA_character_),
SEXO tipo_paciente = case_when(TIPO_PACIENTE == 1 ~ "Ambulatorio",
== 2 ~ "Hospitalizado",
TIPO_PACIENTE == 99 ~ NA_character_)) %>%
TIPO_PACIENTE filter(RESULTADO_LAB == 1) %>%
ggplot(aes(x = FECHA_INGRESO, fill = as.factor(tipo_paciente))) +
geom_bar() +
labs(x = "Fecha de visita", y = "Total",
title = "Pacientes positivos en el Edo. de Querétaro (muertos en morado)",
caption = "Fuente: Dirección General de Epidemiología, Gobierno de México") +
scale_fill_manual(name = "Tipo de paciente",
labels = c("Ambulatorio", "Hospitalizado"),
values = c("blue", "red")) +
geom_bar(aes(x = FECHA_DEF), fill = "purple") +
theme_classic()
ggplotly(qro_covid_pos)
<- filter(qro_raw, RESULTADO_LAB == 1, EMBARAZO == 1, !is.na(FECHA_DEF)) %>%
def_emb nrow()
<- qro_raw %>%
qro_covid_emb mutate(sexo = case_when(SEXO == 1 ~ "Mujer",
== 2 ~ "Hombre",
SEXO == 99 ~ NA_character_),
SEXO tipo_paciente = case_when(TIPO_PACIENTE == 1 ~ "Ambulatorio",
== 2 ~ "Hospitalizado",
TIPO_PACIENTE == 99 ~ NA_character_)) %>%
TIPO_PACIENTE filter(RESULTADO_LAB == 1, EMBARAZO == 1) %>%
ggplot(aes(x = FECHA_INGRESO, y = EDAD, color = as.factor(TIPO_PACIENTE))) +
geom_point() +
labs(x = "Fecha de ingreso", y = "Edad",
title = "Mujeres embarazadas positivas para el virus en Edo. de Querétaro",
subtitle = paste0("Número de defunciones: ", def_emb),
caption = "Fuente: Dirección General de Epidemiología, Gobierno de México") +
scale_color_manual(name = "Tipo de paciente",
labels = c("Ambulatoria", "Hospitalizada"),
values = c("blue", "red")) +
ylim(c(0, 50)) +
theme_classic()
ggplotly(qro_covid_emb, tooltip = c("FECHA_INGRESO", "EDAD"))