library(tidyverse)
## -- Attaching packages ------------------------- tidyverse 1.2.1 --
## v ggplot2 3.1.0 v purrr 0.2.5
## v tibble 1.4.2 v dplyr 0.7.7
## v tidyr 0.8.1 v stringr 1.3.1
## v readr 1.1.1 v forcats 0.3.0
## -- Conflicts ---------------------------- tidyverse_conflicts() --
## x dplyr::filter() masks stats::filter()
## x dplyr::lag() masks stats::lag()
library(ggplot2)
library(dplyr)
En general, se gasta mucho esfuerzo en la limpieza de datos (data) para prepararlos para el análisis en R: se calcula que un 80 por ciento del trabajo con data se destina a su limpieza y preparación para ser utilizada.
Aun así, ha habido poca investigación respecto a cómo hacer que la limpieza de datos sea lo más fácil y eficaz posible.
Una parte importante de la limpieza de datos es su ordenamiento. En ese sentido, una herramienta útil para poder manipular data de forma correcta y ordenada, es TIDY DATA.
“Tidy data” es uno de los paquetes incluidos en el programa R y si no la tienes en tus paquetes, puedes descargarla con la función install.packages(tidyverse)
Este paquete ordena de forma estandarizada los datos a través de sus funciones, facilitando la exploración inicial y análisis de los mismos. En inglés, se dice que el verbo tidying es “dar estructura a un conjunto de datos para facilitar su análisis.”
Porque los conjuntos de datos ordenados son fáciles de manipular, modelar y visualizar, y tienen una estructura específica: cada columna es una variable, cada fila es una observación y cada celda es un valor.
Aquí encontramos una tabla, que aun cuando nos entrega información, no lo hace con la estructura anteriormente mencionada:
#Variacion precio kilo de pan / desordenada
variacion_precio_pan <- tibble(
hallulla = c(850, 1000, 1200),
marraqueta = c(850, 850, 950),
pan_de_completo = c(1000, 1120, 1340),
tipo = c("normal", "normal", "amasado" )
)
La tabla anterior está desordenada porque el tipo no es una observación, sino que una variable. Entonces, para que quede ordenada utilizamos la función gather() del paquete tidy:
tidyr::gather(data = variacion_precio_pan,
key = "tipo_pan",
value = "variacion_precio")
En caso de que tuviéramos una variable más y que no quisiéramos ordenarla porque ya está ordenada, la restamos en nuestra “ecuación”, por ejemplo:
variacion_precio_pan_ord <- tidyr::gather(data = variacion_precio_pan,
key = "tipo_pan",
value = "variacion_precio",
- tipo)
Tal como muestra el ejemplo, le damos el nombre de Key a la variable que está desordenada en los nombres de las columnas, en este caso tipo de pan. Luego le damos el nombre de value a los valores que es la variacion de precio por el tipo de pan. Finalmente, le decimos a gather() que la columna tipo no tiene que ser modificada ya que esta columna sí es una variable, entonces utilizamos el signo - tipo para que no sea transformada.
Para visualizar
variacion_precio_pan_ord
Sin dudas, una mejor forma de manipular los datos, ya sea que queramos hacer gráficos o utilizar cualquier paquete de R.
Pero las herramientas o funciones de tidyverse son muchas más. De hecho, podemos realizar la tarea inversa a lo que hicimos anteriormente, es decir, distribuir un par o conjunto de valores en varias columnas.
Lo anterior podemos hacerlo con la función spread(). Podemos ejemplificar con nuestra propia data
Como podemos ver, la función spread hace lo contrario a gather. Estas son funciones opuestas complementarias, es decir, si al resultado de aplicar la función spread le aplicamos la función gather llegamos al data original. Otro en lo que hay que fijarse, es que estas funciones hacen lo opuesto en cuanto a la visualización de los datos de un data frame: gather los alarga, mientras que spread los hace más anchos.
////
toy <- as_tibble(matrix(rnorm(120), nrow = 12))
names(toy) <- paste("anho", 2009:2018, sep = "_")
(toy <- toy %>%
mutate(mes = 1:12) %>%
select(mes, everything()))
# gather() del paquete tidy
tidy_toy <- tidyr::gather(data = toy,
key = "anho",
value = "rentabilidad_bolsa",
-mes)
tidyr::spread(tidy_toy, key = "anho", value = "rentabilidad_bolsa")
tidy_toy <- tidyr::gather(data = toy,
key = "anho",
value = "rentabilidad_bolsa",
-mes)
Por ejemplo, para realizar una comparativa por el mismo mes a través de los años, se puede utilizar la función ‘arrange’-organizar- según las variables que se requieren, en ese caso, mes y anho.
tidy_toy %>% arrange(mes, anho)
Del mismo modo, con la herramienta group_by podemos agrupar los datos según un parámetro establecido, en este caso, posteriormente a filtrar por año -2009- agruparemos por rentabilidad positiva.
tidy_toy
tidy_toy2 <-
filter(tidy_toy, anho == "anho_2009")
Otra función que podemos utilizar es ‘group_by’, que en este caso la utilizaremos para agrupar la data por rentabilidad positiva y negativa, y de esta forma poder evaluar el desempeño comercial de la organización por mes.
tidy_toy3 <-
group_by(tidy_toy2, rentabilidad_bolsa > 0)
De la misma forma, la función ‘summarise’ permite analizar los datos de manera resumida. En el siguiente ejemplo, se extraen los promedios de rentabilidad anual de la organización.
summarise(tidy_toy2, mediana = median(rentabilidad_bolsa), variacion = var(rentabilidad_bolsa))