Inteligencia Analítica de Datos con R


logo

Msc. Roberto Trespalacios

Introducción al curso

  • Data Science, Data Mining, Business Intelligence, Machine Learning, Modeling y Predicting, son términos comúnmente referenciados cuando se abordan bases de datos con la intención de analizar y concluir.
  • Todos éstos, son términos asociados al objeto de este Diplomado de Inteligencia Analítica de Datos.
  • En este curso, se abordarán las principales técnicas de modelación (estadísticas y de aprendizaje automático), aplicadas a la solución de problemas prácticos.

Introducción al curso

En el Análisis de datos, se requieren profesionales con capacidad de los siguientes tres aspectos principarles.

  1. Usar herramientas de R para dar solución a problemas del análisis de datos.
  2. Modelar problemas del análisis de datos, tomando como base todas las técnicas ya mensionadas.
  3. Proponiendo soluciones funcionales, que faciliten la toma de decisiones
  4. Usar herramientas de modelación y minería de datos, según la información disponible en las empresas.
  5. Interactuar y trabajar en equipos interdisciplinarios

Objetivos del curso

General

Conocer y aplicar metodologías, técnicas y herramientas de análisis estadístico, de minería de datos y aprendizaje automático, para la resolución de problemas cotidianos y necesidades de negocio.

Especificos

  • Conocer las diferentes etapas requeridas para hacer análisis estadísticos e inteligencia analítica con datos del sector empresarial.
  • Conocer y aplicar las técnicas de análisis estadístico y de aprendizaje automático, más usadas en la actualidad para resolver problemas de negocio.
  • Realizar estimaciones de variables mediante distintos modelos de pronóstico.
  • Aplicar técnicas de estadística y minería de datos con softwares estadísticos tales como R y en lo posible, otros.
  • Explorar, crear y reutilizar sintaxis y funciones de R en casos prácticos de interpretación y análisis de datos.

Resultados del aprendizaje

Al finalizar el curso, el/a estudiante estará en capacidad de:

  • Conocer y manejar el lenguaje R, sus diferentes estructuras de datos y librerías.
  • Realizar análisis exploratorio de la información en diferentes contextos en los que se abordan problemas reales.
  • Desarrollar modelos estadísticos descriptivos y predictivos que ayuden en la toma de decisiones.
  • Conocer los algoritmos necesarios en la aplicación de técnicas estadísticas, de minería de datos y de machine learning, con casos prácticos de análisis de datos en múltiples contextos.
  • Analizar, sintetizar y presentar de forma efectiva los resultados de los modelos analíticos con técnicas de visualización y mediante el uso de informes estadísticos dinámicos y de calidad.
  • Dar soporte a los grupos de trabajo, mediante el desarrollo de proyectos de inteligencia analítica de datos, que generen un impacto positivo en el crecimiento y en el entorno de trabajo.

Inteligencia Analítica de Datos

Tópicos generales del curso

  1. Fundamentos de Programación en R
  2. Modelación Estadística
  3. Técnicas de Aprendizaje Automático
  4. Inteligencia Analítica y Modelación en R

Inteligencia Analítica de Datos

Analitica_Datos_2

R y RStudio

A cerca de R

  • Es un entorno y lenguaje de programación
  • Proporciona una amplia variedad de técnicas estadísticas (modelado lineal y no lineal, pruebas estadísticas clásicas, análisis de series temporales, clasificación, clustering, etc.)
  • Tiene librerias con mchas funciones para la generación de gráficos.
  • Está disponible como Software Libre bajo los términos GNU de la Free Software Foundation en forma de código fuente. Se compila y se ejecuta en plataformas UNIX (Linux y Mac OS) y Windows.

A cerca de Rstudio

  • Es un entorno de desarrollo integrado (IDE) para R.
  • Incluye una consola, edición y ejecución directa de código, así como herramientas para gráficos, historial, depuración y gestión del espacio de trabajo.

Instalación de R y Rstudio

Los instaladores los puede descargar siguiendo los siguientes enlaces:

R: https://cran.r-project.org/

RStudio: https://www.rstudio.com/products/rstudio/download/#download

Rstudio IDE

Operaciones matemáticas básicas

# Ejemplos 

3 + 10  # adicion

3 - 10 # sustraccion

5 * 4 # multiplicacion

12 / 5  # division

3^2 # potenciacion (3**2)

5%%2 # x mod y

5%/%2 # div. entera de x / y

Operaciones lógicas y relacionales

# Ejemplos 

3 < 10  # menor que

3 <= 10 # menor o igual que

5 == 4 # exactamente igual a

12 != 5  # diferente a

!3 # diferente de 

5 | 2 # x OR y

5 & 2 # x AND y

isTRUE(3) # test si x es verdadeo

Asignación de variables en R

  • Una variable es un objeto con nombre que contiene algunos datos como un número, un texto o una tabla.
  • El operador <- (En Win: “alt” + “-”) se usa para asignar valores a las variables en R (en lugar de =).
  • Por ejemplo, cree una variable a con el valor 10 y luego imprima el valor de a en la consola.
a <- 10 # asignar valor a una variable

El nombre de una variable no puede contener espacios ni caracteres especiales.

mi variable <- 6  # Error

mi_variable <- 6 # forma correcta

Tipos y estructuras de datos en R

Estructuras de datos en R

La siguiente gráfica, nos muestra las diferentes estructuras de datos que hay en R.

Vectores

  • Elemento más básico en R.
  • Contiene elementos de la misma clase (son atómicos).
  • Se crea con la función c(), que significa ‘concatenar’ o ‘combinar’.
# ejemplo 
v <- c(1.1, 10, 3.14) # asignar un valor a una variable

v # imprimir la variable

c(v, 535) # concatenar vectores

Vectores

Observación 1: Cuando tenenemos un vector, con números y caracteres, R asume que todas las entradas son caracteres. Veamos el ejemplo:

# ejemplo 
a <- c(1.1, 5, "x", 3.14) # asignar valores y caracteres a una variable

a # imprimir la variable

Observación 2: para acceder a los elementos de un vector, debemos usar corchetes. Veamos:

# ejemplo 
a <- c(1.1, 5, "x", 3.14) # asignar valores y caracteres a una variable

a[2] # devuelve el elemento en la segunda entrada del vector

Vectores

Algunas operaciones con vectores

# ejemplo
v <- c(1.1, 5, 3.14) # asignar un valor a una variable

is.vector(v) # Determina si el objeto o la variable "v" es un vector

a <- v * 2 + 100 # opercione con el vector

a # imprimir la variable
# ejemplo
v/2 #divide cada entrada del vector por dos

v^3 # eleva cada entrada del vector al cubo

v*v # multiplica cada entrada ubicada en el mismo indice (igual a v^2)

Secuencias numéricas

1:20 # secuencia de 1 hasta 10 de 1 en 1

pi:10 # secuencia desde pi = 3.14 sumando 1

15:1 # secuencia inversa de 15 hasta 1

seq(1, 6) # secuencia de 1 hasta 20 

seq(0, 10, by=0.5) # secuencia de 0 hasta 10, aumentando 0.5  

mi_sec <- seq(5, 10, length=20) # secuencia desde 5 hasta 10, con 20 elementos
mi_sec  

Listas

  • Una lista es una colección de elementos que pueden ser de diferente tipo.
  • Los componentes de una lista son típicamente pares clave-valor.
  • El ejemplo muestra cómo almacenar un punto (con coordenas) en una lista.
# ejemplo
coord <- list(X=10, Y=15)

point <- list(id=123, coord=coord, spatial.ref="WGS_84")

Accediendo a los elementos de la lista

point$id # Los elementos de la lista se acceden por nombre

point$coord # Los elementos de la lista se acceden por nombre

point$coord$X # Se puede acceder a los elementos anidados

point[1] # Tabien se puede acceder por índice. Usar corchetes individuales, devuelve una lista

Tipo de estructura de datos

Verificando el tipo de estructura

# ejemplo
class(point) # verificando el tipo de estructura

class(point[1]) # verificando el tipo de estructura

class(point[[1]]) # verificando el tipo de dato

# point[1]+point[1] # Esto no funcionará
point[[1]]+point[[1]] # Esto funcionará

Matrices

  • Ambos representan tipos de datos “rectangulares”, por lo tanto, se almacenan datos tabulares, con filas y columnas.

  • Las matrices solo pueden contener una única clase de datos (al igual que los vectores)

  • Una matriz es una estructura bidimensional. Las filas son horizontales y las columnas son verticales.

  • Una matriz de 4 por 3 (4 x 3), por ejemplo, tiene 4 filas y 3 columnas.

Creando Matrices

#ejemplo 
mi_matriz1 <- matrix(1:20, 4, 5) # matriz de 4 filas y 5 columnas
mi_matriz1

mi_matriz2 <- matrix(1:20, 5, 4)
mi_matriz2

identical(mi_matriz, mi_matriz2) # verifica si son iguales las matrices

Creando Matrices

Observación 1: podemos pegar filas o columnas a una matriz ya creada usando rbind y cbind: Observación 2: las filas y columnas pegadas pueden estar delante o al final; arriba o abajo. Veamos:

#ejemplo 
mi_matriz1 <- matrix(1:20, 4, 5) # matriz de 4 filas y 5 columnas

rbind(100:104 , mi_matriz1) # pegamos la fila con los elementos 100:104

cbind(mi_matriz1, 100:103) # pegamos la fila con los elementos 100:103

Observación 3: podemos nombrar las filas y columnas de una matriz.

# Poner nombres de filas y columnas a la matriz

rownames(mi_matriz1) <- c("a","b","c","d")
colnames(mi_matriz1) <- c("v", "w", "x","y","z")

mi_matriz1

Data Frames

  • Un data frame es una estructura de datos bidimensional similar a una matriz, pero funciona de manera muy diferente.
  • Si bien un data frame parece una tabla simple, de hecho es una lista de vectores de la misma longitud.
  • La principal diferencia es que un data frame permite tipos de datos mixtos (por ejemplo, numérico, lógico, caracter).
  • Permite almacenar diferentes tipos de variables, lo cual es muy útil en el análisis estadístico. Por ejemplo, en un análisis de regresión.
  • Las matrices se usan principalmente para almacenar datos numéricos, y se pueden usar para álgebra matricial.

Creando Data Frames

Observación 1: podemos crear un data.frame a partir de una matriz.

# ejemplo
matriz1 <- matrix(1:20, 4, 5) #creando una matriz

df <- data.frame(matriz1) # creamos un data.frame de la matriz1

df # vemos la matriz

Observación 2: iguamente, podemos cambiar los nombres de las filas y columnas del data.frame.

rownames(df) <- c("a","b","c","d") #nombrando filas

colnames(df) <- c("v", "w", "x","y","z") #nombrando columnas

df

Data Frame (vista, acceso, dimensión, clase)

df1 <- data.frame(X = 1:3, Y =  c("a","b","c"))

View(df1) # ver el data.frame

df1[1, ] # ver la primera fila (tambien df1[, "X"])

df1[, 2] # ver la segunda columna (tambien df1[, "Y"])

df1$X  # ver la primera variable

df1$Y  # ver la segunda variable

nrow(df1) # numero de filas del data.frame

ncol(df1)  # numero de columnas del data.frame

class(df1) # verificando la clase

Cargando Datos en R

  • Podemos cargar datos en R de diferentes formas y de diferentes sitios.
  • En R, existen varios conjuntos de datos tabulados o data sets se icluyen en la instalación de R (en el paquete datasets).
  • Los datasets por defecto se ecuentran cargados para su uso.
  • la funcion data() lista todos los data sets de R.

Trabajemos con datasets:

data() # para ver todos los datasets que estan en R

Cargando Datos en R

Datos iris - Edgar Anderson

Este dataset contiene medidas de longitud y ancho de pétalos y sépalos de flores de tres especies de Iris recogidas por el botánico Edgar Anderson. Es uno de los datasets más clásicos en el mundo del Machine Learning y en general de la ciencia de datos.

str(iris) # la funcion str, nos muestra los atributos del data.frame

iris[ , "Species"] # todas las observaciones de la columna "Species" (tambien: iris$Species)

Extracción de datos (iris)

Podemos extrar algunos elementos del data.frame iris, dandole la condición necesaria. Así:

iris[iris$Species=="setosa", ]  # Extraer todas las filas del data.frame iris, donde Species == "setosa".

Observación: podemos hacerlo de la siguiente forma: iris[iris[,"Species"]=="setosa", ]

Podemos extraer las observaciones donde el ancho del sépalo sea menor a 3 y la especie sea “setosa”.

iris[iris[,"Sepal.Width"]<=3 & iris[,"Species"]=="setosa", ]

Subconjuntos de los Datos (Subsetting)

La función subset nos facilita el recuperar datos cuando queremos que se cumplan ciertas condiciones. Como el ejemplo anterior, queremos extraer las observaciones donde el ancho del sépalo sea menor a 3 y la especie sea “setosa”. Lo hacemos así:

subset(iris, Sepal.Width <= 3  & Species == "setosa")
   Sepal.Length Sepal.Width Petal.Length Petal.Width Species
2           4.9         3.0          1.4         0.2  setosa
9           4.4         2.9          1.4         0.2  setosa
13          4.8         3.0          1.4         0.1  setosa
14          4.3         3.0          1.1         0.1  setosa
26          5.0         3.0          1.6         0.2  setosa
39          4.4         3.0          1.3         0.2  setosa
42          4.5         2.3          1.3         0.3  setosa
46          4.8         3.0          1.4         0.3  setosa

Importar diferentes tipos de bases de datos

Introduciremos funciones para importar/exportar datos de los siguientes formatos:

  • Datos en formato texto (o tabulares)
    • CSV: .csv (comma separated values o , en castellano, datos separados por comas)
    • otros datos en formato texto
  • Formatos de otros programas (software propietario)
    • SAS
    • EXCEL: .xls y .xlsx Pero se puede cargar datos de todo tipo: SAS, SPSS, netCDF, etc. Existen packages y funciones para cargar (casi) todo tipo de archivos

Datos separados por caracteres (CSV)

  • Estamos acostumbrados a visualizar datos en formato tabla. Generalmente:
    • las columnas son variables
    • las filas son observaciones o individuos de esas variables.
  • Las columnas se separan con un carácter y las filas con un salto de linea. Este carácter puede ser:
    • un espacio
    • un tabulador
    • una coma
    • punto y coma
  • El formato más extendido es el CSV, donde las observaciones están separadas por comas.
  • El package readr lee datos tabulares con las siguientes funciones:
  • si los datos están delimitados por caracteres utiliza:
    • read_delim()
    • read_csv()
    • read_tsv()
  • si los datos son de anchura fija:
    • read_fwf()
    • read_table()
  • Veremos cómo importar/exportar datos tabulares del primer tipo; es decir, separados por caracteres. Comenzaremos con el formato CSV que es el más utilizado.

Datos separados por caracteres (CSV)

Comenzaremos con el formato CSV que es el más utilizado. Para esto, debemos cargar la libreria (paquete) readr. La debemos instalar si no la tenemos en nuestro R local.

Observación: para installar una libreria, debemos hacer lo siguiente: install.packages("nombre_paquete"); en este caso,

install.package(readr)

Ahora podemos ir a nuestros archivos locales para cargar los datos. Así:

library(readr) # cargamos la libreria

mi_iris <- read_csv(file = "C:/Users/Roberto Trespalacio/Documents/mi_iris.csv") # leemos los datos locales
View(mi_iris) # visualizamos los datos

Otros datos tabulares

  • Todos los datos tabulares (separados por caracteres) son muy similares. Solo se diferencian en el carácter que hace de separador.
  • El package ‘readr’ tiene una función específica para cada tipo de datos tabulares.
    • Por ejemplo, la función genérica que sirve para cualquier tipo de separador: read_delim().
  • Podemos cargar el fichero mi_iris.csv que hemos exportado anteriormente utilizando la función genérica read_delim(), solo hay que decirle que el separador es una coma.

Se lo decimos con la opción delim = “,” . Veámoslo:

mi_iris <- read_delim(file = "C:/Users/Roberto Trespalacio/Documents/iris.csv", delim = ",")

Y si el delimitador no es la coma...

  • El formato tabular más extendido es el CSV; en general, NO tendremos necesidad de exportar datos tabulares separados por caracteres distintos a la coma, pero si quisiéramos hacerlo, podríamos hacerlo con write_delim(). Así:

Para exportarlos:

write_delim(iris, path = "C:/Users/Roberto Trespalacio/Documents/mi_iris1.csv", delim = ";") #exportar datos iris

Y si quisiéramos importarlos, tendríamos que hacer:

read_delim(file = "C:/Users/Roberto Trespalacio/Documents/mi_iris1.csv", delim = ";")

Ejercicio: Usar la funciones View(), str(), head() y summary() para explorar los datos mi_iris y mi_iris1.

**Importante “,” como decimal**

  • En algunos casos, los datos que deberían de ser numéricos nos los pone como character. Esto suele ser debido a:
    • la hoja de datos ha usado como delimitador decimal la coma (“,”) y no el punto, que es lo que usa R y mayoría de software de programación.
    • algún error en la entrada de los datos.

Para corregir este problema, usaremos este argumento: locale=locale(decimal_mark = ","). En este caso estamos diciendo que el delimitador es la coma (“,”). Ejemplo:

Guardemos los datos con delimitador el punto (.).

write_delim(iris, path = "C:/Users/Roberto Trespalacio/Documents/mi_iris2.csv", delim = ".") # exportar datos iris
read_delim(file = "C:/Users/Roberto Trespalacio/Documents/mi_iris2.csv", delim = ";",
           locale=locale(decimal_mark = ","))

Datos de SAS y Excel

Datos de SAS

El package readr tiene una función específica para bases de datos SAS. Las funciones para importar y exportar “datos SAS” se llaman read_sas() y write_sas().

Su funcionamiento es igual que read_delim() y write_delim.

Datos Excel

Vamos a usar los package readxl y writexl para exportar e imoprtar ficheros excel, respectivamante.

Exportar a excel

Instalemos el paquete writexl y veámoslo:

install.packages("writexl") # instalamos writexl

library(writexl) # cargamos la libreria

write_xlsx(iris, "C:/Users/Roberto Trespalacio/Documents/mi_iris_excel1.xlsx") # escribimos los datos mi_iris.xlsx localmente

write_xlsx(iris, "C:/Users/Roberto Trespalacio/Documents/mi_iris_excel2.xlsx"), use_zip64 = T)

obsevación 1: La función write_xlsx() permite crear Excel enormes de manera eficiente mediante la especificación use_zip64 = T:

write_xlsx(iris, "C:/Users/Roberto Trespalacio/Documents/mi_iris.xlsx"), use_zip64 = T)

obsevación 2: La función write_xlsx() permite añadir datos en varias pestañas a la vez. Para ello:

list_iris = list(Iris1 = mi_iris_excel1, Iris2 = mi_iris_excel2) # lista de las hojas o pestanas

# escribimos los datos iris con las hojas (mi_iris_excel1 e mi_iris_excel2)
write_xlsx(list_iris, "C:/Users/Roberto Trespalacio/Documents/iris.xlsx") 

Descargar datos de internet

En internet hay una gran variedad de datasets que podemos usar desde R/RStudio.

  • Desde RStudio, podemos descargar datos con las mismas funciones que usábamos para cargar en el entorno de trabajo los datos que teníamos en nuestro PC.
  • La única diferencia consiste en que, en lugar de proporcionar la ruta al fichero (url), tendremos que proporcionar la ruta de internet. Por ejemplo:
# cargamos los datos del fichero "bio260-heights.csv"
url <- "https://raw.githubusercontent.com/datasciencelabs/data/master/bio260-heights.csv" #url de la pagina de los datos
bio260_heights <- read_csv(url) # cargando los datos bio260-heights

La siguiente página puede ser de utilidad para ver más tipos de formas de carga de datos.

Cargar Datos: https://www.uv.es/pjperez/curso_R/tt_3_cargar_datos_v4.html

Ejercicios

Los siguientes, son algunos ejercicios para repasar y practicar lo visto hasta el momento.

  1. En R, lea los datos mtcars, guardelo como archivo local (en su computador, en Documentos), en los siguientes formatos:
    • csv (archivo de texto, separado por “,”
    • txt (archivo de texto, separado por “;”
    • excel (recuerde que el separdor no puede ser el punto)
  2. Usar las funciones View(), str(), head() y summary(), para describir el contenido de mtcars.
  3. Descargar los datos de la url: http://academic.uprm.edu/eacuna/clase97.txt
    • usar la función read_delim para descargar los datos a su computador. (nota: el separador de este archivo es el espacio en blanco, es deicr: “ ”)