Uniformidad

Limpieza de datos en R

Maggie Matsui

Content Developer @ DataCamp

Uniformidad

  • Unidades o formatos distintos
    • Temperatura: °C vs. °F
    • Peso: kg vs. g vs. lb
    • Dinero: USD $ vs. GBP £ vs. JPY ¥
    • Fecha: DD-MM-YYYY vs. MM-DD-YYYY vs. YYYY-MM-DD
Limpieza de datos en R

¿De dónde vienen los problemas de uniformidad?

A la izquierda, tres bases de datos con flechas hacia una tabla para representar múltiples orígenes. A la derecha, un cuadro de texto libre con un cursor y un ordenador con teclado para representar errores de entrada de datos.

Limpieza de datos en R

Detectar problemas de uniformidad

head(nyc_temps)
         date temp
1  2019-04-01  4.2
2  2019-04-02  7.5
3  2019-04-03 12.2
4  2019-04-04 11.1
5  2019-04-05 41.5
6  2019-04-06 11.9
Limpieza de datos en R

Detectar problemas de uniformidad

library(ggplot2)
ggplot(nyc_temps, aes(x = date, y = temp)) +
  geom_point()

Gráfico generado por código. Hay tres temperaturas claramente mucho más altas que el resto.

Limpieza de datos en R

¿Qué hacer?

  • No hay una única mejor opción. ¡Depende de tu conjunto de datos!
  • Investiga para entender de dónde vienen tus datos

Gráfico generado por código. Hay tres temperaturas claramente mucho más altas que el resto.

  • Los datos del 7, 16 y 23 de abril provienen de una fuente externa que midió en °F
Limpieza de datos en R

Conversión de unidades

$$\text{C} = (\text{F} - 32) \times \frac{5}{9}$$

ifelse(condition, value_if_true, value_if_false)

nyc_temps %>%
  mutate(temp_c = ifelse(temp > 50, (temp - 32) * 5 / 9, temp))
         date temp   temp_c
1  2019-04-01  4.2  4.20000
...
7  2019-04-07 58.5 14.72222
...
Limpieza de datos en R

Conversión de unidades

nyc_temps %>%
  mutate(temp_c = ifelse(temp > 50, (temp - 32) * 5 / 9, temp)) %>%
  ggplot(aes(x = date, y = temp_c)) +
    geom_point()

Gráfico generado por código; esta vez no hay valores atípicos claros porque se han convertido.

Limpieza de datos en R

Uniformidad de fechas

nyc_temps
             date temp_c
1      2019-11-23   5.12
2        01/15/19  -0.67
3  April 24, 2019  17.46
4        08/30/19  26.46
5 October 3, 2019  14.63
6      2019-03-17   3.47

 

Cadena de fecha Formato de Date
"2019-11-23" "%Y-%m-%d"
"01/15/19" "%m/%d/%y"
"April 24, 2019" "%B %d, %Y"

 

?strptime en la consola de R

Limpieza de datos en R

Analizar múltiples formatos

library(lubridate)
parse_date_time(nyc_temps$date,
                orders = c("%Y-%m-%d", "%m/%d/%y", "%B %d, %Y"))
"2019-11-23 UTC" "2019-01-15 UTC" "2019-04-24 UTC" "2019-08-30 UTC"
"2019-10-03 UTC" "2019-03-17 UTC"
parse_date_time("Monday, January 3",
                orders = c("%Y-%m-%d", "%m/%d/%y", "%B %d, %Y"))
NA
Limpieza de datos en R

Fechas ambiguas

¿02/04/2019 es febrero o abril?

  • ¡Depende de tus datos!

 

Opciones:

  • Tratar como faltante
  • Si tus datos vienen de varias fuentes, inferir según el origen
  • Inferir según otros datos del conjunto
Limpieza de datos en R

¡Vamos a practicar!

Limpieza de datos en R

Preparing Video For Download...