El Data Science con R y Rstudio se puede trabajar de forma muy sencilla. Son respectivamente el lenguaje y el IDE que he elegido para trabajar estos temas que tan en voga están ahora como el Machine Learning, Big Data o Data Science.
Índice de contenidos
- 1. La importancia de hacerse las preguntas clave
- 2. R y RStudio
- 2.1. Instalar R
- 2.2. Instalar RStudio
- 3. Leyendo un fichero CSV
- 4. Trabajando con un DataFrame
- 5. Guardando nuestro trabajo en ficheros RDS
- 6. Conclusiones
- Enlaces y referencias
1. La importancia de hacerse las preguntas clave.
Hace poco tiempo vi un concurso que me llamó mucho la atención. Se llamaba Zara Challange, y estaba organizado por la marca insignia del grupo Inditex. El concurso buscaba la respuesta a una pregunta muy pertinente, y el premio creo recordar que era incorporarse a la plantilla del grupo.
Lo que a mi me interesó de verdad era la pregunta: «¿Cuál será el producto más vendido al día siguiente?»
Te daban los datos de las ventas previas, y tenías que pronosticar cual iba a ser el resultado. Ese proceso, se iteraba tres días consecutivos. Y la búsqueda de ese resultado se me antojó que debía ser un juego divertidísimo. Pero además, recalé en lo pertinente de esa pregunta para cualquier empresa que se dedique a vender un producto.
Y me imaginé como me enfrentaría yo a ese problema. Las matemáticas en seguida vinieron en mi ayuda, y tiré de memoria. Lo primero que se me ocurrió fue pensar en hacer una aproximación por mínimos cuadrados, pero al rato recordé que había unos algoritmos de suavizamiento exponencial basados en series temporales, que servían precisamente para pronosticar la demanda de un producto. Y los busqué, y así fué como llegué al modelo de Holt-Winters y de Box-Jenkins.
Y me di cuenta que los problemas de programación a los que me enfrento cada día no suelen requerir de este tipo de conocimientos, y que por el desuso estaba perdiendo agilidad y necesitaba volver a refrescar estos temas.
Además, necesitaba una herramienta con la que poder aplicar este tipo de algoritmos, y los lenguajes que suelo usar Java y JavaScript no parecían los más apropiados. Así que decidí aprender R para utilizarlo en el refresco mis oxidadas matemáticas para aplicarlo en cuestiones de Machine Learning y es que el Data Science con R y Rstudio se puede trabajar de forma muy sencilla.
2. R y RStudio.
R es un lenguaje muy orientado al análisis estadístico. Viene muy preparado para trabajar com modelos lineales, algoritmos de clusterización (clasificación y agrupamiento), análisis de series temporales, etc… Además viene preparado para poder generar gráficas de los elementos con los que trabaja. El lenguaje se puede extender mediante librerías, y lo cierto, es que hay librerías para casi todo.
RStudio es un IDE que nos permite ejecutar R en un entorno visual para casi cualquier sistema operativo.
2.1. Instalar R
Lo podemos descargar de la página web oficial https://www.r-project.org/ y ahí nos vamos a la página de descargas que nos mostrará una serie de mirrors para que lo descargues. Yo como estoy en Madrid, elijo el de España, que apunta a https://cran.rediris.es/ Lo descargamos y lo instalamos sin más.
2.2. Instalar RStudio
Esto nos ha instalado el lenguaje R sin más. Pero es mucho más cómodo trabajar con un IDE. El que yo he elegido es RStudio que podemos descargar la licencia OpenSource de RStudio Desktop de https://www.rstudio.com/.
3. Leyendo un fichero CSV
Bien. Ya hemos instalado R y el IDE con el que vamos a trabajar. De momento, vamos a suponer que sabemos R, que el lenguaje es similar a cualquier otro que conocemos y que este IDE es parecido a cualquiera de los IDEs con los que trabajamos habitualmente. Abrimos el IDE, y en «file» creamos un nuevo script de R. Lo que necesitaremos a continuación es un conjunto de datos con el que jugar.
En internet hay infinidad de dataSets publicos para obtener datos con los que jugar con la finalidad de irnos familiarizando con R. Algunos relacionados con la zona donde vivo son:
- Datos Abiertos del Ayuntamiento de Madrid
- Catálogo de Información Pública (España)
- Comunidad de Madrid
- OpenData de ESRI España/
- y por supuesto el INE
El formato más habitual para trabajar será con un CSV. Muchas veces nos lo facilitarán y sólo tendremos que leerlo.
Vamos a fijar el directorio de trabajo con setwd (set working directory) que en este ejemplo apunta a una ruta local mía
setwd("/lab/adictosaltrabajo/RStudio/")
leemos el CSV, como esta separado por ; y no por , lo indicamos
data <- read.csv("./monumentos-ciudad-madrid.csv", header = T, sep = ";")
Vemos que el objeto data es un dataFrame de 1854 onservaciones con 30 variables. Podemos echar un vistazo a las 5 primeras filas con:
head(data)
Y vemos que es abrumador. Lo primero que vamos a aprender es a trabajar un poco con ese dataFrame.
4. Trabajando con un DataFrame
Supongamos que queremos la fila 5 y sólo las dos primeras columnas
data[5, c(1,2)]
data tiene dos coordenadas: la primera son las filas, y la segunda las columnas. Se puede definir conjuntos con la función c().
Por ejemplo, un conjunto del 1 al 5 sería c(1:5), o c(1,2,3,4,5). Fijaros que empieza en 1, y es que los vectores, arrays, matrices, etc… en R comienzan en 1.
También se podría hacer c(1:2,5,20:21,24:25).
Una vez dicho esto, vamos a quedarnos sólo con las columnas que nos interesan del dataFrame. Podríamos definir el conjunto por colName o por el id de la columna. Así que ambas fórmulas serían equivalentes:
#me quedo con todas las filas y un conjunto de nombres de columnas monumentos <- data[ , c("PK","NOMBRE","FECHA","BARRIO","DISTRITO","LATITUD","LONGITUD")] #me quedo con todas las filas y un conjunto de IDs de columnas monumentos2 <- data[ , c(1,2,5,20,21,24,25)]
Vemos que ambos son dataFrames de 1854 observaciones con 7 variables.
Pero ¿y si quisiéramos el resto del dataFrame con las 23 columnas restantes?
Sería suficiente con poner un «menos» delante del conjunto
monumentos3 <- data[ , -c(1,2,5,20,21,24,25)]
Esto nos devuelve un dataFrame de 1854 observaciones y 23 variables.
Una vez ya tenemos el objeto con el que vamos a trabajar, fijémonos en la naturaleza de las variables que hay en su interior: int, num y Factor… ¿y esto?
Bueno, esto es porque la función read.csv al leer los strings, por defecto los intenta convertir a factores. Es una especie de categorización de las cadenas de texto. Por ejemplo, en DISTRITOS tiene sentido que sean un factor. Porque hay 28 distintos y nos sirven para categorizar y clasificar. Pero en el NOMBRE del monumento, en el BARRIO, o en la FECHA, pues no tiene mucho sentido.
Además, hay ciertos valores molestos por en medio que muestran «NA». Esto es el equivalente a «nulo» de una columna en una BBDD. Significa Not Available, y sería conveniente quitarlos. La función read.csv trae parámetros para tratar ambas cosas. Le indicamos además que no nos convierta las cadenas de texto a factores.
data <- read.csv("./monumentos-ciudad-madrid.csv", header = T, sep = ";", stringsAsFactors = F) monumentos <- data[,c("PK","NOMBRE","FECHA","BARRIO","DISTRITO","LATITUD","LONGITUD")] monumentos <- na.omit(monumentos)
Aún así, hemos quitado los NA pero no algunos valores sin sentido. Echando un vistazo a los datos vemos que hay algunos BARRIOS o DISTRITOS sin nombre
monumentos <- monumentos[monumentos$BARRIO != "" & monumentos$DISTRITO != "" , ]
También me quiero quedar sólo con los que la fecha es exacta
monumentos <- monumentos[nchar(monumentos$FECHA)==4,]
5. Guardando nuestro trabajo en ficheros RDS
Echamos un vistazo al dataframe y efectivamente vemos que hay 1223 observaciones de 7 variables.
View(monumentos)
Una parte muy importante del científico de datos es limpiar el conjunto de datos y quedarse sólo con una parte muy representativa.
Y limpiar de la memoria las variables que no usemos.
data <- NULL monumentos2 <- NULL monumentos3 <- NULL
Ahora, al haber leido el fichero con stringsAsFactors = F, todos los strings se han considerado como cadenas de texto en lugar de categorías. Es muy posible que quisiéramos manipular los distritos como categorías y convertirlos por tanto a factores.
#Y los distritos los categorizamos como factores (hay 26 categorías) monumentos$DISTRITO <- factor(monumentos$DISTRITO) View(monumentos)
Ahora que ya hemos trabajado el conjunto de datos, nos conviene guardar el dataFrame como un objeto de R para poderlo recuperar más tarde o poder compartírselo a un compañero.
# Grabar un objeto a un fichero saveRDS(monumentos, file = "monumentos.rds") # Leer un objeto y cargarlo en memoria monumentos <- readRDS(file = "./monumentos.rds")
6. Conclusiones
Esto ha sido una toma de contacto muy somera con el Data Science con R y Rstudio. Hemos aprendido a leer ficheros CSV, a filtrar filas y columnas. A trabajar un poco el dataFrame limpiando valores extraños, quitando NAs, etc… Y a guardar un objeto en un fichero en memoria. Si nos damos cuenta, aún no hemos hecho nada con los datos que hemos obtenido. Esto lo presentaré en próximos artículos donde veremos que el Data Science con R y RStudio se puede trabajar de forma muy sencilla.
7. Enlaces y Referencias
- El código fuente de este tutorial en GitHub
https://github.com/eContento/rstudio - R Project
- RStudio
- Suavizamiento exponencial basado en series temporales
- Modelo de Holt-Winters
- Modelo de Box-Jenkins
Hola
Seria posible si hicieras un ejemplo de analisis de ventas para el mes siguiente de un producto ?
Vieras q eso realmente me urge.
Asi mismo como integrarlo a C#
Gracias
Hola Rodolfo,
Sí tenía pensado escribir uno sobre la previsión de venta. Pero estos artículos se enmarcan dentro de una serie de tutoriales que estoy haciendo sobre RStudio, donde por supuesto tienen cabida situaciones pragmáticas como la que comentas: detección de fraude, detección de patrones y análisis de ventas. Lo que no te puedo asegurar es cuando se publicará, porque quiero seguir un orden lógico, y hay un camino que recorrer hasta llegar a ese punto.
Un saludo