Subimos nuestra base de datos a R con el siguiente commando:
setwd("C:/Users/billy/Documents/Education/Data mining/ESTA5504 class")
library(dplyr)
Poverty <- read.csv("Poverty.csv") # Dos filas fueron eliminadas en Excel
Poverty <- Poverty[ ,c(1, 56:66)] # Para seleccionar nuestras variables de interés (Country Name, 20111 - 2021)
glimpse(Poverty)
## Rows: 264
## Columns: 12
## $ Country.Name <chr> "Aruba", "Afganistán", "Angola", "Albania", "Andorra", "E…
## $ X2011 <dbl> NA, NA, NA, NA, NA, NA, NA, 0.7, 1.2, NA, NA, NA, 0.4, NA…
## $ X2012 <dbl> NA, NA, NA, 0.6, NA, NA, NA, 0.6, 0.8, NA, NA, NA, 0.6, N…
## $ X2013 <dbl> NA, NA, NA, NA, NA, NA, 0.0, 0.6, 1.7, NA, NA, NA, 0.3, N…
## $ X2014 <dbl> NA, NA, NA, 1.0, NA, NA, NA, 0.6, 1.4, NA, NA, 0.5, 0.2, …
## $ X2015 <dbl> NA, NA, NA, 0.1, NA, NA, NA, NA, 1.1, NA, NA, NA, 0.7, NA…
## $ X2016 <dbl> NA, NA, NA, 0.1, NA, NA, NA, 0.7, 1.1, NA, NA, 0.5, 0.7, …
## $ X2017 <dbl> NA, NA, NA, 0.4, NA, NA, NA, 0.4, 0.8, NA, NA, NA, 0.3, N…
## $ X2018 <dbl> NA, NA, 31.1, 0.0, NA, NA, 0.0, 0.8, 1.3, NA, NA, 0.5, 0.…
## $ X2019 <dbl> NA, NA, NA, 0.0, NA, NA, NA, 0.8, 1.0, NA, NA, NA, 0.6, N…
## $ X2020 <dbl> NA, NA, NA, 0.0, NA, NA, NA, 1.1, 0.4, NA, NA, NA, 0.7, N…
## $ X2021 <dbl> NA, NA, NA, NA, NA, NA, NA, 1.0, 0.5, NA, NA, NA, NA, NA,…
Primero, notamos que hay columnas con un porcentage de umbral muy alto (es decir, hay muchos NA’s – hay filas sin ningún dato). Segundo, para no tener esas filas en nuestra base de datos, crearemos un variable que contenga las filas en las que no se registran ningún dato y luego utilizaremos esa variable con la base de datos para eliminar esas filas.
delete <- rowSums(is.na(Poverty[,2:12])) # Variable que suma los NA's por fila
delete <- which(delete == 11)
Poverty <- Poverty[-delete, ] # Eliminando las filas donde no hay datos registrados
Country.Name <- Poverty$Country.Name # Variable para guardar el nombre.
View(Poverty)
Con el código anterior, hemos reducido significantemente el número de
observaciones en nuestra base de datos.
library(naniar)
PovertyYears <- Poverty[, 2:12]# Creamos una variable en base a los años
PovertyYears <- sapply(PovertyYears, impute_mean) # Queremos aplicar la media por filas
PovertyYears <- as.data.frame(PovertyYears)
Poverty <- cbind(Country.Name, PovertyYears)
View(Poverty)
No considero que este sea el mejor método de imputación de datos. Como podemos ver, los NA’s fueron sustituidos por la media de la fila. Porque por fila y no columna? Porque nos interesa obtener la media de el país (no la media del año – pues al hacer eso obtendrías la media calculada de todos los paises en ese año).
library(scales)
PovertyNormalized <- as.data.frame(apply(Poverty[, 2:12], 2, rescale)) # Rescaled applied to columns (2)
PovertyNormalized <- cbind(Country.Name, PovertyNormalized)
View(PovertyNormalized)
No es necesario normalizar la base de datos, pues los datos son pequeños en sí.
Ahora intentaremos de crear un gráfico interactivo con el paquete .
library(plotly)
library(tidyr)
Primero, transformaremos la base de datos (que esta en formato Wife-form) a una base de datos Long-form.
PovertyLongForm <- gather(Poverty, years, frequency, -Country.Name)
PovertyNormalizedLongForm <- gather(PovertyNormalized, years, frequency, -Country.Name)
Este formato, nos permitirá graficar la base de datos. La función toma la base de datos como su primer argumento, su segundo argumento (que llamamos years) toma todas las variables y el tercer argumento tomas las observaciones. Ahora, nosotros no queriamos incluir el nombre del país en years, por lo tanto lo excluimos.
DinamicPlot <- plot_ly(PovertyLongForm, x = ~frequency, y = ~Country.Name, color = ~years)
add_markers(DinamicPlot)
Aunque la tabla es difícil de visualizar, notamos que (en la mayoría) hay un decremento en el nivel de pobreza mundialmente.