¿Qué es R?¶
R es un lenguaje de programación interpretado diseñado específicamente para el análisis estadístico y la manipulación de datos. Esta inspirado, y es en su mayor medida compatible, por el lenguaje de programación S desarrollado por AT&T. Es ampliamente utilizado en todos los campos donde se deben manipular datos, como ser: los negocios, la industria, el gobierno, la medicina, el ámbito académico, y demás.
¿Por qué utilizar R?¶
R cuenta con varias virtudes, como ser:
Es una implementación de dominio público del lenguaje estadístico S; y la plataforma R/S se ha convertido en el defecto dentro del círculo de los profesionales de la estadística.
Es comparable, y a menudo superior en funcionalidad a productos comerciales; ya sea en gráficas, variedad de operaciones, y algoritmos implementados.
Es multiplataforma, se encuentra disponible para los sistemas operativos Windows, Mac y Linux.
Además de proporcionar operaciones estadísticas, R es un lenguaje de programación de propósito general; es decir, que puede ser utilizado para automatizar análisis y crear nuevas funciones que amplíen las funcionalidades existentes.
Incorpora características encontradas en la programación orientados a objetos y funcional.
El sistema guarda los conjuntos de datos entre sesiones, por lo que no es necesario volver a cargar los datos cada vez que ingresamos. También guarda nuestro historial de comandos, lo que nos ahorra bastante tiempo y mejora la productividad.
Debido a que R es un software de código abierto, es fácil obtener ayuda de la comunidad de usuarios. Además, muchas nuevas funciones son aportadas por los usuarios, los cuales son prominentes estadísticos.
Si bien existe una pequeña curva de aprendizaje, ésta es bastante mínima en comparación con otros lenguajes y programas. Asimismo existe una enorme red de colaboradores que constantemente están creando nuevos paquetes que hacen que sea mucho más fácil aplicar todo tipo de técnicas y funciones para manipular y analizar nuestros datos con la ayuda de R.
¿Cómo obtengo R?¶
Para descargar R, deben dirigirse a CRAN, la red de archivos de R. CRAN se compone de un conjunto de servidores distribuidos en todo el mundo y se utiliza para distribuir R junto con sus paquetes.
RStudio¶
RStudio es un entorno de desarrollo integrado, o IDE, diseñado específicamente para la programación con R. RStudio hace que R sea más fácil de usar. Incluye un editor de código, herramientas de depuración y visualización. Si estas dando tus primeros pasos con R, RStudio hace la experiencia mucho más amigable.
Breve introducción a la programación con R¶
Ahora que ya tenemos una idea más clara de qué es R y su ecosistema, llegó el momento de adentrarnos en su interfaz y ver como podemos realizar algunas operaciones básicas de programación en este lenguaje.
Vectores¶
El tipo de dato más fundamental que vamos a encontrar en R son los vectores.
# creando un vector x
x <- c(1, 5, 7, 12, 13)
x
# los vectores son similares a las listas, podemos seleccionar solo
# algunos elementos. Los índices comienzan en 1 en lugar de 0.
x[2:4] # selecciona elementos 2 a 4
# El tamaño de un vector queda definido en su creación. Para agregar o
# eliminar elementos hay que reasignar el vector.
x <- c(x[1:3],99,x[4:5]) # inserta 99 entre el 7 y el 12
x
# Saber el tamaño del vector con length
length(x)
# Filtrar valores del vector menores a 13
x[x < 13]
# Podemos ver el tipo de datos del vector con mode
y <- c(1, 2, 'Pi')
mode(y)
mode(x)
Matrices¶
Una Matriz es un vector con dos atributos adicionales: el número de filas y el número de columnas.
# Creando la Matriz A utilizando matrix
A <- matrix(c(1,2,3,4),nrow=2,ncol=2)
A
# Seleccionando la fila 1
A[1,]
# Seleccionando la columna 2
A[,2]
# Matriz con datos ordenados por fila en lugar del comportamiento por defecto
# en columnas. Utilizamos byrow True
B <- matrix(c(1,2,3,4,5,6),nrow=2,byrow=T)
B
# Multiplicación de matrices.
A %*% B
# Multiplicación por escalar
B * 2
# Seleccionando múltiples columnas
B[,1:2]
# Creando una lista
r <- list(nombre="Raul", edad=35, soltero=T)
# Accediendo a los elementos de la lista
r$nombre
r$edad
r$soltero
# Agregando un elemento
r$ciudad <- "Buenos Aires"
r
# Accediendo a los indices con names
names(r)
Factores¶
Los Factores constituyen la base de muchas de las potentes operaciones que podemos realizar con R, incluyendo las realizadas sobre datos tabulares. La motivación para los factores proviene de la noción de variables nominales o categóricas en las estadísticas. Se caracteriza por dividir los datos en niveles o clases.
# Ejemplo de factores con 4 niveles
x <- c(4, 5, 12, 12, 5, 12, 4, 7)
y <- factor(x)
str(y)
Data Frame¶
El DataFrame es similar a una matriz, tiene una estructura bidimensional de filas y columnas. Sin embargo, difiere de una matriz en que cada columna puede tener un tipo de datos diferente. Por ejemplo, una columna puede consistir en números y otra columna puede tener una cadena de caracteres. En este sentido, así como las listas son los análogos heterogéneos de vectores en una dimensión, los DataFrame son los análogos heterogéneos de matrices para datos bidimensionales.
# Creando un DataFrame
nombres <- c("Raul","Ezequiel")
edades <- c(13,18)
d <- data.frame(nombres, edades)
d
str(d)
# Accediendo las columnas
d$edades
# Accediendo filas
d[1,]
# Para controlar los paquetes que se encuentran cargados
path.package()
# Para instalar paquetes
install.packages(c("outliers", "forecast"))
# Para cargar el paquete
library(forecast)
Librerías para Ciencia de datos¶
Bien, luego de este paseo por las principales estructuras de datos que podemos encontrar en R, llegó el momento de adentrarnos en el fascinante mundo de la ciencia de datos. Algunas de las librerías que se han vuelto sumamente útiles para analizar y manipular datos con R, son las siguientes:
Tidyverse¶
Una de las tareas más importantes en cualquier proceso de análisis de datos consiste en ordenarlos y darles una estructura. En general recibimos datos en crudo y debemos procesarlos para poder luego utilizarlos en nuestros modelos. Si de explorar, ordenar y analizar datos se trata el paquete tidiverse es fundamental. Este paquete incluye las librerías ggplot2, tibble, tidyr, readr, purrr, y dplyr; las cuales comparten una filosofía propia y están diseñados para trabajar naturalmente entre ellos. Veamos algunos ejemplos:
# importando librerías
library(tidyverse)
Aquí podemos ver los paquetes incluidos en el tidiverse: ggplot2, la popular librería de visualizaciones; tibble, que mejora los data.frames; tidyr, que nos permite redimensionar y agregar nuestros datos; readr, que nos proporcionar un método rápido y amigable para leer datos tabulares; purrr, que brinda las herramientas para un estilo de programación más funcional; y dplyr, para manipular los datos en memoria.
Comencemos con ggplot2, cuya gramática se puede resumir de la siguiente forma:
ggplot(data = <DATA>) +
<GEOM_FUNCTION>(
mapping = aes(<MAPPINGS>),
stat = <STAT>,
position = <POSITION>
) +
<COORDINATE_FUNCTION> +
<FACET_FUNCTION>
# Ejemplo tidyverse
# utiizando el dataset mpg incluido en ggplot2
head(mpg)
# Graficando los datos con ggplot
ggplot(data = mpg, mapping = aes(x = displ, y = hwy)) +
geom_point(mapping = aes(color = class)) +
geom_smooth()
# creando un diagrama de cajas
ggplot(data = mpg, mapping = aes(x = class, y = hwy)) +
geom_boxplot()
Ahora veamos como podemos manipular los datos con dplyr
# Ejemplo dplyr
# usando filter para encontrar los modelos de chevrolet de 8 cilindros.
(chev <- filter(mpg, cyl == 8, manufacturer == 'chevrolet'))
# filtrado más avanzado
filter(mpg, cyl %in% c(4, 6) & manufacturer == 'audi')
# Ordenar por year, class y manufacturer
head(arrange(mpg, year, class, manufacturer))
# Seleccinando columnas por nombre
head(select(mpg, year, class, manufacturer))
# sumariazando
summarise(mpg, displ_mean = mean(displ, na.rm = TRUE))
# Combinando con pipe para obtener la cuenta de modelos por año.
(chev <- group_by(mpg, manufacturer,year, model) %>%
select(manufacturer, model, year) %>%
summarise(count= n()) %>%
filter(manufacturer == 'chevrolet'))
Caret¶
A la hora de simplificar el proceso de Machine Learning, el paquete Caret puede sernos de gran ayuda. Este paquete nos ofrece una serie de herramientas para la construcción de modelos de Machine Learning en R. Caret nos proporciona herramientas esenciales para: la etapa de preparación de los datos, para dividir el conjunto de datos, seleccionar los principales atributos, y para evaluar los modelos. Veamos un pequeño ejemplo:
# Ejemplo de Caret para modelado
# utiizando el dataset mtcars incluido en ggplot2
head(mtcars)
# Diagrama de dispersión para ver la relación entre atributos mpg y wt
ggplot(data = mtcars, aes(x = wt, y = mpg)) +
geom_point()
# Parece existir una relación.
# construyendo el modelo con train
require(caret)
modelo.mtcars_lm <- train(mpg ~ wt
,mtcars
,method = "lm"
)
# Obteniendo los coeficientes de
# - pendiente
# - intercepcion
coef.itercep <- coef(modelo.mtcars_lm$finalModel)[1]
coef.pendiente <- coef(modelo.mtcars_lm$finalModel)[2]
coef.itercep
coef.pendiente
# Dibujando el modelo de regresión
ggplot(data = mtcars, aes(x = wt, y = mpg)) +
geom_point() +
geom_abline(slope = coef.pendiente, intercept = coef.itercep, color = "red")
Data.table¶
Si de organizar grandes volúmenes de datos de una manera intuitiva se trata, data.table es el paquete indicado. Esta librería nos extiende la estructura de datos del dataFrame para poder trabajar con archivos realmente extensos, y poder realizar operaciones de agregado, agrupado y uniones de una forma más sencilla. Veamos como trabajar con ella:
# Ejemplo data.table
library(data.table)
dt <- data.table(mtcars)
class(dt)
# calculando la media
dt[,mean(mpg)]
# media por am
dt[,mean(mpg),by=am]
# con renombre de columna
dt[,.(avg=mean(mpg)),by=.(am,cyl)]
# Contando el número de autos por cilindrada
dt[, .N, by=cyl]
# Los mejore 5 autos con la mejor MPG
head(dt[order(-mpg)],5)
Otras librerías que deberíamos conocer¶
E1071¶
Si lo que buscamos es trabajar con Máquinas de vectores de soporte, SVM; o con cualquiera de las principales funciones que podemos encontrar en las clases de probabilidad y estadística; entonces el paquete E1071 es exactamente lo que necesitamos.
randomForest¶
Para trabajar específicamente con modelos de Random Forest el paquete randomForest puede ser una buena opción; este paquete nos permite crear este tipo de modelos en forma muy sencilla.
rpart¶
El paquete rpart es una buena alternativa para trabajar con árboles de clasificaciones. Implementa los principales algoritmos para trabajar con este tipo de modelos.
nnet¶
Las redes neuronales han recibido mucha atención últimamente por sus habilidades para aprender las relaciones entre las variables. Representan una técnica innovadora para la adaptación de los modelo que no se basa en los supuestos convencionales necesarios por el modelado estándar; y que además pueden manejar muy eficazmente los datos multivariantes. Un gran paquete para trabajar con redes neuronales en forma muy sencilla es nnet.
igraph¶
Si lo que necesitamos es analizar y visualizar redes y grafos, el paquete igraph es la mejor opción. Este paquete nos proporciona una serie de rutinas altamente eficientes para visualizar y analizar las conexiones de las redes.
Outliers¶
Si lo que necesitamos es encontrar valores atípicos, entonces outliers es el paquete que debemos utilizar. Esta librería nos ofrece varias funciones y tests para poder identificar los valores atípicos.
Survival¶
Survival es un paquete que nos facilita la tarea de realizar análisis de supervivencia.
Forecast¶
Forecast proporciona métodos y herramientas para mostrar y analizar predicciones univariadas de series de tiempo, incluyendo el suavizado exponencial a través de modelos de espacios de estados y el modelado ARIMA automático.
Aquí concluye este artículo; obviamente el objetivo del mismo es solo presentar R y sus principales librerías para la ciencia de datos, dista mucho de ser un tutorial exhaustivo de como utilizar el lenguaje y existen muchas más librerías muy útiles que no fueron presentadas.
Los que quieran profundizar en el lenguaje pueden realizar los siguientes cursos: Programación Estadística con R o Data analysis with R. Asimismo, si les gusto este artículo, no duden en visitar mi blog relopezbriega.github.io!
Opiniones y comentarios son bienvenidos.
Saludos!
Este post fue escrito utilizando IPython notebook. Pueden descargar este notebook o ver su version estática en nbviewer.