#En este documento se exponen las herramientas utilizadas para la generación de los gráficos y la aplicación en RShiny del elercicio titulado: ANÁLISIS DE LA PROGRESIÓN DE LA INFECCIÓN COVID19 EN SEIS PAISES EUROPEOS.
##Lo primero es obtener la base de datos con la que vamos a trabajar. La original es mundial, y por tanto, escogemos los seis paises a analizar.
#Hemos obtenido la informacion de https://ourworldindata.org/
library(readr)
owid_covid_data <- read_csv("C:/Users/Jose Carlos/Documents/Documentos de Jose Carlos/Master Big Data/Visualizacion avanzada/owid-covid-data.csv")
## Parsed with column specification:
## cols(
## .default = col_double(),
## iso_code = col_character(),
## location = col_character(),
## date = col_date(format = ""),
## tests_units = col_character()
## )
## See spec(...) for full column specifications.
Datos<-as.data.frame(owid_covid_data)
#Realizamos una partición por los paises que nos interesa analizar más en profundo:
ESP<-Datos[Datos$iso_code == "ESP",]
FRA<-Datos[Datos$iso_code == "FRA",]
ITA<-Datos[Datos$iso_code == "ITA",]
GRC<-Datos[Datos$iso_code == "GRC",]
IRL<-Datos[Datos$iso_code == "IRL",]
GBR<-Datos[Datos$iso_code == "GBR",]
#Cargamos las librerias data.table y dplyr para generar una base de datos que contenga a los seis paises elegidos
library(data.table)
## Warning: package 'data.table' was built under R version 3.6.3
library(dplyr)
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:data.table':
##
## between, first, last
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
ESPW<-as.data.table(ESP)
FRAW<-as.data.table(FRA)
ITAW<-as.data.table(ITA)
GRCW<-as.data.table(GRC)
IRLW<-as.data.table(IRL)
GBRW<-as.data.table(GBR)
MIWORLD<-bind_rows(ESPW,FRAW,ITAW,GRCW,IRLW,GBRW)
miworld <- MIWORLD[!is.na(MIWORLD$iso_code),]
##Asimismo obtenemos otra pequeña tabla para visualizar los datos de prevalencia de algunas de las variables que figuran al final de la tabla.
mi_miniworld<-slice(miworld, 2,134,267,400,532,663)
##Una vez preparadas las tables comenzamos a crear los gráficos que nos pueden interesar para la infografía
#Prevalencia de diabetes
library(ggplot2)
## Warning: package 'ggplot2' was built under R version 3.6.3
g<-ggplot(mi_miniworld,aes(iso_code, diabetes_prevalence))
g+ geom_col(aes(fill=iso_code), width=0.5)+
ggtitle("Prevalencia de diabetes por paises") +
labs (x= "PAISES",y="PREVALENCIA", caption = NULL)
#Mortalidad cardiovascular
g<-ggplot(mi_miniworld,aes(iso_code,cvd_death_rate))
g+ geom_col(aes(fill=iso_code), width=0.5)+
ggtitle("Tasa de mortalidad cardiovascular por paises") +
labs (x= "PAISES",y="TASA DE MORTALIDAD CARDIOVASCULAR", caption = NULL)
#Proporción de población mayor de 70 años
g<-ggplot(mi_miniworld,aes(iso_code,aged_70_older))
g+ geom_col(aes(fill=iso_code), width=0.5)+
ggtitle("Proporción de personas mayores de 70 años (Datos del año 2015)") +
labs (x= "PAISES",y="PROPORCIÓN DE MAYORES DE 70 AÑOS", caption = NULL)
##A continuación realizamos algunos de los scatterplots de variables continuas que me interesan para su publicacion
#Casos totales por tests realizados
p<-ggplot(miworld,aes (total_tests, total_cases))
p + geom_point(aes(shape = iso_code, color = iso_code, size = 0.1)) +
coord_cartesian() +
scale_color_discrete() +
ggtitle("Casos totales por test realizados") +
labs (x= "Test totales realizados", y = "Casos totales diagnosticados")
## Warning: Removed 527 rows containing missing values (geom_point).
#Mortalidad total por casos totales
p<-ggplot(miworld,aes (total_cases, total_deaths_per_million))
p + geom_point(aes(shape = iso_code, color = iso_code, size = 0.01)) +
coord_cartesian() +
scale_color_discrete() +
ggtitle("Mortalidad total (casos por millón), por casos diagnosticados") +
labs (x= "Casos totales", y = "Mortalidad total (por millon)")
## Warning: Removed 1 rows containing missing values (geom_point).
#Mortalidad de novo, por casos de novo
p<-ggplot(miworld,aes (new_cases_per_million, new_deaths_per_million))
p + geom_point(aes(shape = iso_code, color = iso_code, size = 0.01)) +
coord_cartesian() +
scale_color_discrete() +
ggtitle("Mortalidad de novo (casos por millón), por casos nuevos") +
labs (x= "Casos nuevos", y = "Mortalidad de novo (por millon)")
## Warning: Removed 1 rows containing missing values (geom_point).
##Y en esta parte continuamos realizando los “timeline” de las variables principales a analizar
#Casos totales por pais
min<-as.Date("2020-3-1")
max<-NA
t<-ggplot(miworld, aes(date, total_cases))
t + geom_line(aes(color = iso_code), size = 2) +
scale_color_manual(values = c("#a6cee3", "#1f78b4", "#b2df8a", "#33a02c", "#fb9a99", "#e31a1c")) +
theme_minimal() +
scale_x_date(date_labels = "%b/%Y", limits = c(min,max)) +
ggtitle("Linea temporal de casos totales por país") +
labs (x = "Fecha", y = "Casos totales")
## Warning: Removed 366 row(s) containing missing values (geom_path).
#Mortalidad total
t<-ggplot(miworld, aes(date, total_deaths))
t + geom_line(aes(color = iso_code), size = 2) +
scale_color_manual(values = c("#a6cee3", "#1f78b4", "#b2df8a", "#33a02c", "#fb9a99", "#e31a1c")) +
theme_minimal() +
scale_x_date(date_labels = "%b/%Y", limits = c(min,max)) +
ggtitle("Linea temporal de mortalidad por país") +
labs (x = "Fecha", y = "Mortalidad")
## Warning: Removed 366 row(s) containing missing values (geom_path).
#Mortalidad ajustada por población
t<-ggplot(miworld, aes(date, total_deaths_per_million))
t + geom_line(aes(color = iso_code), size = 2) +
scale_color_manual(values = c("#a6cee3", "#1f78b4", "#b2df8a", "#33a02c", "#fb9a99", "#e31a1c")) +
theme_minimal() +
scale_x_date(date_labels = "%b/%Y", limits = c(min,max)) +
ggtitle("Linea temporal de mortalidad ajustada por país") +
labs (x = "Fecha", y = "Mortalidad ajustada")
## Warning: Removed 366 row(s) containing missing values (geom_path).
#Nuevos casos ajustados por millon de habitantes
t<-ggplot(miworld, aes(date, new_cases_per_million))
t + geom_line(aes(color = iso_code), size = 2) +
scale_color_manual(values = c("#a6cee3", "#1f78b4", "#b2df8a", "#33a02c", "#fb9a99", "#e31a1c")) +
theme_minimal() +
scale_x_date(date_labels = "%b/%Y", limits = c(min,max)) +
ggtitle("Linea temporal de nuevos casos por millón de habitantes y por país") +
labs (x = "Fecha", y = "Nuevos casos")
## Warning: Removed 366 row(s) containing missing values (geom_path).
##Por ultimo obtenemos unos mapas con los paises seleccionados para representar mejor la diferencia entre ellos respecto a alguna variable interesante (choropleth) ###En este caso hemos utilizados las librerias de R rgeos y sf
#cargamos las siguientes librerias
library(rgeos)
## Warning: package 'rgeos' was built under R version 3.6.3
## Loading required package: sp
## Warning: package 'sp' was built under R version 3.6.3
## rgeos version: 0.5-3, (SVN revision 634)
## GEOS runtime version: 3.8.0-CAPI-1.13.1
## Linking to sp version: 1.4-1
## Polygon checking: TRUE
library(sf)
## Warning: package 'sf' was built under R version 3.6.3
## Linking to GEOS 3.8.0, GDAL 3.0.4, PROJ 6.3.1
library(rnaturalearth)
## Warning: package 'rnaturalearth' was built under R version 3.6.3
library(rnaturalearthdata)
## Warning: package 'rnaturalearthdata' was built under R version 3.6.3
#También la función theme_set
theme_set(theme_bw())
#Con estas librerias disponemos de las coordenadas de los paises a nivel mundial.
#Ahora generamos un data.frame con los paises que hemos seleccionado:
mi_space<-ne_countries(scale = "medium", country= c("spain","france","italy","greece","ireland", "united kingdom"), returnclass = "sf")
#A este data.frame, le vamos a añadir las columnas que nos interesan del otro data.frame de paises, que he denominado mi_miniworld
#Reordenamos las filas del mi_miniworld
library(tidyverse)
## Warning: package 'tidyverse' was built under R version 3.6.3
## -- Attaching packages ---------------------------------------------- tidyverse 1.3.0 --
## v tibble 3.0.1 v stringr 1.4.0
## v tidyr 1.0.3 v forcats 0.5.0
## v purrr 0.3.3
## Warning: package 'tibble' was built under R version 3.6.3
## Warning: package 'tidyr' was built under R version 3.6.3
## Warning: package 'forcats' was built under R version 3.6.3
## -- Conflicts ------------------------------------------------- tidyverse_conflicts() --
## x dplyr::between() masks data.table::between()
## x dplyr::filter() masks stats::filter()
## x dplyr::first() masks data.table::first()
## x dplyr::lag() masks stats::lag()
## x dplyr::last() masks data.table::last()
## x purrr::transpose() masks data.table::transpose()
mi_miniworld<-mi_miniworld %>% arrange(iso_code)
#Ahora ya añadimos las columnas deseadas a mi_space
diabetes<-mi_miniworld$diabetes_prevalence
cvd<-mi_miniworld$cvd_death_rate
older<-mi_miniworld$aged_70_older
total_deaths_per_million3<-mi_miniworld$total_deaths_per_million2
mi_space1<-as.data.table(mi_space)
mi_space1<-cbind(mi_space1,diabetes)
mi_space1<-cbind(mi_space1,cvd)
mi_space1<-cbind(mi_space1, older)
mi_space1<-cbind(mi_space1, total_deaths_per_million3)
#ahora dibujamos mapa para edad mayor de 70 años
ggplot( data = mi_space1, aes( geometry = geometry) ) +
geom_sf(aes(fill = older)) +
coord_sf(xlim = c(-20, 30), ylim = c(20, 62), expand = FALSE) +
scale_fill_viridis_c(option = "plasma" , trans = "sqrt") +
ggtitle("Prevalencia por país de población mayor de 70 años")
#Mapa para mortalidad cardiovascular
ggplot( data = mi_space1, aes( geometry = geometry) ) +
geom_sf(aes(fill = cvd)) +
coord_sf(xlim = c(-20, 30), ylim = c(20, 62), expand = FALSE) +
scale_fill_viridis_c(option = "cividis" , trans = "sqrt") +
ggtitle("Tasa de mortalidad cardiovascular por pais")
#Para la prevalencia de diabetes
ggplot( data = mi_space1, aes( geometry = geometry) ) +
geom_sf(aes(fill = diabetes)) +
coord_sf(xlim = c(-20, 30), ylim = c(20, 62), expand = FALSE) +
scale_fill_gradient(low = "#c7e9c0" , high = "#006d2c" ) +
ggtitle("Prevalencia de personas con diabetes por pais (datos del año 2015)")