You are on page 1of 7

5 librerías de R para la limpieza y

exploración de datos
23 JUNIO, 2017

En todo proyecto de ciencia de datos, la limpieza y el análisis exploratorio de estos


resultan de vital importancia para las siguientes etapas del mismo. De hecho, solo
el preprocesado de los datos representa entre un 70 y un 80% de todo el trabajo.
Hablamos de tareas como la corrección de codificaciones y tipos de datos erróneos,
trasformaciones de los datos o la detección y manejo adecuado de datos anómalos
y faltantes.

Una vez se han llevado a cabo los procedimientos de limpieza de datos y estos son
consistentes, resulta necesario realizar un análisis de los mismos por medio de
distintos estadísticos y gráficos que permitan describir las variables con las que se
trabaja y determinar las posibles relaciones entre ellas. La calidad del conjunto de
datos finalmente obtenido determinará la robustez y fiabilidad de los resultados del
proyecto.

En R disponemos de diversas librerías que facilitan todas estas tareas. Vamos a


describir algunas de las más útiles.

stringr
Contiene funciones con las que manipular cadenas de caracteres que sirven, por
ejemplo, para resolver problemas en la codificación de variables categóricas. Entre
sus muchas funciones, algunas de ellas nos permiten:
– eliminar espacios en blanco en cualquiera de los lados de las cadenas

library(stringr)

sexo <- c(“mujer “, “hombre”, ” hombre “, “mujer”, ” mujer”,


“hombre “) str_trim(string = sexo, side = “both”) >
“mujer” “hombre” “hombre” “mujer” “mujer” “hombre”
– dividir las cadenas de caracteres según un patrón, pudiendo indicar el número de
bloques en los que hacerlo

fecha <- c(“05/01/2008”)

str_split(string = fecha, pattern = “/”)

> “05” “01” “2008”

str_split_fixed(string = fecha, pattern = “/” , n =2)

> “05” “01/2008”


– extraer fragmentos de una cadena que corresponden a un determinado patrón

edad <- c(“20 años”, “43 años”, “31 años”, “25 años”)

patron <- “[0-9]+” #uno o más números

str_extract(string = edad, pattern = patron)

> “20” “43” “31” “25”


lubridate
Con esta librería resulta muy sencillo trabajar con fechas y horas. Nos permite
convertir cadenas de caracteres al formato de fecha POSIXct, reconociendo
distintos formatos. Veamos algunos ejemplos:
– Año, mes y día separados por guiones o barras

library(lubridate)

fechas <- c(“2017-05-03”, “2017/05/03”)

ymd(fechas)

> “2017-05-03” “2017-05-03”


– Día, mes y año sin separación o incluso escritos (en inglés)

fechas <- c(“03052017”, “3 May 2017”)

dmy(fechas)

> “2017-05-03” “2017-05-03”


– Fechas y horas, pudiendo indicar la zona horaria

ymd_hms(“2017-05-03 09:00:00”, tz = “Europe/Madrid”)

> “2017-05-03 09:00:00 CEST”


tidyr y dplyr
Gracias a estas librerías podemos manipular los datos cuando estos se disponen en
forma de tablas. tidyr proporciona diversas funciones con las que podemos
convertir las filas en columnas y viceversa, dividir una columna en varias o juntar
distintas columnas en una.
Por ejemplo imaginemos que tenemos una columna en nuestros datos como la
siguiente:
Podemos separarla en dos columnas, una para el valor de la medida y otra para las
unidades, y eliminar la columna original.

library(tidyr)

separate(data = datos, col = medida, into = c(“longitud”,


“unidades”), sep = ” “, remove = TRUE)

Por otro lado, dplyr dispone de funciones con las que seleccionar las columnas que
nos interesan según diversos criterios (letra con la que comienza el nombre de la
variable, patrón contenido en este, etc.), filtrar las filas y solo tomar aquellas para
las cuales los valores de una o más variables cumplen determinadas condiciones,
ordenar las filas y agruparlas en función del valor que tomen para una determinada
variable o crear nuevas variables a partir de las existentes. Además también
podemos calcular estadísticos como la media o la varianza de cada una de las
variables fácilmente.
A modo de ejemplo, con el conjunto de datos iris disponible en R, que cuenta con
150 medidas de 3 especies diferentes de iris, filtramos las filas conservando
aquellas en las que la longitud de los sépalos es superior a 5 y las ordenamos por
dicha longitud:
library(dplyr)

data(iris)
iris.filt.ord <- iris %>% filter(Sepal.Length > 5) %>%
arrange(Sepal.Length)
head(iris.filt.ord)

También podemos por ejemplo, calcular la media y la varianza en la longitud de


los pétalos agrupando los datos por especie.

iris %>% group_by(Species) %>% summarise(media =


mean(Petal.Length), varianza = var(Petal.Length))

Aquí podemos consultar un resumen de las funciones de estas librerías.


ggplot2
Para visualizar los datos ggplot2 nos ofrece la posibilidad de crear una gran
cantidad de gráficos, como scatter plots, gráficos de barras, boxplots o
histogramas entre otros muchos. Se basa en ir añadiendo capas en las que se van
especificando los distintos parámetros del gráfico: datos a representar, colores,
formas geométricas, transformaciones de tipo estadístico aplicadas a los datos,
escala en cada uno de los ejes o sistema de coordenadas.
Por ejemplo, para el conjunto de datos anterior, representamos un boxplot de la
longitud de los pétalos para cada una de las especies de iris.
library(ggplot2)

ggplot(datos, aes(x = Species, y = Petal.Length)) + geom_boxplot()


En el conjunto de datos Arthritis de la librería vcd se recoge el grado de mejoría de
pacientes con artritis y si estos tomaron placebo o tratamiento. Podemos
representar un gráfico de barras en el que para cada tipo de tratamiento se muestre
el porcentaje de pacientes con cada grado de mejoría, calculando previamente
dicho porcentaje.
library(vcd)

library(dplyr)

data(Arthritis)

datos <-Arthritis %>% group_by(Treatment,Improved) %>%


summarise(count=n()) %>% mutate(perc=count/sum(count))

cortes<- c(0, 0.25, 0.5, 0.75, 1)

ggplot(datos, aes(x = Improved, y = perc, fill = Treatment)) +


geom_bar(stat=”identity”, position = “dodge”, width = 0.7) +
labs(y = “Porcentaje”) + theme_minimal(base_size = 12) +
scale_y_continuous(breaks = cortes, labels =
scales::percent(cortes))

De nuevo está disponible un resumen que puede resultar de gran ayuda.


 Ana Arcón