-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathOperaciones y exploración.Rmd
291 lines (218 loc) · 11.6 KB
/
Operaciones y exploración.Rmd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
---
title: "Operaciones y exploración"
author: "Christian Urcuqui"
date: "17 de enero de 2019"
output: html_document
---
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
```
# Operaciones, funciones y gráficos en R
Vamos a utilizar otras funciones y operaciones en R que nos permitan filtrar y hacer operaciones en los datos. A continuación, se muestra una tabla con la lista de operaciones tanto aritméticas como lógicas que se pueden realizar entre los objetos de R.
<img src='https://github.com/urcuqui/Data-Science/blob/master/Utilities/R/operations.png?raw=true' width='250' height='350'>
Hagamos unas operaciones básicas, nosotros podemos utilizar R como una especie de "calculadora"" (muy parecido a la operación entre celdas en Excel). En el siguiente cuadro de código hay unas variables númericas con valores ya asignados con el fin que usted pueda realizar las siguientes operaciones:
+ x + y
+ x * y
+ -x
+ sqrt(x)
+ x == y
+ x != y #DIFERENCIA
_Ejercicio 1_
```{R Oexample1}
#Ejecute las siguientes tres líneas de código para crear las variables
x <- c(1, 2, 4, 7, 9, 0)
y <- 4
z <- c(0.5, 2, 3, 5, 1, 0)
# Escriba en el siguiente espacio la operación suma entre "x" y "y", y asígnelo a resultado_suma (1 línea de código)
resultado_suma <- x +y
# Escriba en el siguiente espacio la operación multiplicación entre "x" y "z", y asígnelo a resultado_multiplicacion (1 línea de código)
resultado_multiplicacion <- x*z
# Escriba en el siguiente espacio la operación multiplicación negativa a "z", y asígnelo a resultado_negativo (1 línea de código)
resultado_negativo <- -z
# Escriba en el siguiente espacio la operación de raíz cuadrada "y", y asígnelo a resultado_raiz (1 línea de código)
resultado_raiz <- sqrt(y)
# Escriba en el siguiente espacio la operación lógica de igualdad entre "x" y "z", y asígnelo a resultado_igualdad (1 línea de código)
resultado_igualdad <- x==z
# Escriba en el siguiente espacio la operación lógica de diferencia entre "x" y "y", y asígnelo a resultado_igualdad (1 línea de código)
resultado_diferencia <- x!=y
# --------------------------- #
# Ahora ejecute las siguientes líneas de código que le permitirán observar los resultados de sus operaciones.
print("Resultado Suma")
resultado_suma
print("Resultado multiplicación")
resultado_multiplicacion
print("Resultado negativo")
resultado_negativo
print("Resultado raíz cuadrada")
resultado_raiz
print("Resultado de operación lógica: igualdad")
resultado_igualdad
print("Resultado de operación lógica: diferencia")
resultado_diferencia
```
Ahora, exploremos la función ```filter()``` del paquete``` dplyr```, esta función nos permite obtener un subconjunto de un observaciones de un conjunto más grande basado en los parámetros que le suministremos, vea el siguiente ejemplo.
```
filter(flights, carrier == "UA")
```
```{R example1}
flights
filter(flights, carrier == "UA")
```
La anterior línea de código nos permite obtener todos los vuelos realizados por una sola aerolínea (para nuestro caso aquella abreviada con "UA").
En la siguiente tabla puede observar la sintaxis para las operaciones lógicas en R.
<img src='https://github.com/urcuqui/Data-Science/blob/master/Utilities/R/logical.png?raw=true' width='250' height='250'>
Nosotros podemos realizar varias operaciones lógicas enlazadas entre sí, por ejemplo:
```
filter(flights, carrier == "B6" & distance <= 1500)
```
La anterior línea de código nos da los vuelos realizados en el año 2014 y que tuvieron una distancia hasta 1500 millas.
Ahora, le proponemos como ejercicio obtener el subconjunto de datos de los vuelos de la aerolinea "AA" que tuvieron una distancia entre 1300 y 1800 millas.
_Ejercicio 2_
```{R example2}
library("nycflights13")
library("tidyverse")
#with para decir que voy a trbajar con las variables de esa libreria
with(nycflights13, {
# Escriba en el siguiente espacio el filtro que permita obtener el subconjunto de vuelos (1 línea de código)
# --------------------------- #
})
```
## Gráficos
R es una plataforma muy buena para el desarrollo de visualizaciones.
```{R GExample1}
attach(mtcars)
plot(mpg, wt) # es la función encargada de utilizar el visualizador de R y generar en él un gráfico de dispersión entre las variables cuantitativas
abline(lm(wt~mpg)) # encargada de agregar la línea que mejor se ajusta a los datos de las dos variables
title("Regression of MPG on Weight") # agrega el titulo al plot
detach(mtcars)
```
Ahora procederemos a guardar el plot en un archivo .pdf (previamente visto).
```{R GExample2}
dev.new()
pdf("mygraph.pdf")
attach(mtcars)
plot(mpg, wt) # es la función encargada de utilizar el visualizador de R y generar en él un gráfico de dispersión entre las variables cuantitativas
abline(lm(wt~mpg)) # encargada de agregar la línea que mejor se ajusta a los datos de las dos variables
title("Regression of MPG on Weight")
dev.off()
```
Es importante tener en cuenta que si vamos a generar distintos insumos podemos utilizar la función ```dev.new()``` con el fin de especificar una nueva visualización y no exista la posibilidad de borrar alguno creado previamente.
Vamos a empezar a explorar la aplicación de visualizaciones en R a través del siguiente ejercicio.
_Ejercicio 1_
Por favor cree un data frame con los siguientes valores:
```
dose <- c(20, 30, 40, 45, 60)
drugA <- c(16, 20, 27, 40, 60)
drugB <- c(15, 18, 25, 31, 40)
```
```{R exercise1}
# escriba las lineas de código necesarias para crear el data frame con los valores solicitados y que tenga el nombre df
dose <- c(20, 30, 40, 45, 60)
drugA <- c(16, 20, 27, 40, 60)
drugB <- c(15, 18, 25, 31, 40)
df<- data.frame(dose,drugA,drugB)
# -----------------------------------
```
Ahora veamos cómo crear un simple plot de una línea que relaciona la tendencia de dos variables cuantitativas
```{R GExample3}
myplot <- plot(df$dose, df$drugA, type="b")
myplot
```
La función ```plot()``` es genérica para objetos en R y su salida dependerá del tipo de objeto a ser visualizado. Para el caso anterior podemos ver las variables de la siguiente forma en un plano 'x' y 'y' ```plot(x, y, type="b") ```, los datos para 'x' iran en el eje horizontal y los de 'y' para el eje vertical. La opción ```type``` nos indica que tanto los puntos y las lineas deben ser visualizadas.
_Ejercicio 2_
Utilice la ayuda en la función plot y busque la manera de cambiar los títulos de ambos ejes de la anterior visualización.
```{R exercise2}
# 1 linea de código
# --------------------
```
### Parámetros visuales
Nosotros podemos cambiar muchos parámetros a una visualización (por ejemplo, estilo de letra, colores, ejes y títulos) a través de los parámetros visuales.
Una forma de acceder a estas opciones es través de la función ```par()```, su formato es ```par(optionname=value, optionname=value, ...)```. Especificando ```par()``` sin parámetros produce una lista de las configuraciones visuales actuales y adicionando la sentencia ```no.readonly=TRUE```como parámetro a ```par() ```, esta función retorna la lista de las configuraciones visuales que se pueden modificar.
```{R GExample4}
par(no.readonly=TRUE)
```
Vamos a modificar alguna de estas opciones y adicionarlas al plot previamente creado.
```{R GExample5}
opar <- par(no.readonly=TRUE)
#lty es el tipo de linea 0=blank, 1=solid (default), 2=dashed, 3=dotted, 4=dotdash, 5=longdash, 6=twodash), también revise los siguientes caracteres como parámetros "blank", "solid", "dashed", "dotted", "dotdash", "longdash", or "twodash"
#pch nos permite cambiar el simbolo por cada punto que representa un dato en la visualización
par(lty=2, pch=17)
plot(dose, drugA, type="b")
par(opar)
```
También podemos hacer las modificaciones visuales llamando varias veces la función ```par()```, por ejemplo
```
par(lty=2)
par(pch=17)
```
O podemos ir directamente a los parámetros del plot, por ejemplo
```
plot(dose, drugA. type="b", lty=2. pch=17)
```
### Símbolos y líneas
Ya hemos visto algunos parámetros que nos permiten acceder a las modificaciones visuales, pero existen otro conjunto que puede ser consultado en la ayuda de par, algunos de estos son:
| __Parámetro__ | __Descripción__ |
|----------------|-----------------------------------------------------------------------|
| _pch_ | Especifica el símbolo a usar en el punto que representa al dato en la visualización. Los valores de este parámetro van de 0-25. |
| _cex_ | Especifica el tamaño del símbolo que representa al dato en la visualización. Un plot inicia por default en 1, si se quiere especificar un 50% más grande entonces se define 1.5 como entrada, si se quiere un 50% más pequeño entonces se ingresa 0.5. |
| _lty_ | Especifica el tipo de linea. |
| _lwd_ | Especifica el grosor de la linea, por default viene con un valor de 1. Si se desea tener un valor el doble de grande entonces se utiliza el 2. |
```{R GExample6}
plot(dose, drugA, type="b", lty=3, lwd=3, pch=15, cex=2)
```
### Símbolos y líneas
podemos también acceder a las propiedades de los colores del plot.
| __Parámetro__ | __Descripción__ |
|----------------|-----------------------------------------------------------------------|
| _col_ | Define el color, algunas funciones (lineas y pasteles) aceptaran vectors con valores, por ejemplo ```col=c("red", "blue")```. |
| _co.axis_ | Color para los textos del los ejes |
| _col.lab_ | Color para las etiquetas |
| _col.main_ | Color para el titulo. |
| _col.sub_ | Color para los subtitulos. |
| _col.fg_ | Color para el primer plano |
| _col.bg_ | Color para el fondo |
Podemos definir los colores con un indice, nombre, hexadecimal, RGB o HSV. Por ejemplo, ```col=1, col="white", col="#FFFFFF", col=rgb(1,1,1), and col=hsv(0,0,1)``` son equivalentes para el color blanco.
```{R GExample7}
# la siguiente función retorna los colores disponibles
colors()
```
Existen funciones que nos permiten crear vectores de colores contiguos, entre estos podemos encontrar ```rainbow(), heat.colors(), terrain.colors(), topo.colors(), and cm.colors().```, por ejemplo, ```rainbow(10)``` produce un vector contiguo de colores del arcoiris, ```gray()``` genera los niveles de grises.
```{R GExample8}
n <- 10
mycolors <- rainbow(n)
#?pie me declara el pastel
#?rep
pie(rep(1,n), labels=mycolors, col=mycolors)
mygrays <- gray(0:n/n)
pie(rep(1,n), labels= mygrays, col = mygrays)
#plot con varias modificaciones
plot(1:7, rnorm(7),
type = "s", xaxt = "n", frame = FALSE, col = "red")
title("Main Title", sub = "sub title",
cex.main = 2, font.main= 4, col.main= "green",
cex.sub = 0.75, font.sub = 3, col.sub = "yellow")
axis(1, 1:7, LETTERS[1:7], col.axis = "blue", col.sub="green")
```
__Ejercicio 1__
1. Revise el diccionario de datos del dataset mpg del paquete ggplot2 (?mpg)
2. Cargue el dataset mpg del paquete ggplot2 y cree un diagrama de dispersión de las variables disp y hwy
```{R Excercise1}
library("tidyverse")
ggplot2::mpg
plot(ggplot2::mpg$displ,ggplot2::mpg$hwy)
```
¿Logra encontrar algún patrón en los datos?
__Ejercicio 1__
Asocie al anterior plot una tercera dimensión, es decir, asigne al párametro de color la variable class
```{R Excercise1}
attach(ggplot2::mpg)
class_factor <- as.factor(class)# class es una variable del dataset
View(class_factor)
color_easy <- c("red", "blue", "yellow", "green", "pink", "purple", "salmon2")[class_factor]
# una linea de código
plot(displ,hwy,col=color_easy)
# -------------------------------
detach(ggplot2::mpg)
```
## Referencias
+ R IN ACTION: Data analysis and graphics with R