Este notebook fue construido en R Studio con R Markdown. Presenta una breve introducción al análisis de datos en R, con lo cual pretende ser una pequeña guía para iniciar el proceso de aprendizaje de esta gran herramienta.
¨R es una de las herramientas más usadas por la comunidad de cientificos de datos a nivel mundial, una de las grandes ventajas de R es que es software libre, por lo que se puede tener siempre instalada la última versión, para la instalación es necesario ir al repositorio cran: https://cran.r-project.org/ utilizando las opciones por defecto.
R install
A continuación, algunos temas y conceptos que son importantes para entender la temática y familiarizarse con la herramienta de análisis de datos R, uno de los lenguaje de programación y entorno computacional de código abierto más utilizado por la comunidad de científicos de datos, dedicado a la estadística, análisis de datos y machine learning, entre otros.
Un vector es la estructura de datos más sencilla en R. Un vector es una colección de uno o más datos del mismo tipo. Todos los vectores tienen tres propiedades:
5
## [1] 5
# Revisemos si es vector
is.vector(5)
## [1] TRUE
# ahora veamos la longitud
length(5)
## [1] 1
# vector numérico
altura = c(180, 175, 181, 165, 183, 174, 175, 166, 191, 155)
Peso = c(90, 80, 82, 65, 75, 70, 71, 60, 92, 62)
# vector cadena de texto o string
nombre = c("Carlos","Juan", "José", "Ana", "Maria", "Eduardo", "Natalia", "Paola", "Rodrigo", "Edna" )
Los data frames son estructuras de datos de dos dimensiones (rectangulares, filas y columnas) que pueden contener datos de diferentes tipos, por lo tanto, son heterogéneas. Esta estructura de datos es la más usada para realizar análisis de datos y seguro le resultará familiar si has trabajado con otros paquetes estadísticos.
Los datos son el componente clave en la ciencia de datos. Un conjunto de datos es una instancia particular de datos que se utiliza para el análisis o la construcción de modelos en un momento dado. Un conjunto de datos viene en diferentes tipos, como datos numéricos, datos categóricos, datos de texto, datos de imagen, datos de voz y datos de video. Un conjunto de datos puede ser estático (no cambia) o dinámico (cambia con el tiempo, por ejemplo, los precios de las acciones).
A continuación, se crea un DataFrame, tradicionalmente se demonina con las letras df. También se usarán varios comandos que ayudan a conocer la estructura de los datos, conocer las variables y tipos de datos que lo componen y algunas medidas de tendencia central.
# Unión de los vectores en un objeto tipo dataframe
df = data.frame(nombre, altura, Peso)
df
## nombre altura Peso
## 1 Carlos 180 90
## 2 Juan 175 80
## 3 José 181 82
## 4 Ana 165 65
## 5 Maria 183 75
## 6 Eduardo 174 70
## 7 Natalia 175 71
## 8 Paola 166 60
## 9 Rodrigo 191 92
## 10 Edna 155 62
# veamos las dimensiones
dim(df)
## [1] 10 3
# Veamos la estructura del dataframe
str(df)
## 'data.frame': 10 obs. of 3 variables:
## $ nombre: Factor w/ 10 levels "Ana","Carlos",..: 2 6 5 1 7 4 8 9 10 3
## $ altura: num 180 175 181 165 183 174 175 166 191 155
## $ Peso : num 90 80 82 65 75 70 71 60 92 62
# Veamos el resumen del dataframe
summary(df)
## nombre altura Peso
## Ana :1 Min. :155.0 Min. :60.00
## Carlos :1 1st Qu.:168.0 1st Qu.:66.25
## Edna :1 Median :175.0 Median :73.00
## Eduardo:1 Mean :174.5 Mean :74.70
## José :1 3rd Qu.:180.8 3rd Qu.:81.50
## Juan :1 Max. :191.0 Max. :92.00
## (Other):4
Una medida de tendencia central es un resumen de un número de los datos que generalmente describe el centro de los datos, hay tres tipos:
\[ Media = \frac {17,16,21,18,15,17,21,19,11,23}{10} = \frac{187}{10} =17.8 \]
Mediana: la mediana es el punto que divide todos los datos en dos mitades iguales. La mitad de los datos es menor que la mediana, y la otra mitad es mayor que la misma. La mediana se calcula organizando primero los datos en orden ascendente o descendente.
\[ Mediana = \frac {5^{ta} obs + 6^{ta}obs}{2} = \frac{17+18}{2} =17.5 \]
Las medidas de dispersión describen la difusión de los datos en torno al valor central (o las medidas de tendencia central)
\[ Varianza = \frac{1}{N} \sum_{i=1}^{N} \left ( x_{i} - \bar{x}\right )^{2} \]
\[ Desviación Estándar =\sqrt{ \frac{1}{N} \sum_{i=1}^{N} \left ( x_{i} - \bar{x}\right )^{2}} \]
\[ range = Maximun - Minumun \]
El método más utilizado para calcular la inclinación es:
\[ skenness = \frac{mean - median}{standard\; deviation}\]
Si la asimetría es cero, la distribución es simétrica. Si es negativo, la distribución estará sesgada negativamente y si es positiva, está sesgada positivamente.
Correlación entre variables “La Correlación es una técnica estadística usada para determinar la relación entre dos o más variables.”, puede ser de al menos dos variables o de una variable dependiente [Y] y dos o más variables independientes[X], denominada correlación múltiple.
Coeficiente de correlación El Coeficiente de Correlación es un valor cuantitativo de la relación entre dos o más variables, el cual puede variar desde -1.00 hasta 1.00. La correlación de proporcionalidad directa o positiva se establece con los valores +1.00 y de proporcionalidad inversa o negativa, con -1.00. No existe relación entre las variables cuando el coeficiente es de 0.00.
mean(df$altura)
## [1] 174.5
mean(df$Peso)
## [1] 74.7
# Incluyamos una etiqueta
Prom_alt <- mean(df$altura)
sprintf("Promedio de la altura: %g", Prom_alt)
## [1] "Promedio de la altura: 174.5"
Prom_peso <- mean(df$Peso)
sprintf("Promedio de la peso: %g", Prom_peso)
## [1] "Promedio de la peso: 74.7"
# mediana
median(df$altura)
## [1] 175
median(df$Peso)
## [1] 73
# rango
range(df$altura)
## [1] 155 191
range(df$Peso)
## [1] 60 92
# Desviación estándar
desv_st_altura = paste("Desviación estándar de altura es =",round(sd(df$altura)),2)
desv_st_altura
## [1] "Desviación estándar de altura es = 10 2"
desv_st_peso = paste("Desviación estándar del peso es =",round(sd(df$Peso)),2)
desv_st_peso
## [1] "Desviación estándar del peso es = 11 2"
# Veamos los estadísticos principales
summary(df)
## nombre altura Peso
## Ana :1 Min. :155.0 Min. :60.00
## Carlos :1 1st Qu.:168.0 1st Qu.:66.25
## Edna :1 Median :175.0 Median :73.00
## Eduardo:1 Mean :174.5 Mean :74.70
## José :1 3rd Qu.:180.8 3rd Qu.:81.50
## Juan :1 Max. :191.0 Max. :92.00
## (Other):4
hist(df$altura, main = "Histograma de la altura")
# Histograma de la variable peso
hist(df$Peso, main = "Histograma del peso")
# Gráfico de densidad de la variable altura
plot(density(df$altura), main = "Gráfico de densidad ", xlab = "Altura")
abline(v=mean(df$altura), col="red", lwd=2) # se incluye la linea con la media o promedio
abline(v=median(df$altura), col ="blue", lwd=2) # se incluye la linea con la mediana
# Gráfico de densidad de la variable peso
plot(density(df$Peso), main = "Gráfico de densidad ", xlab = "Peso")
abline(v=mean(df$Peso), col="red", lwd=2) # se incluye la linea con la media o promedio
abline(v=median(df$Peso), col ="blue", lwd=2) # se incluye la linea con la mediana
# Veamos un histograma y box plot en paralelo
par(mfrow=c(1,2))
boxplot(df$Peso)
hist(df$Peso)
# Realicemos un plot de las dos variables de interés
plot(df$altura, df$altura)
# Realicemos un plot de línea y puntos
plot(df$altura, df$altura, type = "o", col="red") # el parámetro type indica que queremos trazar la línea
En este ejercicio de introducción al análisis de datos en R, trabajaremos con un set de datos clasico, se trata de ISIS, el cual contiene 3 clases flores de 50 instancias cada una, donde cada clase se refiere a un tipo de planta de iris. El set de datos esta disponible en UCIrvine Machine Learning Repository.
El set de datos iris contiene las mediciones en centímetros de las variables longitud (Length) y ancho (Width) de los pétalos (Petal) y sépalos (Sepal) de 50 flores de cada una de las 3 especies (Species) del género Iris: Iris setosa, Iris versicolor e Iris virginica. Para obtener más información acerca de la base de datos iris tipea ?iris en la línea de comando de R.
Información general del data set:
petal width i(ancho del pétalo) en centímetros
# cargamos los datos
iris
## Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 1 5.1 3.5 1.4 0.2 setosa
## 2 4.9 3.0 1.4 0.2 setosa
## 3 4.7 3.2 1.3 0.2 setosa
## 4 4.6 3.1 1.5 0.2 setosa
## 5 5.0 3.6 1.4 0.2 setosa
## 6 5.4 3.9 1.7 0.4 setosa
## 7 4.6 3.4 1.4 0.3 setosa
## 8 5.0 3.4 1.5 0.2 setosa
## 9 4.4 2.9 1.4 0.2 setosa
## 10 4.9 3.1 1.5 0.1 setosa
## 11 5.4 3.7 1.5 0.2 setosa
## 12 4.8 3.4 1.6 0.2 setosa
## 13 4.8 3.0 1.4 0.1 setosa
## 14 4.3 3.0 1.1 0.1 setosa
## 15 5.8 4.0 1.2 0.2 setosa
## 16 5.7 4.4 1.5 0.4 setosa
## 17 5.4 3.9 1.3 0.4 setosa
## 18 5.1 3.5 1.4 0.3 setosa
## 19 5.7 3.8 1.7 0.3 setosa
## 20 5.1 3.8 1.5 0.3 setosa
## 21 5.4 3.4 1.7 0.2 setosa
## 22 5.1 3.7 1.5 0.4 setosa
## 23 4.6 3.6 1.0 0.2 setosa
## 24 5.1 3.3 1.7 0.5 setosa
## 25 4.8 3.4 1.9 0.2 setosa
## 26 5.0 3.0 1.6 0.2 setosa
## 27 5.0 3.4 1.6 0.4 setosa
## 28 5.2 3.5 1.5 0.2 setosa
## 29 5.2 3.4 1.4 0.2 setosa
## 30 4.7 3.2 1.6 0.2 setosa
## 31 4.8 3.1 1.6 0.2 setosa
## 32 5.4 3.4 1.5 0.4 setosa
## 33 5.2 4.1 1.5 0.1 setosa
## 34 5.5 4.2 1.4 0.2 setosa
## 35 4.9 3.1 1.5 0.2 setosa
## 36 5.0 3.2 1.2 0.2 setosa
## 37 5.5 3.5 1.3 0.2 setosa
## 38 4.9 3.6 1.4 0.1 setosa
## 39 4.4 3.0 1.3 0.2 setosa
## 40 5.1 3.4 1.5 0.2 setosa
## 41 5.0 3.5 1.3 0.3 setosa
## 42 4.5 2.3 1.3 0.3 setosa
## 43 4.4 3.2 1.3 0.2 setosa
## 44 5.0 3.5 1.6 0.6 setosa
## 45 5.1 3.8 1.9 0.4 setosa
## 46 4.8 3.0 1.4 0.3 setosa
## 47 5.1 3.8 1.6 0.2 setosa
## 48 4.6 3.2 1.4 0.2 setosa
## 49 5.3 3.7 1.5 0.2 setosa
## 50 5.0 3.3 1.4 0.2 setosa
## 51 7.0 3.2 4.7 1.4 versicolor
## 52 6.4 3.2 4.5 1.5 versicolor
## 53 6.9 3.1 4.9 1.5 versicolor
## 54 5.5 2.3 4.0 1.3 versicolor
## 55 6.5 2.8 4.6 1.5 versicolor
## 56 5.7 2.8 4.5 1.3 versicolor
## 57 6.3 3.3 4.7 1.6 versicolor
## 58 4.9 2.4 3.3 1.0 versicolor
## 59 6.6 2.9 4.6 1.3 versicolor
## 60 5.2 2.7 3.9 1.4 versicolor
## 61 5.0 2.0 3.5 1.0 versicolor
## 62 5.9 3.0 4.2 1.5 versicolor
## 63 6.0 2.2 4.0 1.0 versicolor
## 64 6.1 2.9 4.7 1.4 versicolor
## 65 5.6 2.9 3.6 1.3 versicolor
## 66 6.7 3.1 4.4 1.4 versicolor
## 67 5.6 3.0 4.5 1.5 versicolor
## 68 5.8 2.7 4.1 1.0 versicolor
## 69 6.2 2.2 4.5 1.5 versicolor
## 70 5.6 2.5 3.9 1.1 versicolor
## 71 5.9 3.2 4.8 1.8 versicolor
## 72 6.1 2.8 4.0 1.3 versicolor
## 73 6.3 2.5 4.9 1.5 versicolor
## 74 6.1 2.8 4.7 1.2 versicolor
## 75 6.4 2.9 4.3 1.3 versicolor
## 76 6.6 3.0 4.4 1.4 versicolor
## 77 6.8 2.8 4.8 1.4 versicolor
## 78 6.7 3.0 5.0 1.7 versicolor
## 79 6.0 2.9 4.5 1.5 versicolor
## 80 5.7 2.6 3.5 1.0 versicolor
## 81 5.5 2.4 3.8 1.1 versicolor
## 82 5.5 2.4 3.7 1.0 versicolor
## 83 5.8 2.7 3.9 1.2 versicolor
## 84 6.0 2.7 5.1 1.6 versicolor
## 85 5.4 3.0 4.5 1.5 versicolor
## 86 6.0 3.4 4.5 1.6 versicolor
## 87 6.7 3.1 4.7 1.5 versicolor
## 88 6.3 2.3 4.4 1.3 versicolor
## 89 5.6 3.0 4.1 1.3 versicolor
## 90 5.5 2.5 4.0 1.3 versicolor
## 91 5.5 2.6 4.4 1.2 versicolor
## 92 6.1 3.0 4.6 1.4 versicolor
## 93 5.8 2.6 4.0 1.2 versicolor
## 94 5.0 2.3 3.3 1.0 versicolor
## 95 5.6 2.7 4.2 1.3 versicolor
## 96 5.7 3.0 4.2 1.2 versicolor
## 97 5.7 2.9 4.2 1.3 versicolor
## 98 6.2 2.9 4.3 1.3 versicolor
## 99 5.1 2.5 3.0 1.1 versicolor
## 100 5.7 2.8 4.1 1.3 versicolor
## 101 6.3 3.3 6.0 2.5 virginica
## 102 5.8 2.7 5.1 1.9 virginica
## 103 7.1 3.0 5.9 2.1 virginica
## 104 6.3 2.9 5.6 1.8 virginica
## 105 6.5 3.0 5.8 2.2 virginica
## 106 7.6 3.0 6.6 2.1 virginica
## 107 4.9 2.5 4.5 1.7 virginica
## 108 7.3 2.9 6.3 1.8 virginica
## 109 6.7 2.5 5.8 1.8 virginica
## 110 7.2 3.6 6.1 2.5 virginica
## 111 6.5 3.2 5.1 2.0 virginica
## 112 6.4 2.7 5.3 1.9 virginica
## 113 6.8 3.0 5.5 2.1 virginica
## 114 5.7 2.5 5.0 2.0 virginica
## 115 5.8 2.8 5.1 2.4 virginica
## 116 6.4 3.2 5.3 2.3 virginica
## 117 6.5 3.0 5.5 1.8 virginica
## 118 7.7 3.8 6.7 2.2 virginica
## 119 7.7 2.6 6.9 2.3 virginica
## 120 6.0 2.2 5.0 1.5 virginica
## 121 6.9 3.2 5.7 2.3 virginica
## 122 5.6 2.8 4.9 2.0 virginica
## 123 7.7 2.8 6.7 2.0 virginica
## 124 6.3 2.7 4.9 1.8 virginica
## 125 6.7 3.3 5.7 2.1 virginica
## 126 7.2 3.2 6.0 1.8 virginica
## 127 6.2 2.8 4.8 1.8 virginica
## 128 6.1 3.0 4.9 1.8 virginica
## 129 6.4 2.8 5.6 2.1 virginica
## 130 7.2 3.0 5.8 1.6 virginica
## 131 7.4 2.8 6.1 1.9 virginica
## 132 7.9 3.8 6.4 2.0 virginica
## 133 6.4 2.8 5.6 2.2 virginica
## 134 6.3 2.8 5.1 1.5 virginica
## 135 6.1 2.6 5.6 1.4 virginica
## 136 7.7 3.0 6.1 2.3 virginica
## 137 6.3 3.4 5.6 2.4 virginica
## 138 6.4 3.1 5.5 1.8 virginica
## 139 6.0 3.0 4.8 1.8 virginica
## 140 6.9 3.1 5.4 2.1 virginica
## 141 6.7 3.1 5.6 2.4 virginica
## 142 6.9 3.1 5.1 2.3 virginica
## 143 5.8 2.7 5.1 1.9 virginica
## 144 6.8 3.2 5.9 2.3 virginica
## 145 6.7 3.3 5.7 2.5 virginica
## 146 6.7 3.0 5.2 2.3 virginica
## 147 6.3 2.5 5.0 1.9 virginica
## 148 6.5 3.0 5.2 2.0 virginica
## 149 6.2 3.4 5.4 2.3 virginica
## 150 5.9 3.0 5.1 1.8 virginica
# veamos los 5 primeros datos
head(iris)
## Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 1 5.1 3.5 1.4 0.2 setosa
## 2 4.9 3.0 1.4 0.2 setosa
## 3 4.7 3.2 1.3 0.2 setosa
## 4 4.6 3.1 1.5 0.2 setosa
## 5 5.0 3.6 1.4 0.2 setosa
## 6 5.4 3.9 1.7 0.4 setosa
# Veamos los últimos 5 datos
tail(iris)
## Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 145 6.7 3.3 5.7 2.5 virginica
## 146 6.7 3.0 5.2 2.3 virginica
## 147 6.3 2.5 5.0 1.9 virginica
## 148 6.5 3.0 5.2 2.0 virginica
## 149 6.2 3.4 5.4 2.3 virginica
## 150 5.9 3.0 5.1 1.8 virginica
# Veamos los estadísticos principales
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
##
##
##
# veamos las dimensiones
dim(iris)
## [1] 150 5
# veamos el número de filas
nrow(iris)
## [1] 150
# veamos el número de variables
ncol(iris)
## [1] 5
# veamos el nombre de las variables
colnames(iris)
## [1] "Sepal.Length" "Sepal.Width" "Petal.Length" "Petal.Width" "Species"
#Tabla de frecuencias absoluctas
table(iris$Species)
##
## setosa versicolor virginica
## 50 50 50
# veamos las caracteríssticas del set de datos
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 ...
DE la misma forma en que trabajamos en una hoja de cálculo, frecuentemente necesitamos trabajar con un subconjunto de la tabla, para esto requerimos selecionar filas y/o columnas. Para este tipo de selecciones se usa el corchetes:
Cuando se trabaja con tablas los corchetes siempre tienen dos partes separadas por una coma [,]: - la que la precede se refiere a las filas [1:2,] - la que sigue hace referencia a las columnas [,c(1,2,4)]
# Selecionar las primeras 10 filas
iris[1:10,]
## Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 1 5.1 3.5 1.4 0.2 setosa
## 2 4.9 3.0 1.4 0.2 setosa
## 3 4.7 3.2 1.3 0.2 setosa
## 4 4.6 3.1 1.5 0.2 setosa
## 5 5.0 3.6 1.4 0.2 setosa
## 6 5.4 3.9 1.7 0.4 setosa
## 7 4.6 3.4 1.4 0.3 setosa
## 8 5.0 3.4 1.5 0.2 setosa
## 9 4.4 2.9 1.4 0.2 setosa
## 10 4.9 3.1 1.5 0.1 setosa
# Selección de las variables 3 y 4
iris[,3:4]
## Petal.Length Petal.Width
## 1 1.4 0.2
## 2 1.4 0.2
## 3 1.3 0.2
## 4 1.5 0.2
## 5 1.4 0.2
## 6 1.7 0.4
## 7 1.4 0.3
## 8 1.5 0.2
## 9 1.4 0.2
## 10 1.5 0.1
## 11 1.5 0.2
## 12 1.6 0.2
## 13 1.4 0.1
## 14 1.1 0.1
## 15 1.2 0.2
## 16 1.5 0.4
## 17 1.3 0.4
## 18 1.4 0.3
## 19 1.7 0.3
## 20 1.5 0.3
## 21 1.7 0.2
## 22 1.5 0.4
## 23 1.0 0.2
## 24 1.7 0.5
## 25 1.9 0.2
## 26 1.6 0.2
## 27 1.6 0.4
## 28 1.5 0.2
## 29 1.4 0.2
## 30 1.6 0.2
## 31 1.6 0.2
## 32 1.5 0.4
## 33 1.5 0.1
## 34 1.4 0.2
## 35 1.5 0.2
## 36 1.2 0.2
## 37 1.3 0.2
## 38 1.4 0.1
## 39 1.3 0.2
## 40 1.5 0.2
## 41 1.3 0.3
## 42 1.3 0.3
## 43 1.3 0.2
## 44 1.6 0.6
## 45 1.9 0.4
## 46 1.4 0.3
## 47 1.6 0.2
## 48 1.4 0.2
## 49 1.5 0.2
## 50 1.4 0.2
## 51 4.7 1.4
## 52 4.5 1.5
## 53 4.9 1.5
## 54 4.0 1.3
## 55 4.6 1.5
## 56 4.5 1.3
## 57 4.7 1.6
## 58 3.3 1.0
## 59 4.6 1.3
## 60 3.9 1.4
## 61 3.5 1.0
## 62 4.2 1.5
## 63 4.0 1.0
## 64 4.7 1.4
## 65 3.6 1.3
## 66 4.4 1.4
## 67 4.5 1.5
## 68 4.1 1.0
## 69 4.5 1.5
## 70 3.9 1.1
## 71 4.8 1.8
## 72 4.0 1.3
## 73 4.9 1.5
## 74 4.7 1.2
## 75 4.3 1.3
## 76 4.4 1.4
## 77 4.8 1.4
## 78 5.0 1.7
## 79 4.5 1.5
## 80 3.5 1.0
## 81 3.8 1.1
## 82 3.7 1.0
## 83 3.9 1.2
## 84 5.1 1.6
## 85 4.5 1.5
## 86 4.5 1.6
## 87 4.7 1.5
## 88 4.4 1.3
## 89 4.1 1.3
## 90 4.0 1.3
## 91 4.4 1.2
## 92 4.6 1.4
## 93 4.0 1.2
## 94 3.3 1.0
## 95 4.2 1.3
## 96 4.2 1.2
## 97 4.2 1.3
## 98 4.3 1.3
## 99 3.0 1.1
## 100 4.1 1.3
## 101 6.0 2.5
## 102 5.1 1.9
## 103 5.9 2.1
## 104 5.6 1.8
## 105 5.8 2.2
## 106 6.6 2.1
## 107 4.5 1.7
## 108 6.3 1.8
## 109 5.8 1.8
## 110 6.1 2.5
## 111 5.1 2.0
## 112 5.3 1.9
## 113 5.5 2.1
## 114 5.0 2.0
## 115 5.1 2.4
## 116 5.3 2.3
## 117 5.5 1.8
## 118 6.7 2.2
## 119 6.9 2.3
## 120 5.0 1.5
## 121 5.7 2.3
## 122 4.9 2.0
## 123 6.7 2.0
## 124 4.9 1.8
## 125 5.7 2.1
## 126 6.0 1.8
## 127 4.8 1.8
## 128 4.9 1.8
## 129 5.6 2.1
## 130 5.8 1.6
## 131 6.1 1.9
## 132 6.4 2.0
## 133 5.6 2.2
## 134 5.1 1.5
## 135 5.6 1.4
## 136 6.1 2.3
## 137 5.6 2.4
## 138 5.5 1.8
## 139 4.8 1.8
## 140 5.4 2.1
## 141 5.6 2.4
## 142 5.1 2.3
## 143 5.1 1.9
## 144 5.9 2.3
## 145 5.7 2.5
## 146 5.2 2.3
## 147 5.0 1.9
## 148 5.2 2.0
## 149 5.4 2.3
## 150 5.1 1.8
# Selección de un subconjunto
iris[1:10, 3:4] # primeras 10 filas y las variables 3 y 4
## Petal.Length Petal.Width
## 1 1.4 0.2
## 2 1.4 0.2
## 3 1.3 0.2
## 4 1.5 0.2
## 5 1.4 0.2
## 6 1.7 0.4
## 7 1.4 0.3
## 8 1.5 0.2
## 9 1.4 0.2
## 10 1.5 0.1
El Visual Analytics visualización de datos es una de las ramas más importantes de la ciencia de datos. Es una de potente herramienta para analizar y estudiar las relaciones entre diferentes variables, identificar patrones y tendencias. La visualización de datos (por ejemplo, diagramas de dispersión, gráficos de líneas, diagramas de barras, histogramas, qqplots, densidades suaves, diagramas de caja, diagramas de pares, mapas de calor, etc.) se puede utilizar para análisis descriptivos. Estos análisis son fundamentales para la selección de características.También es un excelente recurso para mostrar los resultados de los diferentes análisis de datos, o resultados de modelos analíticos, en últimas se puede ver como una de las mejores herramientas para transmitir un mensaje, algo en lo que fallan muchos, pues no tienen buenas habilidades para comunicar.
Es por esto que algunos expertos afirman que el visual analytics es más un arte que una ciencia.
# Histograma
hist(iris$Sepal.Width)
#Histograma personalizado
hist(iris$Sepal.Width, main = "Histograma de la anchura de los sépalos",
xlab = "anchura del sépalo", ylab = "frecuencia",
col = "steelblue")
# Gráfico de barras
barplot(table(iris$Species), col= "orange", main=" Gráfico de barras de Iris")
# gráfic boxplot
boxplot(iris$Sepal.Width ~ iris$Species, col = "darkolivegreen1",
main = "Especies de iris\nsegún la anchura del sépalo") # con \n se separa la línea
Un valor atípico es un punto de datos que es muy diferente del resto del conjunto de datos. Los valores atípicos son a menudo datos erróneos, por ejemplo, debido a un sensor averiado; experimentos contaminados; o error humano en el registro de datos. A veces, los valores atípicos podrían indicar algo real, como un mal funcionamiento en un sistema. Los valores atípicos son muy comunes y se esperan en grandes conjuntos de datos. Una forma común de detectar valores atípicos en un conjunto de datos es mediante un diagrama de caja.
#Gráfico circular
pie(table(iris$Species), main="Gráfico circular")
Nota: Consulte aquí la paleta de colores para R Colors in R
Cuando se dispone de múltiples variables y se quiere estudiar la relación entre todas ellas se recurre al cálculo de matrices con el coeficiente de correlación para cada par de variables, el análisis gráfico también es útil. En R existen diferentes funciones que permiten realizar este tipo de análisis, las diferencias entre ellas son el modo en que se representan gráficamente los resultados.
Se quiere estudiar la relación entre el tamaño de diferentes partes de las flores.
# Asignamos el dataframe a un objeto
data(iris)
#Selecionamos únicamente las variables numéricas
datos = iris[,c(1,2,3,4)]
head(datos)
## Sepal.Length Sepal.Width Petal.Length Petal.Width
## 1 5.1 3.5 1.4 0.2
## 2 4.9 3.0 1.4 0.2
## 3 4.7 3.2 1.3 0.2
## 4 4.6 3.1 1.5 0.2
## 5 5.0 3.6 1.4 0.2
## 6 5.4 3.9 1.7 0.4
#No se muestra la diagonal inferior ya que es lo mismo que la superior
round(cor(x = datos, method = "pearson"),2)
## Sepal.Length Sepal.Width Petal.Length Petal.Width
## Sepal.Length 1.00 -0.12 0.87 0.82
## Sepal.Width -0.12 1.00 -0.43 -0.37
## Petal.Length 0.87 -0.43 1.00 0.96
## Petal.Width 0.82 -0.37 0.96 1.00
# Veamos la distribución de los datos
library(psych)
multi.hist(x = datos, dcol = c("blue", "red"), dlty = c("dotted", "solid"),
main = "Distribución de los datos de IRIS")
La función corrplot() del paquete corrplot recibe como argumento la matriz de correlaciones generada por la función cor() y genera diferentes tipos de heatmaps mucho más visuales que la matriz numérica, esta función tiene varios parámetros que ayudan a personalizar los gráficos, se recomienda revisarla.
# Análisis gráfico de la correlación
library(corrplot)
## corrplot 0.84 loaded
corrplot(corr = cor(x = datos, method = "pearson"), method = "number")
# Otra opción de ver la correlación y la distribución de los datos
library(psych)
pairs.panels(x = datos, ellipses = FALSE, lm = TRUE, method = "pearson")
El anterior grafico es muy rico en información, ya que entre otros presenta el índice de correlación, muestra gráficos como los de dispersión, histogramas y curva de densidad, lo cual ayuda facilmente a identificar patrones, tendencias y relaciones entre las variables.
Nota: No se recomienda el uso de este recurso cuando se cuentan con más de 10 variables, ya que tiene un alto costo computacional y con más de 10 variables es muy díficil de leer.
# Una última opción
library(GGally)
## Loading required package: ggplot2
##
## Attaching package: 'ggplot2'
## The following objects are masked from 'package:psych':
##
## %+%, alpha
## Registered S3 method overwritten by 'GGally':
## method from
## +.gg ggplot2
ggpairs(iris, lower = list(continuous = "smooth"),
diag = list(continuous = "bar"), axisLabels = "none")
## Warning in check_and_set_ggpairs_defaults("diag", diag, continuous =
## "densityDiag", : Changing diag$continuous from 'bar' to 'barDiag'
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
Finalmente, se explica cómo se pueden exportar datos desde R, guardarlos en el equipo y cargar un archivo csv
# Exportar datos
write.csv(datos, "Datos.csv")
Nota: El set de datos se exporta con el nombre de “Datos.csv”, este archivo tipo csv queda guardado en el directorio activo donde está guardado el Script de R Markdown.
# Cargar datos desde el PC
datos_2 = read.csv("Datos.csv")
# Ver los primeros registros
head(datos_2)
## X Sepal.Length Sepal.Width Petal.Length Petal.Width
## 1 1 5.1 3.5 1.4 0.2
## 2 2 4.9 3.0 1.4 0.2
## 3 3 4.7 3.2 1.3 0.2
## 4 4 4.6 3.1 1.5 0.2
## 5 5 5.0 3.6 1.4 0.2
## 6 6 5.4 3.9 1.7 0.4
Nota: Para cargar los datos desde el PC se debe selecionar el directorio activo; para esto se pueden usar dos opciones:
setwd(“C:Users/mi_pc/Mis_documentos/Archivos de R”)
Ya has aprendido a manejar la herramienta de R con el IDE de R Studio, además, ya sabes:
Ahora es momento de prácticar por tu cuenta, recuerda que esto se apropia con la práctica, es por esto que el challenge es que selecciones un dataset de interes del sitio de Machine Learning Repository, donde en encontrarás conjuntos de datos que son muy estudiados y utilidados por la comunidad de cientificos de datos, el objetivo es que realices:
David Frichman: Autor, Consultor, Conferencista Internacional y miembro fundador de la Universidad Peruana de Ciencias Aplicadas (UPC)↩