Publicado el 20 de Mayo del 2019
1.186 visualizaciones desde el 20 de Mayo del 2019
1,6 MB
96 paginas
Creado hace 10a (07/10/2014)
ANÁLISIS DE DATOS
Ricardo Aler Mur
R
E L E M E N T O S B Á S I C O S
HISTORIA DE R
HISTORIA DE R
• R es un dialecto del lenguaje S
• S fue desarrollado por John Chambers en los
laboratorios Bell en 1976. El objetivo era facilitar el
análisis estadístico. Inicialmente usaba librerías en
Fortran, después fueron reescritas a C.
• Característica de S: análisis de datos interactivo y
también posibilidad de escribir scripts (programas)
• En la actualidad es propiedad de TIBCO (25
millones de dolares)
HISTORIA DE R
• R se crea en 1991en Nueva Zelanda por Ihaka y
Gentleman, con el objetivo de tener similares
posibilidades a S. Sintaxis similar aunque los detalles
internos son distintos
• En el 2000 se crea R 1.0.0 con licencia GNU GPL
(software libre)
• La versión 3.0.2 salió en Diciembre 2013. Desarrollo
muy activo
• Ejecuta en cualquier plataforma (al parecer incluso
en Playstation 3)
HISTORIA DE R
• Ventajas de R:
• Es libre
• Es bastante ligero (comparar el arranque de R
con el arranque de Matlab)
• Orientado al proceso y análisis de datos (gracias
a la estructura data.frame). El acceso a matrices
y data.frames es parecido al de Matlab (ej:
m[1:10,1:2] accede a las diez primeras líneas de
la matriz y a las dos primeras columnas)
• Gráficos potentes
• El más utilizado en análisis de datos (según
encuestas)
• Comunidad muy activa. 4000 paquetes
desarrollados y disponibles en CRAN:
http://cran.r-project.org/
• Mucha documentación y libros sobre el lenguaje
HISTORIA DE R
• Desventajas de R:
• Ya tiene 40 años
• El procesamiento es con datos en memoria (no tan bueno
para conjuntos de datos masivos, aunque dispone de
alternativas: comunicación con mySQL, paquetes para que
los datos residan parcialmente en disco, H2O, …)
• Poco soporte para gráficos en 3D, gráficos dinámicos y
gráficos interactivos, aunque en el último año han
aparecido maneras de generar gráficos interactivos en
javascript desde R, con Shiny, rCharts, …
• http://shiny.rstudio.com/gallery/
• Ej: http://shiny.rstudio.com/gallery/nvd3-line-chart-output.html
RSTUDIO
OBJETOS EN R
OBJETOS EN R
• Escalares: son realmente vectores de un elemento
• Vectores: todos los elementos del mismo tipo
• Factores
• Matrices: todos los elementos del mismo tipo
• Listas: permite combinar elementos de tipos
distintos
• Data frames: son matrices con elementos de
distintos tipos
• Nota: para este tutorial se ha seguido
• http://www.dcc.fc.up.pt/~ltorgo/DataMiningWithR/code.html
VARIABLES
• Asignaciones a variables:
• x <- 945 es lo mismo que x = 945
• Ojo! R es case-sensitive
LISTAR Y BORRAR VARIABLES
• ls(): listar objetos, rm(): borrar objetos
• rm(list=ls()): borrar todos los objetos
TIPOS DE DATOS ESCALARES
(“ATOMIC”)
• Character:
x = "cadena de caracteres"
x = ‘cadena de caracteres’
> paste("variable=",3,"\n")
[1] "variable= 3 \n"
> cat(paste("variable=",3,"\n"))
variable= 3
• Logical:
• x = TRUE, x = T
• x = FALSE, x = F
• Numeric:
• x = 3
• x = NA
• is.na(x) == TRUE
• (valor por omisión,
missing value)
• x = 1/0 == Inf
• X=Inf/Inf == NaN
• is.nan(x) == TRUE
• Complex:
• x = 3 + 4i
•
is.complex(x) == TRUE
OBJETOS EN R
• Escalares
• Vectores
• Factores
• Matrices
• Data frames
• Listas
VECTORES
NA es “sin valor” o valor faltante
(missing value, not acknowledged)
• Todos los elementos deben ser del mismo tipo:
VECTORES
• Vector vacío:
• Redimensionamiento dinámico de vectores:
VECTORES
• Concatenación de vectores:
> x = c(1,2,3)
> y = c(4,5)
> c(x,y)
[1] 1 2 3 4 5
VECTORIZACIÓN
• Normalmente, una función aplicada a un vector,
es aplicada a cada uno de los elementos
VECTORIZATION
• Nuestras propias funciones también están
vectorizadas
> mif = function(x) {x^2}
> x
[,1] [,2] [,3]
[1,] 1 2 3
[2,] 4 5 6
> mif(x)
[,1] [,2] [,3]
[1,] 1 4 9
[2,] 16 25 36
REGLA DEL RECICLADO
• Si por ejemplo se suman dos vectores de distinto tamaño, el mas
pequeño se replica hasta que tiene el mismo tamaño que el grande
(esto es cierto incluso con valores individuales)
ARITMÉTICA DE VECTORES
• +,-,*,/,^: Se aplican componente a componente. Si
los dos vectores tienen tamaños distintos, se aplica
la regla del reciclado:
> x = c(1,2,3,4)
> x+1
[1] 2 3 4 5
> x^c(1,2)
[1] 1 4 3 16
> x+c(10,11,12,13)
[1] 11 13 15 17
• Producto escalar: x %*% y
• (x1,x2,x3) . (y1,y2,y3) == x1*y1+x2*y2+x3*y3
• %/%: división entera, %%: módulo (resto)
EJEMPLO: CÁLCULO DE LA DISTANCIA
EUCLIDEA
EJEMPLO: CÁLCULO DE LA DISTANCIA
EUCLIDEA
> x = c(1,2,3,4)
> y = c(6,7,8,9)
> x-y
[1] -5 -5 -5 -5
> (x-y)*(x-y)
[1] 25 25 25 25
> x = c(1.1,1.5,3.7)
> y = c(7.9,8.0,1.3)
> x-y
[1] -6.8 -6.5 2.4
> (x-y)*(x-y)
[1] 46.24 42.25 5.76
> sum((x-y)*(x-y))
[1] 94.25
> sqrt(sum((x-y)*(x-y)))
[1] 9.708244
> deuclidea1 = function(x,y)
{return(sqrt(sum((x-y)*(x-y))))}
> deuclidea1(x,y)
[1] 9.708244
> deuclidea2 = function(x,y)
{return(sqrt((x-y) %*% (x-y)))}
> deuclidea2(x,y)
[,1]
[1,] 9.708244
OBJETOS EN R
• Escalares
• Vectores
• Factores
• Matrices
• Data frames
• Listas
FACTORES
• Se utilizan en análisis de datos como una
representación eficiente de valores discretos
(categóricos)
FACTORES
GENERAR VECTORES MEDIANTE
SECUENCIAS
• Crear un vector con enteros de 1 a 1000
• Cuidado con la precedencia de los operadores:
GENERAR VECTORES MEDIANTE
SECUENCIAS
• Secuencias invertidas y secuencias de números
reales:
GENERAR VECTORES MEDIANTE
REPETICIONES
SECUENCIAS ALEATORIAS
• 10 valores de una gaussiana(0,1)
• Gaussiana con media 10 y desviación 3
• 5 valores de t-student con 10 grados de libertad
ACCESO A VECTORES (SUB-SETTING)
• Acceso simple: x[3]
• Acceso mediante índices. Tres tipos:
• Índices lógicos (booleanos)
• Índices por valor
• Índices por nombres
ACCESO A VECTORES MEDIANTE
ÍNDICES LÓGICOS
==, !=, >, <, >=, <=, &, |, !, is.na(), is.nan()
ACCESO A VECTORES MEDIANTE
ÍNDICES BOOLEANOS
• Convertir todos los
valores NA a cero:
> x = c(1,2,NA,3,NA,4)
> x
[1] 1 2 NA 3 NA 4
> x[is.na(x)] = 0
> x
[1] 1 2 0 3 0 4
• Cambiar el signo a
los valores
negativos (igual
que x = abs(x) ):
> x = c(-1, 2, -3, 4)
> x[x<0] = -x[x<0]
> x
[1] 1 2 3 4
ACCESO A VECTORES MEDIANTE
ÍNDICES DE VALORES
Se puede usar el “-” para
excluir valores:
ACCESO A VECTORES POR NOMBRE
• Las posiciones de un vector pueden tener nombre
• Acceso por nombre:
ACCESO AL VECTOR COMPLETO
• Por ejemplo, para borrar todos los elementos de un
vector x:
• x[] = 0 es lo mismo que x[1:length(x)] = 0 (se aplica la “regla
de reciclado”). Asigna 0 a todas las posiciones del vector
• pero es distinto de x = 0, el cual convierte x en un único
valor
> x
[1] 1 2 3 4
> x[]=0
> x
[1] 0 0 0 0
> x = 0
> x
[1] 0
ESTRUCTURAS DE CONTROL
• ESTRUCTURAS DE CONTROL:
• for
• while
• repeat
ESTRUCTURAS DE CONTROL
El bucle for recorre vectores (de
cualquier tipo):
> for (i in c(1,2,3)) { print(i)}
[1] 1
[1] 2
[1] 3
> for (i in c("uno","dos","tres"))
{print(i)}
[1] "uno"
[1] "dos"
[1] "tres"
> i=1
> while(i<4){print(i); i=i+1}
[1] 1
[1] 2
[1] 3
> i=1
> while(TRUE){print(i); i=i+1;
if(i>=4) break}
[1] 1
[1] 2
[1] 3
HACIENDO LAS COSAS A LA MANERA
DE R
• Contar cuantos valores son impares en un vector x
PEOR
MEJOR
CON VECTORIZACIÓN:
sum(x %% 2)
o
sum(x %% 2 == 1)
ESTRUCTURAS DE CONTROL
IF:
> if(i>3) {print(i)}
> if(i>2) {print(i)} else {print(2*i)}
IF es una función!
> x = if(i>3) i else 2*i
> x
[1] 4
ESTRUCTURAS DE CONTROL:
FUNCIONES
• Las funciones son objetos
• Pueden llevar parámetros con nombre con valor por omisión
• Una función devuelve lo último que se ejecuta (se puede utilizar
return, pero no es necesario)
> f = function(x, y=FALSE) {if(y) x else x*x}
> f
function(x, y=FALSE) {if(y) x else x*x}
> f(2)
[1] 4
> f(2,TRUE)
[1] 2
> f(2,y=TRUE)
[1] 2
FICHEROS CON PROGRAMAS (SCRIPTS)
• Archivo / Nuevo script
• Archivo / Abrir script
• CTRL-R: ejecutar una línea del script
• Es necesario usar source(“miscript.R”) cada vez que
modifiquemos el script
• (esto se hará automáticamente cuando usemos Rstudio)
ALGUNOS EJERCICIOS
EXPERIMENTO VECTORIZACIÓN
• Como medir el tiempo: t0 = proc.time()
• Ejercicio: hacer un script que genere dos vectores:
• x=seq(1,10^6)
• y=x*5.2
• Y los multiplique componente a componente de dos
maneras:
• Con un bucle
• x*y
• Medir tiempos y comparar
HACIENDO LAS COSAS AL MODO R
• Sea un vector x = seq(1,10^5)
• Queremos calcular otro vector y de tal manera que
• y[i] = x[i]-x[i+1] para todo i de 1 a length(x)-1
• Hacedlo de dos maneras distintas (con bucle y
vectorizado) y pensad si se os ocurre alguna
variante mas. Medid tiempos.
• Regla: evitar usar bucles en la medida de lo posible
EJERCICIOS
• Crear un vector de 10 elementos así:
• x=sample(1:100, 10)
• Ejercicios:
• Poner a cero los valores pares.
• Poner a cero las posiciones pares. Hacedlo de tres maneras
distintas
• Escribir una función avg_gt con dos argumentos: x y gt (x es
un vector y gt es un real). La función computa la media de
los valores de x mas grandes que gt.
OBJETOS EN R
• Escalares
• Vectores
• Factores
• Matrices
• Data frames
• Listas
MATRICES
• Son como los vectores, pero en DOS dimensiones
• Se pueden crear a partir de un vector y cambiando la
dimensión. Notar que los valores se extienden por columnas:
Comentarios de: R - Análisis de datos (0)
No hay comentarios