Colaborador: Ing. Francisco Valverde P.hD en informática

TIDYVERSE

Utilizando la base de datos interna mtcars, resolver los siguientes enunciados:

Cargamos la libreria tidyverse y visualizamos la base mtcars

library("tidyverse")
## -- Attaching packages --------------------------------------- tidyverse 1.3.1 --
## v ggplot2 3.3.6     v purrr   0.3.4
## v tibble  3.1.7     v dplyr   1.0.9
## v tidyr   1.2.0     v stringr 1.4.0
## v readr   2.1.2     v forcats 0.5.1
## -- Conflicts ------------------------------------------ tidyverse_conflicts() --
## x dplyr::filter() masks stats::filter()
## x dplyr::lag()    masks stats::lag()
view(mtcars)

1. Seleccionamos las 3 primeras columnas del dataset mtcars y mostramos la cabecera

head(select(mtcars,1:3))
##                    mpg cyl disp
## Mazda RX4         21.0   6  160
## Mazda RX4 Wag     21.0   6  160
## Datsun 710        22.8   4  108
## Hornet 4 Drive    21.4   6  258
## Hornet Sportabout 18.7   8  360
## Valiant           18.1   6  225

2. Utiliza la ayuda ?select_helpers para que observes el resultado

Tenemos en cuenta que esta ayuda, nos muestra todas las herramientas de la función select

#?select_helpers

3. Seleccionar las columnas que empiezan por d

head(select(mtcars,starts_with("d")))
##                   disp drat
## Mazda RX4          160 3.90
## Mazda RX4 Wag      160 3.90
## Datsun 710         108 3.85
## Hornet 4 Drive     258 3.08
## Hornet Sportabout  360 3.15
## Valiant            225 2.76

4. Seleccionar las columnas que terminan por p

head(select(mtcars,ends_with("p")))
##                   disp  hp
## Mazda RX4          160 110
## Mazda RX4 Wag      160 110
## Datsun 710         108  93
## Hornet 4 Drive     258 110
## Hornet Sportabout  360 175
## Valiant            225 105

5. head(select( mtcars, -drat, -am )) (Explica que resultado obtienes ?)

head(select( mtcars, -drat, -am ))
##                    mpg cyl disp  hp    wt  qsec vs gear carb
## Mazda RX4         21.0   6  160 110 2.620 16.46  0    4    4
## Mazda RX4 Wag     21.0   6  160 110 2.875 17.02  0    4    4
## Datsun 710        22.8   4  108  93 2.320 18.61  1    4    1
## Hornet 4 Drive    21.4   6  258 110 3.215 19.44  1    3    1
## Hornet Sportabout 18.7   8  360 175 3.440 17.02  0    3    2
## Valiant           18.1   6  225 105 3.460 20.22  1    3    1

Se obtiene como resultado la base de datos mtcars, pero sin las columnas que tienen el nombre de drat y am

6. head(select( mtcars, contains( “a” ) )) (Explica que resultado obtienes ?)

head(select( mtcars, contains( "a" ) ))
##                   drat am gear carb
## Mazda RX4         3.90  1    4    4
## Mazda RX4 Wag     3.90  1    4    4
## Datsun 710        3.85  1    4    1
## Hornet 4 Drive    3.08  0    3    1
## Hornet Sportabout 3.15  0    3    2
## Valiant           2.76  0    3    1

Nos muestra las columnas que en su nombre contengan una letra “a”

7. head(filter( mtcars, mpg > 20, gear == 4)) (Explica que resultado obtienes ?)

head(filter( mtcars, mpg > 20, gear == 4))
##                mpg cyl  disp  hp drat    wt  qsec vs am gear carb
## Mazda RX4     21.0   6 160.0 110 3.90 2.620 16.46  0  1    4    4
## Mazda RX4 Wag 21.0   6 160.0 110 3.90 2.875 17.02  0  1    4    4
## Datsun 710    22.8   4 108.0  93 3.85 2.320 18.61  1  1    4    1
## Merc 240D     24.4   4 146.7  62 3.69 3.190 20.00  1  0    4    2
## Merc 230      22.8   4 140.8  95 3.92 3.150 22.90  1  0    4    2
## Fiat 128      32.4   4  78.7  66 4.08 2.200 19.47  1  1    4    1

EXPLICACION

Filtra los registros que cumplan con las condicionesindicadas, es decir, selecciona los registros que tengan en la columna de mpg mayor a 20 y en la columna gear, los que sean iguales a 4 teniendo en cuenta que filtra y nos muestra los registros que cumplen estas 2 condiciones al mismo tiempo

8. Seleccionar los sujetos con tipo de transmisión (am) 1 que, además, tienen 6 cilindros o menos

seleccion1<-filter(mtcars,am==1 & cyl<=6)
head(seleccion1)
##                 mpg cyl  disp  hp drat    wt  qsec vs am gear carb
## Mazda RX4      21.0   6 160.0 110 3.90 2.620 16.46  0  1    4    4
## Mazda RX4 Wag  21.0   6 160.0 110 3.90 2.875 17.02  0  1    4    4
## Datsun 710     22.8   4 108.0  93 3.85 2.320 18.61  1  1    4    1
## Fiat 128       32.4   4  78.7  66 4.08 2.200 19.47  1  1    4    1
## Honda Civic    30.4   4  75.7  52 4.93 1.615 18.52  1  1    4    2
## Toyota Corolla 33.9   4  71.1  65 4.22 1.835 19.90  1  1    4    1

9. Seleccionar los sujetos que bien consumen menos de 21 mpg o bien tienen menos de 3 carburantes (carb) y menos de 4 engranajes (gear)

selccion2<-filter(mtcars,(mpg<21 | carb<3) & gear<4)
head(selccion2)
##                    mpg cyl  disp  hp drat    wt  qsec vs am gear carb
## Hornet 4 Drive    21.4   6 258.0 110 3.08 3.215 19.44  1  0    3    1
## Hornet Sportabout 18.7   8 360.0 175 3.15 3.440 17.02  0  0    3    2
## Valiant           18.1   6 225.0 105 2.76 3.460 20.22  1  0    3    1
## Duster 360        14.3   8 360.0 245 3.21 3.570 15.84  0  0    3    4
## Merc 450SE        16.4   8 275.8 180 3.07 4.070 17.40  0  0    3    3
## Merc 450SL        17.3   8 275.8 180 3.07 3.730 17.60  0  0    3    3

10. Ordena por cilindrada (cyl) y por desplazamiento (disp)

ordenado<-arrange(mtcars,cyl,disp)
head(ordenado)
##                 mpg cyl  disp  hp drat    wt  qsec vs am gear carb
## Toyota Corolla 33.9   4  71.1  65 4.22 1.835 19.90  1  1    4    1
## Honda Civic    30.4   4  75.7  52 4.93 1.615 18.52  1  1    4    2
## Fiat 128       32.4   4  78.7  66 4.08 2.200 19.47  1  1    4    1
## Fiat X1-9      27.3   4  79.0  66 4.08 1.935 18.90  1  1    4    1
## Lotus Europa   30.4   4  95.1 113 3.77 1.513 16.90  1  1    5    2
## Datsun 710     22.8   4 108.0  93 3.85 2.320 18.61  1  1    4    1

11. Crea una nueva columna que indique los kilogramos que pesa el coche,sabiendo que 1 libra = 0.45 kg. La variable wt indica el peso en libras.

bd<-mtcars
bd$Libras<-bd$wt*0.45
head(bd)
##                    mpg cyl disp  hp drat    wt  qsec vs am gear carb  Libras
## Mazda RX4         21.0   6  160 110 3.90 2.620 16.46  0  1    4    4 1.17900
## Mazda RX4 Wag     21.0   6  160 110 3.90 2.875 17.02  0  1    4    4 1.29375
## Datsun 710        22.8   4  108  93 3.85 2.320 18.61  1  1    4    1 1.04400
## Hornet 4 Drive    21.4   6  258 110 3.08 3.215 19.44  1  0    3    1 1.44675
## Hornet Sportabout 18.7   8  360 175 3.15 3.440 17.02  0  0    3    2 1.54800
## Valiant           18.1   6  225 105 2.76 3.460 20.22  1  0    3    1 1.55700

12. La función summarise() agrupa los valores en una tabla de acuerdo a la función que indiquemos. Calcula la media de disp usando la función summarise:

summarise(mtcars,mean(disp))
##   mean(disp)
## 1   230.7219

13. summarise(group_by(mtcars, cyl), max = max(disp)) (Explica que resultado obtienes ?)

summarise(group_by(mtcars, cyl), max=max(disp))
## # A tibble: 3 x 2
##     cyl   max
##   <dbl> <dbl>
## 1     4  147.
## 2     6  258 
## 3     8  472

EXPLICACION

Agrupa por cilindraje y devuelve el maximo de cada valor de la agrupacion

14. mtcars %>% select( mpg:disp )%>% head (Explica que resultado obtienes ?)

mtcars %>% select( mpg:disp )%>%  head  
##                    mpg cyl disp
## Mazda RX4         21.0   6  160
## Mazda RX4 Wag     21.0   6  160
## Datsun 710        22.8   4  108
## Hornet 4 Drive    21.4   6  258
## Hornet Sportabout 18.7   8  360
## Valiant           18.1   6  225
View(mtcars)

EXPLICACION

Nos muetra la cabezera con los campos que contienen las variables de mpg hasta las variables de cyl

15. head(select(select(mtcars, contains(“a”)), -drat, -am)) (Explica que resultado obtienes ?)

head(select(select(mtcars, contains("a")), -drat, -am))
##                   gear carb
## Mazda RX4            4    4
## Mazda RX4 Wag        4    4
## Datsun 710           4    1
## Hornet 4 Drive       3    1
## Hornet Sportabout    3    2
## Valiant              3    1

EXPLICACION

Nos muestra los campos con las variables que contienen la letra a excepto drat y am

16. Utilizando pipes ejecuta el ejercicio 15

mtcars %>%
  head %>% 
  select(-drat,-am)%>%
  select(contains("a"))
##                   gear carb
## Mazda RX4            4    4
## Mazda RX4 Wag        4    4
## Datsun 710           4    1
## Hornet 4 Drive       3    1
## Hornet Sportabout    3    2
## Valiant              3    1

17.-mtcars_filtered = filter(mtcars, wt > 1.5)

mtcars_grouped = group_by(mtcars_filtered, cyl) summarise(mtcars_grouped, mn = mean(mpg), sd = sd(mpg)) (Explica que resultado obtienes ?)

mtcars_filtered = filter(mtcars, wt > 1.5)
head(mtcars_filtered)
##                    mpg cyl disp  hp drat    wt  qsec vs am gear carb
## Mazda RX4         21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
## Mazda RX4 Wag     21.0   6  160 110 3.90 2.875 17.02  0  1    4    4
## Datsun 710        22.8   4  108  93 3.85 2.320 18.61  1  1    4    1
## Hornet 4 Drive    21.4   6  258 110 3.08 3.215 19.44  1  0    3    1
## Hornet Sportabout 18.7   8  360 175 3.15 3.440 17.02  0  0    3    2
## Valiant           18.1   6  225 105 2.76 3.460 20.22  1  0    3    1

EXPLICACION

Nos muestra la base mtcars con el campo wt condicionado a que sea mayor que 1.5

mtcars_grouped = group_by(mtcars_filtered, cyl)
View(mtcars_grouped)

EXPLICACION

Agrupa por el campo cyl en tres grupos que son 4,6,8 lo que habiamos filtrado

summarise(mtcars_grouped, mn = mean(mpg), sd = sd(mpg))
## # A tibble: 3 x 3
##     cyl    mn    sd
##   <dbl> <dbl> <dbl>
## 1     4  26.7  4.51
## 2     6  19.7  1.45
## 3     8  15.1  2.56

EXPLICACION

Nos muestra la media de nuestro campo mpg agrupado en los grupos anteriormente realizados y la desviación estandar de nuestro campo mpg igualmente agrupado por el campo cyl cabe aclaar que tambien esta aplicado el filtro de los datos que son wt>1.5 y cambia los nombres de los campos en la media mn y la desviación sd

18. Utilizando pipes ejecuta el ejercicio 17

mtcars%>% 
  filter(wt>1.5) %>% 
  group_by(cyl) %>% 
  summarise(mn = mean(mpg), sd = sd(mpg))
## # A tibble: 3 x 3
##     cyl    mn    sd
##   <dbl> <dbl> <dbl>
## 1     4  26.7  4.51
## 2     6  19.7  1.45
## 3     8  15.1  2.56

19. Es obligatorio utilizar las funciones del paquete dplyr recomendable utilizar pipes %>% para los siguientes ejercicios

20. Descarga el fichero de datos vuelos.csv situado en http://gauss.inf.um.es/datos/; en local o localiza la url donde se encuentra

21. Descarga el archivo y Guarda los datos en una variable llamada vuelos

head(read.csv("C:\\Users\\DETPC\\OneDrive\\Documentos\\3er semestre\\PROGRAMACION\\TRABAJOS GRUPALES\\TALLER 10\\vuelos.csv", header = T, sep = ",", dec = "."))
##         date hour minute  dep  arr dep_delay arr_delay carrier flight dest
## 1 2011-01-01   14      0 1400 1500         0       -10      AA    428  DFW
## 2 2011-01-02   14      1 1401 1501         1        -9      AA    428  DFW
## 3 2011-01-03   13     52 1352 1502        -8        -8      AA    428  DFW
## 4 2011-01-04   14      3 1403 1513         3         3      AA    428  DFW
## 5 2011-01-05   14      5 1405 1507         5        -3      AA    428  DFW
## 6 2011-01-06   13     59 1359 1503        -1        -7      AA    428  DFW
##    plane cancelled time dist
## 1 N576AA         0   40  224
## 2 N557AA         0   45  224
## 3 N541AA         0   48  224
## 4 N403AA         0   39  224
## 5 N492AA         0   44  224
## 6 N262AA         0   45  224
vuelos <- read.csv("C:\\Users\\DETPC\\OneDrive\\Documentos\\3er semestre\\PROGRAMACION\\TRABAJOS GRUPALES\\TALLER 10\\vuelos.csv", header = T, sep = ",", dec = ".")
View(vuelos)

22.Selecciona los vuelos con destino SFO u OAK utilizando las funciones del paquete dplyr. ¿Con cuantos vuelos nos quedamos?

vuelos_destino1 <- filter(vuelos, dest=="SFO") 
head(vuelos_destino1)
##           date hour minute  dep  arr dep_delay arr_delay carrier flight dest
## 373 2011-01-31    8     51  851 1052         1       -27      CO    170  SFO
## 389 2011-01-31   11     29 1129 1351         4         1      CO    270  SFO
## 402 2011-01-31   14     32 1432 1656         7         5      CO    370  SFO
## 436 2011-01-31   17     48 1748 2001         3        -4      CO    570  SFO
## 467 2011-01-31   21     43 2143 2338        50        24      CO    770  SFO
## 468 2011-01-31    7     29  729 1002        -1         2      CO    771  SFO
##      plane cancelled time dist
## 373 N35407         0  225 1635
## 389 N37420         0  228 1635
## 402 N27213         0  229 1635
## 436 N75436         0  236 1635
## 467 N37281         0  224 1635
## 468 N26226         0  237 1635
vuelos_destino2 <- filter(vuelos, dest=="OAK") 
head(vuelos_destino2)
##            date hour minute  dep  arr dep_delay arr_delay carrier flight dest
## 7709 2011-01-01   17     50 1750 2002        10         2      WN   1911  OAK
## 7822 2011-01-02   20     19 2019 2217        44        22      WN   1106  OAK
## 7823 2011-01-02   10     43 1043 1254        28        24      WN   1892  OAK
## 7951 2011-01-03   10     32 1032 1235         2       -15      WN      9  OAK
## 7952 2011-01-03   21     35 2135 2337        60        42      WN    165  OAK
## 8082 2011-01-04   10     34 1034 1237         4       -13      WN      9  OAK
##       plane cancelled time dist
## 7709 N723SW         0  237 1642
## 7822 N407WN         0  224 1642
## 7823 N403WN         0  240 1642
## 7951 N404WN         0  230 1642
## 7952 N232WN         0  230 1642
## 8082 N222WN         0  230 1642

23. Selecciona los vuelos que se han retrasado más de una hora. ¿Cuál es el destino que más se retrasa en proporción al número de vuelos?

vuelos_retrasos <- select(vuelos, arr_delay)
head(vuelos_retrasos)
##   arr_delay
## 1       -10
## 2        -9
## 3        -8
## 4         3
## 5        -3
## 6        -7
vuelos_retrasos1 <- filter(vuelos_retrasos, arr_delay >1 )
head(vuelos_retrasos1)
##    arr_delay
## 4          3
## 9         44
## 10        43
## 11        29
## 12         5
## 17        84

24. Encuentra 4 maneras diferentes de utilizar la función select para seleccionar las variables relacionadas con los retrasos (delay)

head(select(vuelos, dep_delay))
##   dep_delay
## 1         0
## 2         1
## 3        -8
## 4         3
## 5         5
## 6        -1
head(select(vuelos, arr_delay, everything()))
##   arr_delay       date hour minute  dep  arr dep_delay carrier flight dest
## 1       -10 2011-01-01   14      0 1400 1500         0      AA    428  DFW
## 2        -9 2011-01-02   14      1 1401 1501         1      AA    428  DFW
## 3        -8 2011-01-03   13     52 1352 1502        -8      AA    428  DFW
## 4         3 2011-01-04   14      3 1403 1513         3      AA    428  DFW
## 5        -3 2011-01-05   14      5 1405 1507         5      AA    428  DFW
## 6        -7 2011-01-06   13     59 1359 1503        -1      AA    428  DFW
##    plane cancelled time dist
## 1 N576AA         0   40  224
## 2 N557AA         0   45  224
## 3 N541AA         0   48  224
## 4 N403AA         0   39  224
## 5 N492AA         0   44  224
## 6 N262AA         0   45  224
var <- c("dep_delay", "arr_delay")
head( select(vuelos, one_of(var)))
##   dep_delay arr_delay
## 1         0       -10
## 2         1        -9
## 3        -8        -8
## 4         3         3
## 5         5        -3
## 6        -1        -7
head( select(vuelos, matches(".d.")))
##   dep_delay arr_delay
## 1         0       -10
## 2         1        -9
## 3        -8        -8
## 4         3         3
## 5         5        -3
## 6        -1        -7

25. Agrupa los vuelos por fecha y calcula: media, mediana y cuartil 75 de los retrasos en los vuelos por hora

head(select(vuelos, dep_delay))
##   dep_delay
## 1         0
## 2         1
## 3        -8
## 4         3
## 5         5
## 6        -1
head(select(vuelos, arr_delay, everything()))
##   arr_delay       date hour minute  dep  arr dep_delay carrier flight dest
## 1       -10 2011-01-01   14      0 1400 1500         0      AA    428  DFW
## 2        -9 2011-01-02   14      1 1401 1501         1      AA    428  DFW
## 3        -8 2011-01-03   13     52 1352 1502        -8      AA    428  DFW
## 4         3 2011-01-04   14      3 1403 1513         3      AA    428  DFW
## 5        -3 2011-01-05   14      5 1405 1507         5      AA    428  DFW
## 6        -7 2011-01-06   13     59 1359 1503        -1      AA    428  DFW
##    plane cancelled time dist
## 1 N576AA         0   40  224
## 2 N557AA         0   45  224
## 3 N541AA         0   48  224
## 4 N403AA         0   39  224
## 5 N492AA         0   44  224
## 6 N262AA         0   45  224
var <- c("dep_delay", "arr_delay")
head( select(vuelos, one_of(var)))
##   dep_delay arr_delay
## 1         0       -10
## 2         1        -9
## 3        -8        -8
## 4         3         3
## 5         5        -3
## 6        -1        -7
head( select(vuelos, matches(".d.")))
##   dep_delay arr_delay
## 1         0       -10
## 2         1        -9
## 3        -8        -8
## 4         3         3
## 5         5        -3
## 6        -1        -7

26. Utilizando pipes calcula la media de retraso en los vuelos por día y hora, la cantidad de vuelos por día y hora y luego muestra solo los casos para los cuales haya más de 10

mean(vuelos$dep_delay, na.rm = T)
## [1] 9.359078
mean(vuelos$arr_delay, na.rm = T)
## [1] 7.592729
head(vuelos)
##         date hour minute  dep  arr dep_delay arr_delay carrier flight dest
## 1 2011-01-01   14      0 1400 1500         0       -10      AA    428  DFW
## 2 2011-01-02   14      1 1401 1501         1        -9      AA    428  DFW
## 3 2011-01-03   13     52 1352 1502        -8        -8      AA    428  DFW
## 4 2011-01-04   14      3 1403 1513         3         3      AA    428  DFW
## 5 2011-01-05   14      5 1405 1507         5        -3      AA    428  DFW
## 6 2011-01-06   13     59 1359 1503        -1        -7      AA    428  DFW
##    plane cancelled time dist
## 1 N576AA         0   40  224
## 2 N557AA         0   45  224
## 3 N541AA         0   48  224
## 4 N403AA         0   39  224
## 5 N492AA         0   44  224
## 6 N262AA         0   45  224
head(filter(vuelos, dep_delay>10,arr_delay>10)) #Muestra los valores de retrasos de los vuelos mayores a 10
##          date hour minute  dep  arr dep_delay arr_delay carrier flight dest
## 9  2011-01-09   14     43 1443 1554        43        44      AA    428  DFW
## 10 2011-01-10   14     43 1443 1553        43        43      AA    428  DFW
## 11 2011-01-11   14     29 1429 1539        29        29      AA    428  DFW
## 17 2011-01-17   15     30 1530 1634        90        84      AA    428  DFW
## 20 2011-01-20   15      7 1507 1622        67        72      AA    428  DFW
## 31 2011-01-31   14     41 1441 1553        41        43      AA    428  DFW
##     plane cancelled time dist
## 9  N476AA         0   41  224
## 10 N504AA         0   45  224
## 11 N565AA         0   42  224
## 17 N518AA         0   48  224
## 20 N425AA         0   42  224
## 31 N505AA         0   39  224

27. Importar la base de datos realizada en MYSQL a R (Consultarlo como hacerlo)

Tenemos en cuenta que primero debemos instalar el paquete RODBC y previamente haber hecho una coneccion entre R y MySQL

library("RODBC")
conexion <- odbcConnect("vuelos.prueba",uid = "root",pwd = "luisdavid")
vuelomysql <- sqlQuery(conexion,"SELECT * FROM vuelos1")
head(vuelomysql)
##         date hour minute  dep  arr dep_delay arr_delay carrier flight dest
## 1 2011-01-01   14      0 1400 1500         0       -10      AA    428  DFW
## 2 2011-01-02   14      1 1401 1501         1        -9      AA    428  DFW
## 3 2011-01-03   13     52 1352 1502        -8        -8      AA    428  DFW
## 4 2011-01-04   14      3 1403 1513         3         3      AA    428  DFW
## 5 2011-01-05   14      5 1405 1507         5        -3      AA    428  DFW
## 6 2011-01-06   13     59 1359 1503        -1        -7      AA    428  DFW
##    plane cancelled time dist
## 1 N576AA         0   40  224
## 2 N557AA         0   45  224
## 3 N541AA         0   48  224
## 4 N403AA         0   39  224
## 5 N492AA         0   44  224
## 6 N262AA         0   45  224