library(rio)
data=import("datos_abiertos_vigilancia_dengue.csv")
summary(data$edad)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.00 15.00 26.00 28.97 41.00 106.00
str(data)
## 'data.frame': 501680 obs. of 7 variables:
## $ departamento: chr "SAN MARTIN" "CUSCO" "ICA" "LORETO" ...
## $ provincia : chr "RIOJA" "LA CONVENCION" "ICA" "MAYNAS" ...
## $ distrito : chr "PARDO MIGUEL" "SANTA ANA" "PARCONA" "IQUITOS" ...
## $ enfermedad : chr "DENGUE SIN SEÑALES DE ALARMA" "DENGUE SIN SEÑALES DE ALARMA" "DENGUE SIN SEÑALES DE ALARMA" "DENGUE SIN SEÑALES DE ALARMA" ...
## $ year : int 2022 2021 2020 2021 2021 2022 2020 2022 2017 2017 ...
## $ ubigeo : int 220805 80901 110106 160101 250101 200401 160101 200105 200104 130702 ...
## $ edad : int 106 105 104 104 103 103 102 101 100 100 ...
library(dplyr)
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
table(data$enfermedad)
##
## DENGUE CON SEÑALES DE ALARMA
## 8 55058
## DENGUE GRAVE DENGUE SIN SEÑALES DE ALARMA
## 2262 444352
data$enfermedad <- gsub("DENGUE CON SEÑALES DE ALARMA", "con", data$enfermedad)
data$enfermedad <- gsub("DENGUE SIN SEÑALES DE ALARMA", "sin", data$enfermedad)
data$enfermedad <- gsub("DENGUE GRAVE", "grave", data$enfermedad)
table(data$enfermedad)
##
## con grave sin
## 8 55058 2262 444352
data=filter(data, enfermedad=="con" | enfermedad=="sin" | enfermedad=="grave")
data$enfermedad=as.factor(data$enfermedad)
table(data$enfermedad)
##
## con grave sin
## 55058 2262 444352
summary(data$edad)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.00 15.00 26.00 28.97 41.00 106.00
Pregunta 1
library(lsr)
EdadxYear = data |>
group_by(year) |>
summarise(media = mean(edad, na.rm=T))
EdadxYear
## # A tibble: 23 × 2
## year media
## <int> <dbl>
## 1 2000 28.4
## 2 2001 28.9
## 3 2002 26.0
## 4 2003 28.6
## 5 2004 28.1
## 6 2005 26.3
## 7 2006 26.8
## 8 2007 28.0
## 9 2008 27.8
## 10 2009 29.6
## # ℹ 13 more rows
Gráfico
library(ggplot2)
library(ggthemes)
## Warning: package 'ggthemes' was built under R version 4.3.3
# Crear el gráfico de líneas
ggplot(EdadxYear, aes(x = year, y = media)) +
geom_line(color = "blue", size = 1.5) +
geom_point(color = "red", size = 3) + # Añadir puntos para resaltar los valores
labs(title = "Edad promedio de personas contagiadas de dengue por año",
x = "Año",
y = "Edad") +
theme_economist()
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
theme(legend.key.size = unit(1, "lines"))
## List of 1
## $ legend.key.size: 'simpleUnit' num 1lines
## ..- attr(*, "unit")= int 3
## - attr(*, "class")= chr [1:2] "theme" "gg"
## - attr(*, "complete")= logi FALSE
## - attr(*, "validate")= logi TRUE
Pregunta 2
pregunta2 <- data %>%
group_by(year) %>%
summarise(
total_casos = n(),
graves = sum(enfermedad == "grave"),
sin_señales = sum(enfermedad == "sin"),
con_señales = sum(enfermedad == "con")
)
Grafico
library(ggplot2)
# Suponiendo que tus datos están en un dataframe llamado "datos" con las columnas "año", "total", "con_alarma", "sin_alarma" y "graves"
# Crear gráficos de líneas individuales para cada variable
grafico_total <- ggplot(pregunta2, aes(x = year, y = total_casos)) +
geom_line() +
labs(title = "Total de casos de Dengue a lo largo de los años",
x = "Año",
y = "Total de casos") +
theme_minimal()
grafico_con_alarma <- ggplot(pregunta2, aes(x = year, y = con_señales)) +
geom_line() +
labs(title = "Casos de Dengue con Alarma a lo largo de los años",
x = "Año",
y = "Casos con Alarma") +
theme_minimal()
grafico_sin_alarma <- ggplot(pregunta2, aes(x = year, y = sin_señales)) +
geom_line() +
labs(title = "Casos de Dengue sin Alarma a lo largo de los años",
x = "Año",
y = "Casos sin Alarma") +
theme_minimal()
grafico_graves <- ggplot(pregunta2, aes(x = year, y = graves)) +
geom_line() +
labs(title = "Casos de Dengue Graves a lo largo de los años",
x = "Año",
y = "Casos Graves") +
theme_minimal()
# Mostrar los gráficos por separado
print(grafico_total)
print(grafico_con_alarma)
print(grafico_sin_alarma)
print(grafico_graves)
Pregunta 4
pregunta4 <- data %>%
group_by(departamento, provincia, year) %>%
summarize(
con_alarma = sum(enfermedad == "con"),
sin_alarma = sum(enfermedad == "sin"),
graves = sum(enfermedad == "graves")
)
## `summarise()` has grouped output by 'departamento', 'provincia'. You can
## override using the `.groups` argument.
# Mostrar los primeros registros de la base de datos resumida
head(pregunta4)
## # A tibble: 6 × 6
## # Groups: departamento, provincia [1]
## departamento provincia year con_alarma sin_alarma graves
## <chr> <chr> <int> <int> <int> <int>
## 1 AMAZONAS BAGUA 2000 0 280 0
## 2 AMAZONAS BAGUA 2001 0 420 0
## 3 AMAZONAS BAGUA 2002 0 20 0
## 4 AMAZONAS BAGUA 2003 0 83 0
## 5 AMAZONAS BAGUA 2004 0 126 0
## 6 AMAZONAS BAGUA 2005 0 51 0
Ahora añadiré el total
pregunta4 <- pregunta4 %>%
mutate(total_contagios = con_alarma + sin_alarma + graves)
head(pregunta4)
## # A tibble: 6 × 7
## # Groups: departamento, provincia [1]
## departamento provincia year con_alarma sin_alarma graves total_contagios
## <chr> <chr> <int> <int> <int> <int> <int>
## 1 AMAZONAS BAGUA 2000 0 280 0 280
## 2 AMAZONAS BAGUA 2001 0 420 0 420
## 3 AMAZONAS BAGUA 2002 0 20 0 20
## 4 AMAZONAS BAGUA 2003 0 83 0 83
## 5 AMAZONAS BAGUA 2004 0 126 0 126
## 6 AMAZONAS BAGUA 2005 0 51 0 51
Data nueva completa ahora sí todo
provyear <- pregunta4 %>%
group_by(departamento, provincia) %>%
summarise(total_historico = sum(total_contagios))
## `summarise()` has grouped output by 'departamento'. You can override using the
## `.groups` argument.
summary(provyear$total_historico)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 1.0 10.5 1138.0 4499.2 3530.5 66674.0
Puesto que la media es 1138, los datos que estén por encima de dicha media serán consideradas muy altas
provyear=filter(provyear, total_historico>4499.2)
Gráfico de puntos
library(ggplot2)
# Crear el gráfico de puntos
grafico <- ggplot(provyear, aes(x = departamento, y = total_historico, label = provincia)) +
geom_point(color = "red", size = 3) + # Puntos azules
geom_text(size = 4, vjust = -0.5) + # Etiquetas con un tamaño y alineación vertical adecuados
labs(title = "Provincias con mayor número de casos de dengue", # Título del gráfico
x = "Departamentos", y = "Total de casos") + # Etiquetas de los ejes
theme_solarized() + # Estilo minimalista
theme(plot.title = element_text(hjust = 0.5), # Alinear título al centro
plot.margin = unit(c(0.8, 0.8, 0.8, 0.8), "cm")) # Márgenes del gráfico
# Mostrar el gráfico
print(grafico)
Pregunta 5
Ahora bien, para analizar la relación primero haremos una suma de cada dato por departamento y después realizaremos un mapa de calor (primera vez que hago uno)
Vamos a explorar primero
table(data$departamento)
##
## \\N AMAZONAS ANCASH AREQUIPA AYACUCHO
## 444 12017 7214 7 8889
## CAJAMARCA CALLAO CUSCO HUANUCO ICA
## 19409 26 10475 9046 21324
## JUNIN LA LIBERTAD LAMBAYEQUE LIMA LORETO
## 19199 24377 15618 4255 92496
## MADRE DE DIOS MOQUEGUA PASCO PIURA PUNO
## 30562 1 1963 126392 179
## SAN MARTIN TUMBES UCAYALI
## 26759 27313 43707
Según lo registra la base de datos, solo se tiene información de 22 departamentos y NN
Procederemos a limpiar para después crear
pregunta5 <- data %>% filter_all(all_vars(. != "\\N"))
table(pregunta5$departamento)
##
## AMAZONAS ANCASH AREQUIPA AYACUCHO CAJAMARCA
## 12017 7214 7 8889 19409
## CALLAO CUSCO HUANUCO ICA JUNIN
## 26 10475 9046 21324 19199
## LA LIBERTAD LAMBAYEQUE LIMA LORETO MADRE DE DIOS
## 24377 15618 4255 92496 30562
## MOQUEGUA PASCO PIURA PUNO SAN MARTIN
## 1 1963 126392 179 26759
## TUMBES UCAYALI
## 27313 43707
Creacion de la data
pregunta5 <- pregunta5 %>%
group_by(departamento) %>%
summarise(
total_casos = n(),
graves = sum(enfermedad == "grave"),
sin_señales = sum(enfermedad == "sin"),
con_señales = sum(enfermedad == "con")
)
head(pregunta5)
## # A tibble: 6 × 5
## departamento total_casos graves sin_señales con_señales
## <chr> <int> <int> <int> <int>
## 1 AMAZONAS 12017 39 11476 502
## 2 ANCASH 7214 19 6899 296
## 3 AREQUIPA 7 0 6 1
## 4 AYACUCHO 8889 20 8600 269
## 5 CAJAMARCA 19409 37 17503 1869
## 6 CALLAO 26 0 23 3
La pregunta me pide analizar la relación entre casos alarmantes no graves y los asintomaticos. En ese sentido, en la base de datos significa que es la relación entre los “con” entre los “sin”
pregunta5 <- pregunta5 %>%
mutate(relacion = con_señales/sin_señales)
pregunta5=select(pregunta5, c(1,6))
head(pregunta5)
## # A tibble: 6 × 2
## departamento relacion
## <chr> <dbl>
## 1 AMAZONAS 0.0437
## 2 ANCASH 0.0429
## 3 AREQUIPA 0.167
## 4 AYACUCHO 0.0313
## 5 CAJAMARCA 0.107
## 6 CALLAO 0.130
Intentaremos importar la data de los mapas
library(ggplot2)
library(rgdax)
## Warning: package 'rgdax' was built under R version 4.3.3
## Loading required package: digest
## Loading required package: jsonlite
## Loading required package: RCurl
## Loading required package: httr
## Loading required package: plyr
## ------------------------------------------------------------------------------
## You have loaded plyr after dplyr - this is likely to cause problems.
## If you need functions from both plyr and dplyr, please load plyr first, then dplyr:
## library(plyr); library(dplyr)
## ------------------------------------------------------------------------------
##
## Attaching package: 'plyr'
## The following objects are masked from 'package:dplyr':
##
## arrange, count, desc, failwith, id, mutate, rename, summarise,
## summarize
library(sp)
library(ggplot2)
mapDIS=sf::read_sf("DEPARTAMENTO.shp")
ggplot(mapDIS) + geom_sf()
Exploremos un poco más a fondo esta base de datos del mapa
names(mapDIS)
## [1] "DEPARTAMEN" "CAPITAL" "INSTITUCIO" "geometry"
#cambiaremos el nombre
names(mapDIS)=c("departamento","capital","institucion","geometry")
Toca unir la data para intentar que salga
mapa=merge(mapDIS, pregunta5)
ggplot(mapa) +
geom_sf(aes(fill = relacion))
# Transformar los datos espaciales a otro sistema de coordenadas (3857)
nc_3857 <- sf::st_transform(mapa, 3857)
# Crear un gráfico con dos capas de datos, una con los datos originales y otra con los datos transformados, coloreando los polígonos en rojo y mostrando los bordes en blanco
ggplot() +
geom_sf(data = mapa) +
geom_sf(data = nc_3857, colour = "red", fill = NA)
# Agregar un punto central a cada polígono y ajustar el tamaño del punto según la variable 'AREA', mostrando el punto en la leyenda
nc_3857$mid <- sf::st_centroid(nc_3857$geometry)
ggplot(nc_3857) +
geom_sf(colour = "white") +
geom_sf(aes(geometry = mid, size = relacion), show.legend = "point")
# Crear un gráfico con capas que utilizan las coordenadas x e y, estableciendo el sistema de coordenadas predeterminado
ggplot(nc_3857) +
geom_sf() +
annotate("point", x = -80, y = 35, colour = "red", size = 4) +
coord_sf(default_crs = sf::st_crs(4326))
# Agregar etiquetas a los polígonos
ggplot(nc_3857[1:3, ]) +
geom_sf(aes(fill = relacion)) +
geom_sf_label(aes(label = departamento))