Tópicos de análisis exploratorio a través de R
Juan Manuel Fernandez
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:
Iris: 150 instancias de flores de la planta iris en sus variedades:
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")
Podemos cargar el dataset de, al menos, dos maneras:
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…
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:
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 ...
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
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:
También nos interesa la relación entre las variables:
Entre las medidas de posición mas conocidas se encuentran:
Media aritmética:
mean(iris$Sepal.Length)
[1] 5.843333
Media truncada: (Elimina outliers)
mean(iris$Sepal.Length, 0.05)
[1] 5.820588
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
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
Para variables discretas:
pie(table(iris$Species), main="Cantidad de flores por especie")
barplot(table(iris$Species), xlab = "Especie", ylab = "Frecuencia", ylim = c(0, 60), main="Cantidad por especie")
Para variables continuas: Histogramas
hist(iris$Sepal.Length, main = "Histograma del largo del sepalo", xlab = "Largo del sépalo", ylab = "Frecuencia")
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
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:
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
Diagramas de Cajas: Brindan informacion sobre
boxplot(iris$Sepal.Length ~ iris$Species, main = "Largo del sépalo por especie", xlab="Variedad de flor", ylab="Largo del sepalo")
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")
pairs(iris[,1:4],col=iris$Species, labels = names(iris)[1:4])
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
Para estudiar las relaciones entre variables, podemos utilizar:
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)")
Gráfico de coordenadas paralelas:
library(MASS)
parcoord(iris[1:4], col=iris$Species,var.label=T)
isSetosa <- ifelse(iris$Species=="setosa","red","grey")
parcoord(iris[1:4], col=isSetosa)