library(tidyverse)
## Warning: package 'tidyverse' was built under R version 4.4.3
## Warning: package 'ggplot2' was built under R version 4.4.2
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.1.4     ✔ readr     2.1.5
## ✔ forcats   1.0.0     ✔ stringr   1.5.1
## ✔ ggplot2   3.5.1     ✔ tibble    3.2.1
## ✔ lubridate 1.9.3     ✔ tidyr     1.3.1
## ✔ purrr     1.0.2     
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(janitor)
## Warning: package 'janitor' was built under R version 4.4.3
## 
## Adjuntando el paquete: 'janitor'
## 
## The following objects are masked from 'package:stats':
## 
##     chisq.test, fisher.test
library(skimr)
## Warning: package 'skimr' was built under R version 4.4.2
library(lubridate)
library(ggplot2)
library(corrplot)
## Warning: package 'corrplot' was built under R version 4.4.3
## corrplot 0.95 loaded
library(readr)
covid <- read_csv("D:/Usuario windows/Downloads/covid_colombia.csv")
## Warning: One or more parsing issues, call `problems()` on your data frame for details,
## e.g.:
##   dat <- vroom(...)
##   problems(dat)
## Rows: 141072 Columns: 23
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr  (10): ID de caso, Nombre departamento, Nombre municipio, Sexo, Tipo de ...
## dbl   (5): Código DIVIPOLA departamento, Código DIVIPOLA municipio, Edad, Un...
## lgl   (2): Código ISO del país, Nombre del país
## dttm  (6): fecha reporte web, Fecha de notificación, Fecha de inicio de sínt...
## 
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
covid<- clean_names(covid)

glimpse(covid)
## Rows: 141,072
## Columns: 23
## $ fecha_reporte_web            <dttm> 2021-01-13, 2020-07-18, 2020-09-23, 2020…
## $ id_de_caso                   <chr> "1.830.848", "186.958", "781.861", "187.6…
## $ fecha_de_notificacion        <dttm> 2020-12-27, 2020-06-30, 2020-09-11, 2020…
## $ codigo_divipola_departamento <dbl> 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,…
## $ nombre_departamento          <chr> "ATLANTICO", "ATLANTICO", "ATLANTICO", "A…
## $ codigo_divipola_municipio    <dbl> 8.758, 8.758, 8.758, 8.634, 8.758, 8.573,…
## $ nombre_municipio             <chr> "SOLEDAD", "SOLEDAD", "SOLEDAD", "SABANAG…
## $ edad                         <dbl> 75, 52, 80, 21, 15, 5, 8, 58, 26, 22, 33,…
## $ unidad_de_medida_de_edad     <dbl> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,…
## $ sexo                         <chr> "M", "F", "F", "F", "F", "F", "M", "F", "…
## $ tipo_de_contagio             <chr> "Comunitaria", "Comunitaria", "Comunitari…
## $ ubicacion_del_caso           <chr> "Casa", "Casa", "Casa", "Casa", "Casa", "…
## $ estado                       <chr> "Leve", "Leve", "Leve", "Leve", "Leve", "…
## $ codigo_iso_del_pais          <lgl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
## $ nombre_del_pais              <lgl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
## $ recuperado                   <chr> "Recuperado", "Recuperado", "Recuperado",…
## $ fecha_de_inicio_de_sintomas  <dttm> 2020-12-25, 2020-06-28, 2020-09-09, 2020…
## $ fecha_de_muerte              <dttm> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, …
## $ fecha_de_diagnostico         <dttm> 2021-01-07, 2020-07-11, 2020-09-22, 2020…
## $ fecha_de_recuperacion        <dttm> 2021-01-14, 2020-07-27, 2020-09-28, 2020…
## $ tipo_de_recuperacion         <chr> "Tiempo", "Tiempo", "Tiempo", "PCR", "PCR…
## $ pertenencia_etnica           <dbl> 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,…
## $ nombre_del_grupo_etnico      <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
View(covid)
dim(covid)
## [1] 141072     23
str(covid)
## spc_tbl_ [141,072 × 23] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
##  $ fecha_reporte_web           : POSIXct[1:141072], format: "2021-01-13" "2020-07-18" ...
##  $ id_de_caso                  : chr [1:141072] "1.830.848" "186.958" "781.861" "187.670" ...
##  $ fecha_de_notificacion       : POSIXct[1:141072], format: "2020-12-27" "2020-06-30" ...
##  $ codigo_divipola_departamento: num [1:141072] 8 8 8 8 8 8 8 8 8 8 ...
##  $ nombre_departamento         : chr [1:141072] "ATLANTICO" "ATLANTICO" "ATLANTICO" "ATLANTICO" ...
##  $ codigo_divipola_municipio   : num [1:141072] 8.76 8.76 8.76 8.63 8.76 ...
##  $ nombre_municipio            : chr [1:141072] "SOLEDAD" "SOLEDAD" "SOLEDAD" "SABANAGRANDE" ...
##  $ edad                        : num [1:141072] 75 52 80 21 15 5 8 58 26 22 ...
##  $ unidad_de_medida_de_edad    : num [1:141072] 1 1 1 1 1 1 1 1 1 1 ...
##  $ sexo                        : chr [1:141072] "M" "F" "F" "F" ...
##  $ tipo_de_contagio            : chr [1:141072] "Comunitaria" "Comunitaria" "Comunitaria" "Comunitaria" ...
##  $ ubicacion_del_caso          : chr [1:141072] "Casa" "Casa" "Casa" "Casa" ...
##  $ estado                      : chr [1:141072] "Leve" "Leve" "Leve" "Leve" ...
##  $ codigo_iso_del_pais         : logi [1:141072] NA NA NA NA NA NA ...
##  $ nombre_del_pais             : logi [1:141072] NA NA NA NA NA NA ...
##  $ recuperado                  : chr [1:141072] "Recuperado" "Recuperado" "Recuperado" "Recuperado" ...
##  $ fecha_de_inicio_de_sintomas : POSIXct[1:141072], format: "2020-12-25" "2020-06-28" ...
##  $ fecha_de_muerte             : POSIXct[1:141072], format: NA NA ...
##  $ fecha_de_diagnostico        : POSIXct[1:141072], format: "2021-01-07" "2020-07-11" ...
##  $ fecha_de_recuperacion       : POSIXct[1:141072], format: "2021-01-14" "2020-07-27" ...
##  $ tipo_de_recuperacion        : chr [1:141072] "Tiempo" "Tiempo" "Tiempo" "PCR" ...
##  $ pertenencia_etnica          : num [1:141072] 6 6 6 6 6 6 6 6 6 6 ...
##  $ nombre_del_grupo_etnico     : chr [1:141072] NA NA NA NA ...
##  - attr(*, "spec")=
##   .. cols(
##   ..   `fecha reporte web` = col_datetime(format = ""),
##   ..   `ID de caso` = col_character(),
##   ..   `Fecha de notificación` = col_datetime(format = ""),
##   ..   `Código DIVIPOLA departamento` = col_double(),
##   ..   `Nombre departamento` = col_character(),
##   ..   `Código DIVIPOLA municipio` = col_double(),
##   ..   `Nombre municipio` = col_character(),
##   ..   Edad = col_double(),
##   ..   `Unidad de medida de edad` = col_double(),
##   ..   Sexo = col_character(),
##   ..   `Tipo de contagio` = col_character(),
##   ..   `Ubicación del caso` = col_character(),
##   ..   Estado = col_character(),
##   ..   `Código ISO del país` = col_logical(),
##   ..   `Nombre del país` = col_logical(),
##   ..   Recuperado = col_character(),
##   ..   `Fecha de inicio de síntomas` = col_datetime(format = ""),
##   ..   `Fecha de muerte` = col_datetime(format = ""),
##   ..   `Fecha de diagnóstico` = col_datetime(format = ""),
##   ..   `Fecha de recuperación` = col_datetime(format = ""),
##   ..   `Tipo de recuperación` = col_character(),
##   ..   `Pertenencia étnica` = col_double(),
##   ..   `Nombre del grupo étnico` = col_character()
##   .. )
##  - attr(*, "problems")=<externalptr>
summary(covid)
##  fecha_reporte_web                 id_de_caso       
##  Min.   :2020-03-25 00:00:00.00   Length:141072     
##  1st Qu.:2020-12-20 00:00:00.00   Class :character  
##  Median :2021-04-15 00:00:00.00   Mode  :character  
##  Mean   :2021-04-04 06:50:10.81                     
##  3rd Qu.:2021-06-27 00:00:00.00                     
##  Max.   :2024-01-17 00:00:00.00                     
##                                                     
##  fecha_de_notificacion            codigo_divipola_departamento
##  Min.   :2020-03-20 00:00:00.00   Min.   :8                   
##  1st Qu.:2020-12-11 00:00:00.00   1st Qu.:8                   
##  Median :2021-04-05 00:00:00.00   Median :8                   
##  Mean   :2021-03-24 16:52:37.80   Mean   :8                   
##  3rd Qu.:2021-06-15 00:00:00.00   3rd Qu.:8                   
##  Max.   :2024-01-12 00:00:00.00   Max.   :8                   
##                                                               
##  nombre_departamento codigo_divipola_municipio nombre_municipio  
##  Length:141072       Min.   :8.078             Length:141072     
##  Class :character    1st Qu.:8.520             Class :character  
##  Mode  :character    Median :8.758             Mode  :character  
##                      Mean   :8.607                               
##                      3rd Qu.:8.758                               
##                      Max.   :8.849                               
##                                                                  
##       edad        unidad_de_medida_de_edad     sexo          
##  Min.   :  1.00   Min.   :1.000            Length:141072     
##  1st Qu.: 25.00   1st Qu.:1.000            Class :character  
##  Median : 37.00   Median :1.000            Mode  :character  
##  Mean   : 39.35   Mean   :1.006                              
##  3rd Qu.: 53.00   3rd Qu.:1.000                              
##  Max.   :105.00   Max.   :3.000                              
##                                                              
##  tipo_de_contagio   ubicacion_del_caso    estado          codigo_iso_del_pais
##  Length:141072      Length:141072      Length:141072      Mode:logical       
##  Class :character   Class :character   Class :character   NA's:141072        
##  Mode  :character   Mode  :character   Mode  :character                      
##                                                                              
##                                                                              
##                                                                              
##                                                                              
##  nombre_del_pais  recuperado        fecha_de_inicio_de_sintomas     
##  Mode:logical    Length:141072      Min.   :2020-03-03 00:00:00.00  
##  NA's:141072     Class :character   1st Qu.:2020-12-14 00:00:00.00  
##                  Mode  :character   Median :2021-04-02 00:00:00.00  
##                                     Mean   :2021-03-24 11:57:51.41  
##                                     3rd Qu.:2021-06-13 00:00:00.00  
##                                     Max.   :2024-01-11 00:00:00.00  
##                                     NA's   :1988                    
##  fecha_de_muerte                  fecha_de_diagnostico            
##  Min.   :2020-03-27 00:00:00.00   Min.   :2020-03-25 00:00:00.00  
##  1st Qu.:2020-08-03 00:00:00.00   1st Qu.:2020-12-18 00:00:00.00  
##  Median :2021-04-09 00:00:00.00   Median :2021-04-12 00:00:00.00  
##  Mean   :2021-03-02 18:14:46.64   Mean   :2021-04-01 07:03:40.98  
##  3rd Qu.:2021-05-16 00:00:00.00   3rd Qu.:2021-06-23 00:00:00.00  
##  Max.   :2023-11-06 00:00:00.00   Max.   :2024-01-13 00:00:00.00  
##  NA's   :135883                   NA's   :414                     
##  fecha_de_recuperacion            tipo_de_recuperacion pertenencia_etnica
##  Min.   :2020-04-02 00:00:00.00   Length:141072        Min.   :1.000     
##  1st Qu.:2021-01-05 00:00:00.00   Class :character     1st Qu.:6.000     
##  Median :2021-04-21 00:00:00.00   Mode  :character     Median :6.000     
##  Mean   :2021-04-17 02:49:48.73                        Mean   :5.812     
##  3rd Qu.:2021-07-05 00:00:00.00                        3rd Qu.:6.000     
##  Max.   :2024-01-17 00:00:00.00                        Max.   :6.000     
##  NA's   :5062                                          NA's   :18        
##  nombre_del_grupo_etnico
##  Length:141072          
##  Class :character       
##  Mode  :character       
##                         
##                         
##                         
## 
faltantes <- data.frame(
  conteo = colSums(is.na(covid)),
  porcentaje = round(colMeans(is.na(covid))*100,2)
)

faltantes %>% arrange(desc(conteo))
##                              conteo porcentaje
## codigo_iso_del_pais          141072     100.00
## nombre_del_pais              141072     100.00
## nombre_del_grupo_etnico      136849      97.01
## fecha_de_muerte              135883      96.32
## fecha_de_recuperacion          5062       3.59
## tipo_de_recuperacion           5062       3.59
## fecha_de_inicio_de_sintomas    1988       1.41
## fecha_de_diagnostico            414       0.29
## pertenencia_etnica               18       0.01
## fecha_reporte_web                 0       0.00
## id_de_caso                        0       0.00
## fecha_de_notificacion             0       0.00
## codigo_divipola_departamento      0       0.00
## nombre_departamento               0       0.00
## codigo_divipola_municipio         0       0.00
## nombre_municipio                  0       0.00
## edad                              0       0.00
## unidad_de_medida_de_edad          0       0.00
## sexo                              0       0.00
## tipo_de_contagio                  0       0.00
## ubicacion_del_caso                0       0.00
## estado                            0       0.00
## recuperado                        0       0.00
ggplot(covid, aes(x=edad)) +
  geom_histogram(bins=40) +
  theme_minimal() +
  labs(title="Distribución de edad")

ggplot(covid, aes(y=edad)) +
  geom_boxplot() +
  theme_minimal() +
  labs(title="Boxplot edad")

covid <- covid %>%
  mutate(fecha_de_inicio_de_sintomas = dmy(fecha_de_recuperacion))
## Warning: There was 1 warning in `mutate()`.
## ℹ In argument: `fecha_de_inicio_de_sintomas = dmy(fecha_de_recuperacion)`.
## Caused by warning:
## ! All formats failed to parse. No formats found.
casos_tiempo <- covid %>%
  count(fecha_de_recuperacion)

ggplot(casos_tiempo, aes(x=fecha_de_recuperacion, y=n)) +
  geom_line() +
  theme_minimal() +
  labs(title="Casos en el tiempo")
## Warning: Removed 1 row containing missing values or values outside the scale range
## (`geom_line()`).

top_deptos <- covid %>%
  count(nombre_municipio) %>%
  arrange(desc(n)) %>%
  slice(1:12)

ggplot(top_deptos, aes(x=reorder(nombre_municipio,n), y=n)) +
  geom_col() +
  coord_flip() +
  theme_minimal() +
  labs(title="Top departamentos")

num_vars <- covid %>% select(where(is.numeric))

corr_matrix <- cor(num_vars, use="complete.obs")
## Warning in cor(num_vars, use = "complete.obs"): La desviación estándar es cero
corrplot(corr_matrix, method="color")