14 de agosto de 2018

Sesión 2. Objetivos.

  • Configurar y poner a funcionar R y Rstudio.
  • Conocer los tipos y estructuras de datos básicos de R.
  • Conocer los operadores y funciones más frecuentes de R.
  • Importar datos.
  • Obtener sumarios básicos con R.

Datos tipificados y estructurados.

Which of the following would you most prefer?

A: a puppy,

B: a pretty flower from your sweety, or

C: a large, properly formatted data file?

–Futurama, Fear of a bot planet, 1999.

Tipos de datos I

Al carecer de intuición, las computadoras no pueden distinguir 1+1=2 de “1 busca lleno de esperanza, el camino que las ansias…”

Por lo tanto se manejan de manera estricta con tipos de datos.

  • La división de datos en tipos impide que cometamos errores y acelera las operaciones del sistema.
    • No se puede sumar “uno” + “uno”
    • R no tiene que verificar si puede o no hacerlo.

Tipos de datos en R

Tipo Variantes Operaciones
numeric integer, double Aritméticas
character character, string Manipulación de texto
factor ordenado, no ordenado Variables nominalesu ordinales
lógicos TRUE, FALSE, NA Lógicas, missing cases
date POSIXct Fecha y hora.

Verificación del tipo de datos

R tiene dos familias de funciones que hacen muy fácil verificar el tipo de datos y cambiar los datos de un tipo a otro.

  • Las funciones is.tipo() regresan un valor lógico.
    • is.numeric, is.integer, is.double, is.character, is.factor, is.date

Cambio de tipo de datos

  • Las funciones as.tipo() cambian de un tipo de datos a otro.
    • as.character, as.integer, as.numeric, as.factor, as.date.
    • Hay algunas reglas que impiden ciertas transformaciones.
      • No podemos pasar un caracter a numérico.
      • Pero sí un número a caracter.
      • Con valores lógicos: TRUE=1, FALSE=0.

Nombres y cadenas de caracteres

  • Los nombres de los objetos se utilizan “desnudos”
    • Es decir sin comillas
    • Esto incluye a las funciones y los números.
  • Para introducir cadenas de caracteres usamos siempre comillas.
    • x <- "objeto" \(\neq\) x <- objeto
    • En el primer caso asigna el string “Martín” al objeto x, en el segundo caso va buscar el objeto Martín en el entorno de trabajo y, si lo encuentra, lo asigna a x.

Estructuras de datos

A diferencia de SPSS o Stata, R hace explícitas para el usuario las estructuras de datos.

Esto tiene una desventaja -debemos conocer con qué estructura de datos estamos trabajando y cómo operar sobre ella- y una gran ventaja: podemos manipular datos de manera totalmente flexible.

Algunas estructuras de datos disponibles en R

Estructura Dimensiones Tipos Nota
vector 1 Múltiples Escalar= vector de largo 1.
matrix 2 Únicos Uso interno en funciones.
array 3 o más Únicos avoid!
data.frame 2 Múltiples Base de datos: filas*columnas
list 3 o más Múltiples Resultados de una función

Vector

  • Es una serie unidimensional ordenada de valores.
  • Pueden contener datos de distintos tipos.
  • Podemos recuperar un valor por el número de posición. x[2]
  • Atributos: length() names()
    • El atributolength() regresa el largo del vector, la cantidad de registros separados que tiene registrados.
      • En términos estadísticos así obtenemos la N.
    • El atributo names() es un metadato opcional con un índice de nombres para cada registro.
    • El índice por default es numérico.

Algunos vectores

# Vector numérico
1:10
##  [1]  1  2  3  4  5  6  7  8  9 10
# Vector de caracteres
nombres <- c("miriam", "denisse", "alejandro", 
             "julia", "elisangela", "adrian")
nombres
## [1] "miriam"     "denisse"    "alejandro"  "julia"      "elisangela"
## [6] "adrian"
nombres [3]
## [1] "alejandro"

Vectores nombrados

Agregan un nuevo tipo de índice basado en nombres que asignamos.

sedes <- c(poussin = "Poussin 45", 
           plaza = "Plaza Valentín Gómez Farías 12")
sedes
##                          poussin                            plaza 
##                     "Poussin 45" "Plaza Valentín Gómez Farías 12"
sedes ["plaza"] #Nótese el uso de ""
##                            plaza 
## "Plaza Valentín Gómez Farías 12"

Matriz

  • Es una estructura bidimensional.
  • Solo acepta un tipo de datos.
    • No es flexible, no es recomendable usarla para datos heterogéneos.
  • Se usa internamente para operaciones matemáticas.
    • Dado que el tipo de datos es conocido las operaciones son más rápidas, el software no tiene que verificar el tipo antes de hacer la operación.

Matriz II

matrix(1:10, ncol=2)
##      [,1] [,2]
## [1,]    1    6
## [2,]    2    7
## [3,]    3    8
## [4,]    4    9
## [5,]    5   10

Array

  • Es una matriz multidimensional.

Data frame

  • Es una estructura bidimensional y rectangular.
    • Todas las filas y todas las columnas tienen que tener el mismo largo.
    • Si hay espacios en blanco se completa con NA.
  • Acepta distintos tipos de datos en las columnas.
  • Atributos: length(), names(), colnames(), rownames(), ncol(), nrow()
  • Podemos recuperar valores por coordenadas df[1,1] o nombres de columnadf$var1

Data frame simple

df <- data.frame(sedes = sedes, 
                 clase = c(FALSE, TRUE),
                 horario = c(NA, 16))
df
##                                  sedes clase horario
## poussin                     Poussin 45 FALSE      NA
## plaza   Plaza Valentín Gómez Farías 12  TRUE      16

Un data.frame formateado

knitr::kable(df)
sedes clase horario
poussin Poussin 45 FALSE NA
plaza Plaza Valentín Gómez Farías 12 TRUE 16

Lista

  • Es la estructura de datos más versátil.
    • No tiene que ser rectangular.
    • Admite múltiples niveles de datos anidados.
      • Tiene estructura de árbol jerárquicos.
  • america_latina$mexico$cdmx$benito_juarez$mixcoac
    • Podemos recuperar los valores con el operador $ o por coordenadas.
  • Es frecuente que las funciones, especialmente las complejas, devuelvan una lista.
    • Por eso es importante saber navegar listas.

Importación de datos.

  • R no tiene un formato de archivo de datos estándar.
  • Pero puede cargar como data.frame archivos de:
    • SPSS
    • Stata
    • Excel (.xlsx, .xls)
    • Valores separados por comas (.csv)1

Codificación de texto

  • Tener en cuenta la codificación de texto. Para bases de datos que usan caracteres en español (acentos, ñ) usar la codificación utf-8.
    • La codificación por default de R es ANSI, pero tien buen soporte para utf-8.
    • La codificación por default de Windows es Latin-1.
      • El encoding en Windows da trabajo porque trata de usar Latin-1 por defecto.
    • Los archivos .csv suelen ser los más problemáticos.
      • Se sugiere verificar que estén codificados en utf-8.
        • O volver a guardarlos con esa codificación usando notepad.exe o equivalente.

Importación de datos (codificación de caracteres)

  • Los paquetes foreign::, haven:: y Hmisc:: reúnen varias funciones de importación.
  • El paquete haven:: es accesible a través del menú “Import Dataset” de Rstudio.
    • Tener los archivos disponibles en el directorio de trabajo.
    • Verificar que los nombres de columna se carguen correctamente.
    • Asignar cuidadosamente el tipo a cada columna.
    • ¡Conservar la sintaxis para no tener que hacerlo de nuevo!

Tipos de archivos en R

  • R guarda nuestras sesiones de trabajo como proyectos con la extensión .Rdata.
    • No sólo guarda todos los objetos (incluidos datos y resultados), también guarda un historial de sintaxis.
  • Sin embargo es buena práctica guardar la sintaxis en archivos .R
  • Siempre escribimos los comandos en un archivo de sintaxis, nunca en la consola.
  • Es recomendable generar reportes que integran texto y resultados de análisis con rmarkdown.

No es una práctica recomendada guardar los datos en R

  • Es preferible guardar la sintaxis de carga y recodificación de los datos.
  • De este modo aseguramos la integridad de los datos.
  • Cargar y recodificar le lleva unos segundos a R, recuperar un archivo corrompido al menos una tarde de trabajo.

Operadores binarios de R

Op. Función Ejemplo Nota
<- Asigna nombre a objeto a <- 1 -> Cambia la dirección.
+ Suma a + a Operaciones vectoriales.
- Resta a - a Operaciones vectoriales.
\(\ast\) Multiplicación a*2 Operaciones vectoriales.
/ Realiza una división a / 2 Operaciones vectoriales.
== Igual a == a Devuelve TRUE o FALSE.
[,] Extrae valores df[1,1] Por posición
$ Extrae un vector df$var Por nombre
: Crea una secuencia 1:10 Intervalo: 1
%>% Tubería de dplyr x %>% sd No es base.

Funciones básicas para exploración de datos.

x son los datos sobre los que operamos.

Función Operación Ejemplo
mean() Devuelve la media aritmética mean(x)
sd() Devuelve el desvío estándar. sd(x)
median() Devuelve la mediana. median(x)
summary() Devuelve el sumario de un objeto summary (x)
sum() Sumatoria de un vector sum(x)
str() Estructura de un objeto str(df)
head() 10 primeros registros head(df)
tail() 10 últimos registros tail(df)
View() Muestra una tabla con un df View(df)
table() Crea una tabla de contingencia table(x,x)

summary() para variables numéricas.

x <- c(1,2,3,4,5)
print(x)
## [1] 1 2 3 4 5
is.numeric(x)
## [1] TRUE
summary(x)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##       1       2       3       3       4       5

summary() para variables categóricas.

x <- as.factor (c(rep ("Sí", 5), rep("No", 5), "NS/NC"))
print (x)
##  [1] Sí    Sí    Sí    Sí    Sí    No    No    No    No    No    NS/NC
## Levels: No NS/NC Sí
is.factor (x)
## [1] TRUE
summary (x)
##    No NS/NC    Sí 
##     5     1     5

summary() para multiples variables

df <- data.frame(
    genero= c(rep ("M", 5), rep("F", 5), "NS/NC"), 
    edad= rnorm(11, 30, 4)
  )
str(df)
## 'data.frame':    11 obs. of  2 variables:
##  $ genero: Factor w/ 3 levels "F","M","NS/NC": 2 2 2 2 2 1 1 1 1 1 ...
##  $ edad  : num  32.2 32.4 31.3 24.2 33.8 ...

summary (df)

summary (df)
##    genero       edad      
##  F    :5   Min.   :24.20  
##  M    :5   1st Qu.:28.39  
##  NS/NC:1   Median :30.08  
##            Mean   :29.95  
##            3rd Qu.:32.31  
##            Max.   :33.75

plot(df)

R detecta el tipo de variables y, para una numérica y una categórica elige un bloxplot.

plot(df)

Funciones básicas para manipulación de datos.

Función Operación Ejemplo
c() Concatena datos en un vector x <- c(1,2,3)
cbind() Pega por columnas cbind(x,x)
rbind() Pega por filas rbind(x,x)
rm() Elimina un objeto del entorno rm(x)

NOTA IMPORTANTE

En la práctica concreta y cotidiana del análisis de datos vamos a usar muy poco muchas de las funciones que revisamos en esta sesión.

Sin embargo todo el tiempo estameros manipulando estructuras de datos.

Y cometiendo errores por que utilizamos el tipo de datos incorrecto.

Referencias