Restricciones de tipos de datos

Limpieza de datos en R

Maggie Matsui

Content Developer @ DataCamp

Esquema del curso

Servidor con lupa y «diagnosticar datos sucios»

Limpieza de datos en R

Esquema del curso

Servidor con un bicho y «efectos secundarios de datos sucios»

Limpieza de datos en R

Esquema del curso

Base de datos redonda con escoba y destellos para datos limpios

Limpieza de datos en R

Esquema del curso

Diagnosticar datos sucios, efectos de datos sucios y limpiar datos sucios

Capítulo 1: Problemas de datos comunes

Limpieza de datos en R

¿Por qué necesitamos datos limpios?

 

Flujo de trabajo de ciencia de datos: acceder a datos, explorar y procesar, extraer conclusiones, informar conclusiones

Limpieza de datos en R

¿Por qué necesitamos datos limpios?

 

Error humano y técnico

Limpieza de datos en R

¿Por qué necesitamos datos limpios?

 

Los errores se propagan por el flujo de trabajo

Limpieza de datos en R

Restricciones de tipos de datos

Tipo de dato Ejemplo
Texto Nombre, apellidos, dirección, ...
Entero Nº de suscriptores, nº de productos vendidos, ...
Decimal Temperatura, tipo de cambio, ...
Binario Está casado, cliente nuevo, sí/no, ...
Categoría Estado civil, color, ...
Fecha Fechas de pedido, fecha de nacimiento, ...
Tipo en R
character
integer
numeric
logical
factor
Date
Limpieza de datos en R

Ojear los tipos de datos

sales <- read.csv("sales.csv")
head(sales)
  order_id revenue quantity
1     7432   5,454      494
2     7808   5,668      334
3     4893   4,062      259
4     6107   3,936       15
5     7661   1,067      307
6     5908   6,635      235
library(dplyr)
glimpse(sales)
Observations: 100
Variables: 3
$ order_id <dbl> 7432, 7808, ...
$ revenue  <chr> "$5454", "$5668", ...
$ quantity <dbl> 494, 334, ...
Limpieza de datos en R

Comprobar tipos de datos

is.numeric(sales$revenue)
FALSE
library(assertive)
assert_is_numeric(sales$revenue)
Error: is_numeric : sales$revenue is not of class 'numeric'; it has class 'character'.
assert_is_numeric(sales$quantity)


Limpieza de datos en R

Comprobar tipos de datos

Comprobación lógica: devuelve TRUE/FALSE

  • is.character()
  • is.numeric()
  • is.logical()
  • is.factor()
  • is.Date()
  • ...

Comprobación con assertive: genera error si es FALSE

  • assert_is_character()
  • assert_is_numeric()
  • assert_is_logical()
  • assert_is_factor()
  • assert_is_date()
  • ...
Limpieza de datos en R

¿Por qué importa el tipo de dato?

class(sales$revenue)
"character"
mean(sales$revenue)
NA
Warning message:
In mean.default(sales$revenue) :
  argument is not numeric or logical: returning NA
Limpieza de datos en R

Problemas con comas

sales$revenue
"5,454" "5,668" "4,062" "3,936" "1,067" ...

Limpieza de datos en R

De carácter a número

library(stringr)
revenue_trimmed = str_remove(sales$revenue, ",")

revenue_trimmed
"5454" "5668" "4062" "3936" "1067" ...
as.numeric(revenue_trimmed)
5454 5668 4062 3936 1067 ...
Limpieza de datos en R

Integrarlo todo

sales %>%
  mutate(revenue_usd = as.numeric(str_remove(revenue, ",")))
# A tibble: 100 x 4
   order_id revenue quantity revenue_usd
      <dbl> <chr>      <dbl>       <dbl>
 1     7432 5,454        494        5454
 2     7808 5,668        334        5668
 3     4893 4,062        259        4062
 4     6107 3,936         15        3936
 5     7661 1,067        307        1067
# ... with 95 more rows
Limpieza de datos en R

Misma función, resultados distintos

mean(sales$revenue)
NA
Warning message:
In mean.default(sales$revenue) :
  argument is not numeric or logical: returning NA
mean(sales$revenue_usd)
5361.4
Limpieza de datos en R

Convertir tipos de datos

  • as.character()
  • as.numeric()
  • as.logical()
  • as.factor()
  • as.Date()
  • ...
Limpieza de datos en R

Ojo: de factor a numérico

product_type
1000 1000 3000 2000 3000
Levels: 1000 2000 3000
class(product_type)
"factor"
as.numeric(product_type)
1 1 3 2 3
as.numeric(as.character(product_type))
1000 1000 3000 2000 3000
Limpieza de datos en R

¡Vamos a practicar!

Limpieza de datos en R

Preparing Video For Download...