Análisis Exploratorio de Datos

Tópicos de análisis exploratorio a través de R


Juan Manuel Fernandez

Sobre el enfoque

El análisis de datos exploratorio (EDA) tiene por objetivo identificar las principales características de un conjunto de datos mediante un número reducido de gráficos y/o valores.

Consiste en:

  • Medidas cuantitativas de resumen: Métricas que explican propiedades del dataset.
  • Visualización de datos: transformaciones a un formato visual que permita identificar las características y relaciones entre los elementos del dataset.

Sobre el dataset para la demostración

Iris: 150 instancias de flores de la planta iris en sus variedades:

  • Setosa,
  • Versicolor,
  • Virginica.

Las caracteristicas son:

data(iris)
names(iris)
[1] "Sepal.Length" "Sepal.Width"  "Petal.Length" "Petal.Width"  "Species"     

pie(table(iris$Species), main="Cantidad por especie")

plot of chunk unnamed-chunk-2


Empezamos: Cargando el dataset

Podemos cargar el dataset de, al menos, dos maneras:

  • Gráfica

plot of chunk unnamed-chunk-3

  • Por Código
library(readr)
getwd()
[1] "C:/Users/unlu/Documents/GitHub/dm-uba/2021/laboratorios/LAB01/presentacion"
# con setwd() seteo el directorio
iris <- read_csv("/home/juan/data/iris.csv")


Los datasets serán contenidos en un dato de tipo Data.Frame…

Conociendo el dataset... y los datos!

Deciamos que para describir un dataset se analizan sus variables y las relaciones entre ellas.

Nos interesa la distribución de la variable, que está determinada por los valores que toma esa variable y la frecuencia con la que los toma. A tener en cuenta:

  • Posición,
  • Dispersión,
  • Forma.

    Vemos los tipos de variables y un resumen de los valores:
str(iris)
'data.frame':   150 obs. of  5 variables:
 $ Sepal.Length: num  5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
 $ Sepal.Width : num  3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
 $ Petal.Length: num  1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
 $ Petal.Width : num  0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
 $ Species     : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...

Conociendo el dataset (++)

Vemos el objeto y sus instancias:

View(iris) # Instancias del dataset

Mas datos:

summary(iris)
  Sepal.Length    Sepal.Width     Petal.Length    Petal.Width   
 Min.   :4.300   Min.   :2.000   Min.   :1.000   Min.   :0.100  
 1st Qu.:5.100   1st Qu.:2.800   1st Qu.:1.600   1st Qu.:0.300  
 Median :5.800   Median :3.000   Median :4.350   Median :1.300  
 Mean   :5.843   Mean   :3.057   Mean   :3.758   Mean   :1.199  
 3rd Qu.:6.400   3rd Qu.:3.300   3rd Qu.:5.100   3rd Qu.:1.800  
 Max.   :7.900   Max.   :4.400   Max.   :6.900   Max.   :2.500  
       Species  
 setosa    :50  
 versicolor:50  
 virginica :50  



Ahora vamos a estudiar el dataset...

Decimos que nos interesa la distribución de la variable, que está determinada por los valores que toma esa variable y la frecuencia con la que los toma. Las herramientas son:

  • Posición: medidas de tendencia central y gráficos (torta, barras & histogramas),
  • Dispersión: medidas de dispersión (rangos, percentiles & desvío estandar) y gráficos (boxplot, scatterplot),
  • y en consecuencia su forma.

También nos interesa la relación entre las variables:

  • Asociación: medidas de asociación (correlación & covarianza) y gráficos (scatterplot & coordenadas paralelas)

Medidas de Posición

Entre las medidas de posición mas conocidas se encuentran:

  • Media aritmética: Valor promedio entre los valores observados.
  • Moda: Valor que mas se repite entre las observaciones.
  • Mediana: Valor que divide al medio a las observaciones.

plot of chunk unnamed-chunk-10

Medidas de Posición -Medidas Cuantitativas-

Media aritmética:

mean(iris$Sepal.Length)
[1] 5.843333

Media truncada: (Elimina outliers)

mean(iris$Sepal.Length, 0.05)
[1] 5.820588

Medidas de Posición -Medidas Cuantitativas- (++)

Mediana y Moda:

median(iris$Sepal.Length)
[1] 5.8
library(modeest)       #Cargar la libreria
mfv(iris$Sepal.Length)  #Calcular la moda de un atributo
[1] 5

Medidas de Posición -Medidas Cuantitativas- (+++)

Aplicando las medidas por especie:

aggregate(Petal.Length ~ Species, data=iris, FUN=median)
     Species Petal.Length
1     setosa         1.50
2 versicolor         4.35
3  virginica         5.55

Medidas de Posición -Análisis Gráfico-

Para variables discretas:

  • Gráfico de Torta
pie(table(iris$Species),  main="Cantidad de flores por especie")

plot of chunk unnamed-chunk-15

  • Gráfico de Barras
barplot(table(iris$Species), xlab = "Especie", ylab = "Frecuencia", ylim = c(0, 60), main="Cantidad por especie") 

plot of chunk unnamed-chunk-16

Medidas de Posición -Analisis Gráfico-


Para variables continuas: Histogramas

hist(iris$Sepal.Length, main = "Histograma del largo del sepalo", xlab = "Largo del sépalo", ylab = "Frecuencia")

plot of chunk unnamed-chunk-17

Medidas de Dispersión -Medidas Cuantitativas-

Estas medidas nos dicen que tan distintas o similares tienden a ser las observaciones respecto a un valor particular (medida de tendencia central).

Rango:

max(iris$Sepal.Length)-min(iris$Sepal.Length)
[1] 3.6
range(iris$Sepal.Length)
[1] 4.3 7.9

Varianza (sumatoria de las diferencias cuadraticas con respecto a la media) y Desvio estandar (raiz cuadrada):

var(iris$Sepal.Length)
[1] 0.6856935
sd(iris$Sepal.Length)
[1] 0.8280661

Medidas de Dispersión -Medidas Cuantitativas- (++)

Percentiles
El percentil k es un valor tal que el p% de las observaciones se encuentran debajo de este y el (100-k))% por encima del mismo.

Cuantil
Caso particular del concepto anterior donde:

  • Q1: k=25,
  • Q2: k=50,
  • Q3: k=75,
  • Q4: k=100.

quantile(iris$Sepal.Length,seq(0,1,0.1))
quantile(iris$Sepal.Length,seq(0,1,0.25))
  0%  25%  50%  75% 100% 
 4.3  5.1  5.8  6.4  7.9 

Medidas de Dispersión -Análisis Gráfico-

Diagramas de Cajas: Brindan informacion sobre

  • Posición y dispersión,
  • Simetría de la distribución,
  • Valores atípicos.

    plot of chunk unnamed-chunk-22

boxplot(iris$Sepal.Length ~ iris$Species, main = "Largo del sépalo por especie", xlab="Variedad de flor", ylab="Largo del sepalo")

plot of chunk unnamed-chunk-23

Medidas de Dispersión -Análisis Gráfico- (++)

Diagramas de dispersión: Muestran la dispersión de valores observados de acuerdo a dos variables.

plot(iris$Petal.Length, iris$Petal.Width,col=iris$Species, main="Largo del pétalo vs Ancho del pétalo", xlab = "Largo del pétalo", ylab = "Ancho de pétalo")

plot of chunk unnamed-chunk-24

pairs(iris[,1:4],col=iris$Species, labels = names(iris)[1:4])

plot of chunk unnamed-chunk-25

Medidas de Asociación -Medidas Cuantitativas-

Estas medidas son utilizadas para verificar como varía una variable con respecto a otra.

Podemos calcular la covarianza (dependiente de la escala de las variables)

cov(iris$Petal.Length,iris$Petal.Width)
[1] 1.295609

O el coeficiente de correlación de Pearson (normalizado)

cor(iris$Petal.Length,iris$Petal.Width)
[1] 0.9628654

Medidas de Asociación -Análisis Gráfico-

Para estudiar las relaciones entre variables, podemos utilizar:

  • Scatter Plot 2d y 3d (libreria scatterplot3d),
  • Gráfico de coordenadas paralelas,
  • Tablas de contingencia (variables discretas).

Scatter 3D:

library(scatterplot3d)
scatterplot3d(iris$Sepal.Length, iris$Sepal.Width, iris$Petal.Length, main="Gráfico de 3D", xlab = "Sepal Length (cm)", ylab = "Sepal Width (cm)", zlab = "Petal Length (cm)")

plot of chunk unnamed-chunk-29

Medidas de Asociación -Análisis Gráfico- (++)

Gráfico de coordenadas paralelas:

library(MASS)
parcoord(iris[1:4], col=iris$Species,var.label=T)

plot of chunk unnamed-chunk-30

isSetosa <- ifelse(iris$Species=="setosa","red","grey")
parcoord(iris[1:4], col=isSetosa)

plot of chunk unnamed-chunk-31