sábado, 5 de septiembre de 2015

Análisis exploratorio de datos en R

Dentro de las actividades de análisis de datos, está el análisis exploratorio de los datos fuente. Datos fuente que se utilizarán en diferentes tipos de procesos: integración de datos, reporting, modelos predictivos, etc..

Dicho análisis se basa en gráficos y estadísticos que permiten explorar la distribución identificando características tales como: valores atípicos o outliers, saltos o discontinuidades, concentraciones de valores, forma de la distribución, etc...

Es un paso básico y necesario en lo que llamamos data science y en general muchas actividades relacionadas con el análisis y tratamiento avanzado de datos.




El lenguaje estadístico R dispone de una gran cantidad de funciones y utilidades que facilitan este trabajo.  A continuación listamos algunas de las más importantes y útiles con ejemplos. Los pasos del ejemplo se basan en un dataset creado en el paso inicial, lo cual facilita su reproducción.


# Análisis exploratorio

# dataset de ejemplo: dataf

producto <- sample(c("P1","P2","P3","P4","P5","P6"), 1000, replace=TRUE, 
               prob=c(0.2,0.3,0.2,0.1,0.1,0.1))

centro <- character()

for (i in 1:1000){
  centro[i] <- paste("C", sample(1:50,1), sep="")
}

ventas <- round(rnorm(1000, mean=20, sd=5), digits=2)

fecha <- rep(as.Date("2015/1/1"),1000)
for (i in 1:1000){
  fecha[i] <- fecha[i] + sample(1:200,1)
}


dataf <- data.frame(producto=producto,centro=centro,
                    fecha=fecha, ventas=ventas)

# resumen del tipo de datos
str(dataf)

# primeros 10 regs
muestra1 <- head(dataf,10)

# ultimos 10 regs
muestra2 <- tail(dataf,10)

# Obtener una muestra de 20 regs
muestra3 <- dataf[sample(1:nrow(dataf),20),]

# Valores únicos
unique(dataf$producto)

# tablas de frecuencia

table(dataf$producto)
pie(table(dataf$producto)) # gráfico de tarta
table(dataf$centro)

# Divide en tramos un valor numérico y hace un conteo
table(cut(dataf$venta, breaks=5))

# Valores medios
mean(dataf$ventas)

# Desviación estandar
sd(dataf$ventas)

# percentiles

quantile(dataf$ventas, 0.95) # valor por debajo del cual están el 95% de los valores

quantile(dataf$ventas, 0.50) # valor por debajo del cual están el 50% de los valores

quantile(dataf$ventas, 0.25) # valor por debajo del cual están el 25% de los valores

quantile(dataf$ventas, 0.05) # valor por debajo del cual están el 5% de los valores

# resumen de una columna (perfilado):
summary(dataf$ventas)

# Rango de valores
range(dataf$ventas)

# Varianza
var(dataf$ventas)

# Rango intercuartilico
IQR(dataf$ventas) # distancia entre cuartiles 25 y 75
quantile(dataf$ventas, 0.25)
quantile(dataf$ventas, 0.75)


# Histrograma
hist(dataf$ventas)

# Boxplot
boxplot(dataf$ventas)

dataf1 <- dataf

#Detección Valores nulos

nulos <- which(is.na(dataf1)==TRUE)  

# Ejemplos de correlación en base a dos columnas nuevas creadas en el dataset: ventas2 y ventas3

dataf$ventas2 <- round(rnorm(1000, mean=15, sd=3), digits=2)

cor(dataf$ventas, dataf$ventas2)

dataf$ventas3 <- dataf$ventas + runif(1000,0,10)

cor(dataf$ventas, dataf$ventas3)




No hay comentarios:

Publicar un comentario