Explorando datos con R
Universidad Santo Tomás.
Métodos Cuantitativos
Docente: Edna Carolina Moreno
Historia de R
Años 70’s: Subrutinas de Fortran
En 1976: John Chambers, Rick Becker y Allan Wilks (laboratorios Bells),
desarrollaron S que implementaba librerías de macros Fortran. Lo llamaron
S por Statistical.
En 1991: En el Departamento de Estadística de la Universidad de Auckland
en Nueva Zelanda, Ross Ihaka y Robert Gentleman crean R como un
subdialecto de S. El nombre de R es debido a la primera letra de sus
creadores Ross y Robert.
Anunciándolo en 1993 al público y en 1995 Martin Machler convence a
Ross y Robert de usar la Licencia Publica General GNU haciendo a R como
software libre.
(Fuente: http://rstadistica.blogspot.com/2015/10/historiaR.html)
Ventajas de R:
1. R es un software libre cuenta con la licencia GNU GPL (General Public License) da
la libertad de usar el programa con el propósito que se desee
2. Es de código abierto, El código está disponible en cualquier plataforma de
desarrollo colaborativo como GitHub. Se diseñó a través de un lenguaje
computacional robusto que permite a los usuarios adicionar nuevas
funcionalidades.
3. Es multiplataforma, funciona para Windows, Mac, Linux.
4. Está alimentado por un conjunto grande de paquetes. Los paquetes son
colecciones de funciones, datos y código R que se almacenan en una carpeta
conforme a una estructura bien definida, fácilmente accesible para R
5. Las herramientas gráficas de visualización de datos en R tiene una gran
versatilidad.
Cómo funciona R
R es un lenguaje Orientado a Objetos: bajo este complejo término se
esconde la simplicidad y flexibilidad de R.
Orientado a Objetos significa que las variables, datos, funciones,
resultados, etc., se guardan en la memoria activa del computador en
forma de objetos con un nombre específico.
El usuario puede modificar o manipular estos objetos con operadores
(aritméticos, lógicos, y comparativos) y funciones (que a su vez son
objetos).
Everything you touch in R—ranging from numbers to character strings
to matrices—is an object.
(http://diytranscriptomics.com/Reading/files/The%20Art%20of%20R%20Programming.pdf)
Objetos más simples en R:
Todas las cosas que manipula R se llaman objetos. En general, éstos
se construyen a partir de objetos más simples. Los objetos más
simples (atómicos) son las siguientes:
● character (cadenas de caracteres)
● numeric (números reales)
● integer (números enteros)
● complex (números complejos)
● logical (lógicos o booleanos, que sólo toman los valores True o
False)
(https://cran.r-project.org/doc/contrib/Santana_El_arte_de_programar_en_R.pdf)
Otros objetos
● Vector: Contiene objetos de la misma clase.
● Lista: Vector de objetos de diferentes clases
Tipos de Vectores
c(1.68,1.76,1.60,1.90) vector
numérico
c(T,F,T,T,F) vector
lógico
c(“Bogotá",“Boyacá",“Huila") vector de cadenas de
caracteres
Los objetos en R pueden tener atributos
Son como metadatos para el objeto. Pueden ser muy útiles ya que nos
proporcionan información del objeto.
Por ejemplo, los nombres de columna en un data frame. Algunos ejemplos de
atributos en objetos R son:
names, dimnames, dimensions (en matrices, arrays), class (e.g. integer,
numeric), length
Se puede acceder mediante la función attributes().
No todos los objetos contienen atributos, en este caso la
función attributes() devolverá NULL.
https://rsanchezs.gitbooks.io/rprogramming/content/chapter2/atributes.html
IMPORTANCIÓN DE
DATOS EN R
Los formatos de datos más típicos son .txt, .csv, excel .xlsx o
.xls
#IMPORTANDO ARCHIVO CSV.
Los archivos CSV (del inglés comma-separated values) son un tipo de documento en formato
abierto sencillo para representar datos en forma de tabla, en las que las columnas se separan
por comas (o punto y coma en donde la coma es el separador decimal ...) y las filas por saltos
de línea.
OPCIÓN 1 CARGAR EL PÁQUETE readr:
Este paquete es efectivo cuando tienes muchos datos y es muy útil para leer archivos
planos .
install.packages("readr") #Instalar el paquete.
library(readr) #Cargar el paquete.
Una vez cargado puedes trabajar con él. Tienes tres funciones que vas a utilizar:
read_csv(): para leer archivos con coma (“,”) como separador
read_csv2(): para leer archivos con punto y coma (“;”) como separador, usado en
paises donde la coma es usada como separador decimal
read_tsv(): para leer archivos con tabulador (“\t”) como separador
read_delim(,sep =’|’): para leer archivos con separador distintos como puede ser el
símbolo ‘|’
Camino 1: Colocar la ruta del archivo (Con los datos de INDITEX)
MisDatos1 <- read_csv("C:\\Users\\USER\\Dropbox\\Mis clases\\Est.
Exploratoria\\4.Instrucciones Cuarta Clase\\Datos1.csv")
Para que salga la ñ:
MisDatos2 <- read_csv("C:\\Users\\USER\\Dropbox\\Mis clases\\Est.
Exploratoria\\4.Instrucciones Cuarta Clase\\Datos1.csv",locale = locale(encoding =
'latin1'))
Camino 2 : Cambiar el directorio de trabajo de R
MisDatos3 <- read_csv("Datos1.csv",locale = locale(encoding = 'latin1'))
Camino 3: Leer los archivos de tu pc seleccionado con el mouse
MisDatos4 <- read_csv(file.choose(),locale = locale(encoding = 'latin1'))
TIPS:
• Cuando hay algunas líneas en el encabezado del archivo:
Se utiliza la opción skip=n para saltar las primeras n filas. O usamos comment = "#" para saltar
todas las líneas que empiecen con #.
• Los datos pueden no tener los nombres de las columnas:
Puedes usar col_names = FALSE para decirle a read_csv() no tener en cuenta las primeras filas
como encabezados y en su lugar el coloca nombres secuenciales desde X1 a Xn.
#read_csv("kkkkkk", col_names = c("x", "y", "z"))
OPCIÓN 2 UTILIZAR LA INSTRUCCIÓN READ.TABLE
Se recomienda cuando no tienes demasiados datos, se usa con mucha frecuencia.
#Leer el archivo original Datos33 el que tenía el encabezado con 3 filas de descripción
MisDatos7 <- read.table(file.choose(), skip = 3, header =TRUE, sep =",")
#Con los datos originales de Inditex
MisDatos7 <- read.table("Datos1.csv", skip = 0, header =TRUE, sep =",", na.strings="NA")
#o es equivalente
MisDatos8 <- read.csv("Datos1.csv", skip = 0, header =TRUE, na.strings="NA")
View(MisDatos8)
Las siguientes instrucciones son equivalentes:
Datos10.df <- read.table(“Datosd.csv", header=T, sep=",")
#o equivalente a
Datos10.df <- read.csv("MiTabla.csv")
Datos11<- read.table(“Datosc.csv", header=T, dec=",", sep=";")
#es equivalente a
Datos11 <- read.csv2(" Datosc.csv ")
LEER LA BASE DE DATOS DESDE EXCEL
Instalar el paquete 'readxls' el paquete más práctico para leer ficheros Excel
install.packages("readxl")
library("readxl")
#Colocando el nombre del el archivo en lugar de Hoja1
misDatos <- read_excel(file.choose(), sheet = "Hoja1", na="NA")
# Puedes leer la hoja número 1. La primera de todas
misDatos <- read_excel(file.choose(), sheet = 1)
#Indicando la ruta donde se encuentra el archivo con los datos
MisDatos5 <- read_excel("C:\\Users\\USER\\Dropbox\\Mis clases\\Est. Exploratoria\\4.Instrucciones
Cuarta Clase\\Datos.xlsx", sheet = 3)
#Acá, deben cambiar el directorio de trabajo.
MisDatos6 <- read_excel("Datos.xlsx", sheet = 3) o también sheet = “Ventas”
FUNCIONES PARA UNIR BASES DE DATOS
1. La función Merge
Función binaria: Sólo permite la unión de dos a la vez, por una columna común
2. La función rbind:
Si tenemos registros de nuevas unidades poblacionales y
queremos agregarlos al Data frame. (Las columnas de los
dos Data set deben ser iguales.)
Nota: En la función rbind()
Si el Data frame A tiene variables que el Data
frame B no tiene, tiene dos opciones:
• Borrar las variables extra en el data frame A
• Crear las variables adicionales en el data
frame B y colocar NA antes de unirlas con
rbind()
3. La función cbind:
Si tenemos registros de nuevas variables para todas las unidades
poblacionales. Es decir una base de datos con nuevas columnas.
Si queremos exportar un Data Frame:
save(NuevaTabla, file="NuevaTabla.rda") #guardamos en un formato del R.
write.csv(NuevaTabla, file="NuevaTabla.csv") #guardamos en un archivo CSV.
install.packages("xlsReadWrite")#instalamos el paquete xlsReadWrite
library(xlsReadWrite) #abrimos el paquete
write.xls(NuevaTabla, file="datanueva.xls",sheet="Curso1 ")#guardamos en
fomato Excel
Nota: Los archivos quedan guardados en el Directorio de Trabajo.
Limpieza y preparación de los
datos
El paquete «janitor» Simple Tools for Examining and
Cleaning Dirty Data
install.packages("janitor")
library(janitor)
This package follows the principles of the "tidyverse" and works well with
the pipe function %>%.
janitor was built with beginning-to-intermediate R users in mind and is
optimized for user-friendliness.
Advanced R users can already do everything covered here, but with
janitor they can do it faster and save their thinking for the fun stuff.
https://cran.r-project.org/web/packages/janitor/index.html
CATALOGO DE FUNCIONES DEL
PAQUETE JANITOR
#1. clean names:
x = janitor::clean_names(mymsa)
#Returns names with only lowercase letters, with _ as a
separator
#Handles special characters and spaces
#Appends numbers to duplicated names
#Converts “%” to “percent” to retain meaning
# 2. tabyl()
tabyl() takes a vector and returns a frequency table, like table(). But its additional features are:
1. It returns a data.frame - for manipulating further, or printing with knitr::kable().
2. It automatically calculates percentages
3. It can (optionally) display NA values
4.When NA values are present, it will calculate an additional column valid_percent
5.It can (optionally) sort on counts
6.It can be called with %>% in a pipeline
(https://garthtarr.github.io/meatR/janitor.html)
Qué es el operador pipe?
(https://www.datacamp.com/community/tutorials/pipe-r-tutorial)
Trabaja con los paquete dplyr, magittr. Este operador permite hacer
composición de funciones, para evitar funciones anidadas.
y <- c(0.109, 0.359, 0.63, 0.996, 0.515, 0.142, 0.017, 0.829, 0.907)
#Toma y le saca log a cada dato, luego exp, luego el resultado lo
redondea con un decimal.
round(exp(log(y)), 1)
y %>% log() %>%
exp() %>%
round(1)
#3. remove_empty()
The remove_empty() function removes any columns that are
entirely empty and entire rows that are entirely empty.
x = read_excel("mymsa.xlsx") %>%
clean_names() %>% remove_empty(which = c("rows","cols") )
View(x)
4. Crosstabulation
The tabyl() function generalises to crosstabulations of two (or more)
variables.
We can start by looking at the distribution of meat colour over the
two plants in the data set.
5. get_dupes()
For hunting duplicate records during data cleaning. Specify the data.frame and
the variable combination to search for duplicates and get back the duplicated
rows.
x %>% get_dupes(rfid)
El paquete dplyr
• Desarrollado por Hadley Wickham de RStudio
• No proporciona ninguna nueva funcionalidad a R : todo aquello que podemos hacer
con dplyr lo podríamos hacer con la sintaxis básica de R.
• Una importante contribución del paquete dplyr es que proporciona una "gramática"
(particularmente verbos) para la manipulación y operaciones con data frames.
• Las funciones del paquete dplyr son muy rápidas, puesto que están implementadas con el
lenguaje C++.
Fuente: https://rsanchezs.gitbooks.io/rprogramming/content/chapter9/dplyr.html
La grámatica de dplyr
● Algunas de los principales "verbos" del paquete dplyr son:
● select: devuelve un conjunto de columnas
● filter: devuelve un conjunto de filas según una o varias condiciones lógicas
● arrange: reordena filas de un data frame
● rename: renombra variables en una data frame
● mutate: añade nuevas variables/columnas o transforma variables existentes
● summarise/summarize: genera resúmenes estadísticos de diferentes variables
en el data frame, posiblemente con strata
● %>% : el operador "pipe" es usado para conectar múltiples acciones en una
única "pipeline" (tubería)
● Fuente:
https://rsanchezs.gitbooks.io/rprogramming/content/chapter9/dplyr.html
1. Select(): Seleccionar columnas de un data Frame
*A partir de la tercera fila son funciones
propias del paquete dply
- Selecciona todas las variables excepto
: Selecciona un rango
Selecciona variables cuyo nombre contiene la
contains()
cadena de texto
Selecciona variables cuyo nombre termina
ends_with()
con la cadena de caracteres
everything() Selecciona todas las columnas
Selecciona las variables cuyos nombres
matches()
coinciden con una expresión regular
num_range() Selecciona las variables por posición
Selecciona variables cuyos nombres están en
one_of()
un grupo de nombres
Selecciona variables cuyos nombres
start_with()
empiezan con la cadena de caracteres
https://rsanchezs.gitbooks.io/rprogramming/content/
chapter9/select.html
2. Filter() Permite filtrar filas de acuerdo a una condición.
& Y
| o
< Menor que
> Mayor que
== Igual que
<= Menor o igual que
>= Mayor o igual que
!= Diferente que
%in% Pertenece al conjunto
is.na Es NA
!is.na No es NA
3.arrange() La función arrange() se utiliza para ordenar las filas de un data frame de acuerdo a una o varias
columnas/variables.
TitanicE<-arrange(TitanicB,desc(age),fare)
4. rename() Renombrar una variable en un data frame en R es muy difícil de realizar. La función rename() esta
diseñada para hacer este proceso de una forma más fácil.
TitanicB<-rename(TitanicB,nombre=name, Genero=sex)
names(TitanicB)
View(TitanicB)
5. mutate() Con la función mutate() podemos computar tranformaciones de variables en un data frame. A menudo,
tendremos la necesidad de crear nuevas variables que se calculan a partir de variables existentes, mutate() nos
proporciona una interface clara para realizar este tipo de operaciones.
6.summarise() crea un nuevo data frame, con resultados de funciones que trabajan conjuntamente con esta
función
dplyr
base
primer valor en un
first()
min(), max() Valores max y min vector
mean() media el último valor en un
last()
vector
median() mediana
el número de valores
n()
sum() suma de los valores en un vector
varianza y desviación el número de valores
var, sd() n_distinct()
típica distintos en un vector
Extrar el valor que
nth() ocupa la posición n en
un vector
(https://rsanchezs.gitbooks.io/rprogramming/content/chapter9
/summarise.html)