Este trabajo es la culminación del semestre de la materia de matemáticas I de la Facultad de Economía, es importante recordar que muchos de nosotros no teníamos un conocimiento previo de R, pero esta modalidad a distancia permitió que aprendiéramos de manera conjunta, las herramientas y la teoría.
Me refiero como herramienta a R ya que es auxiliar y complementaria.
Lo más importante (o interesante) es que una vez estando trabajando, la imaginación despierta y podemos interactuar de manera más positiva en el complejo manejo de los distintos lenguajes de programación.
Te invitamos a descubrir los resultados.
library(dplyr) library(magrittr) library(knitr) library(ggplot2) library(rvest) library(tidyr) library(ggmap)
I.Analizamos los resultados de los pilotos de F1 durante la temporada 2020
# Importamos los resultados de la temporada 2020 de la F1 ----------------
# Echamos un vistazo a las estadisticas en el siguiente enlace
browseURL('https://www.formel1.de/rennergebnisse/wm-stand/2020/fahrerwertung')
# Fijamos los contenidos de la tabla HTML dentro de la variable f1
f1 <- read_html('https://www.formel1.de/rennergebnisse/wm-stand/2020/fahrerwertung') %>%
html_node('table') %>%
html_table()
# Mostramos nuestros datos
f1
## Pos. Fahrer Pkt.
## 1 1 Lewis Hamilton 347 12 25 26 25 19 25 25 7 26 15 25 26 26 25 25 -
## 2 2 Valtteri Bottas 223 25 18 15 - 15 16 18 10 18 26 - 18 18 - 4 4
## 3 3 Max Verstappen 214 - 15 18 19 25 18 15 - - 18 19 15 - 8 19 -
## 4 4 Sergio Perez 125 8 8 6 - - 10 1 1 10 12 12 6 8 18 - 25
## 5 5 Daniel Ricciardo 119 - 4 4 12 - - 13 8 12 10 15 2 15 1 6 10
## 6 6 Carlos Sainz 105 10 3 2 - - 8 - 18 - - 10 8 6 10 10 12
## 7 7 Alexander Albon 105 - 12 10 4 10 4 8 - 15 1 - - - 6 15 8
## 8 8 Charles Leclerc 98 18 - - 15 12 - - - 4 8 6 12 10 12 1 -
## 9 9 Lando Norris 97 16 10 - 10 2 1 6 12 8 - - - 4 5 12 1
## 10 10 Pierre Gasly 75 6 - - 6 - 2 4 25 - 2 8 10 - - 8 -
## 11 11 Lance Stroll 75 - 6 12 2 8 12 2 15 - - - - - 2 - 15
## 12 12 Esteban Ocon 62 4 - - 8 4 - 10 4 - 6 - 4 - - 2 18
## 13 13 Sebastian Vettel 33 1 - 8 1 - 6 - - 1 - - 1 - 15 - -
## 14 14 Daniil Kwjat 32 - 1 - - 1 - - 2 6 4 - - 12 - - 6
## 15 15 Nico Hülkenberg 10 - - - - 6 - - - - - 4 - - - - -
## 16 16 Kimi Räikkönen 4 - - - - - - - - 2 - - - 2 - - -
## 17 17 Antonio Giovinazzi 4 2 - - - - - - - - - 1 - 1 - - -
## 18 18 George Russell 3 - - - - - - - - - - - - - - - 3
## 19 19 Romain Grosjean 2 - - - - - - - - - - 2 - - - - -
## 20 20 Kevin Magnussen 1 - - 1 - - - - - - - - - - - - -
## 21 21 Nicholas Latifi - - - - - - - - - - - - - - - - -
## 22 22 Jack Aitken - - - - - - - - - - - - - - - - -
## 23 23 Pietro Fittipaldi - - - - - - - - - - - - - - - - -
##
## 1 15
## 2 18
## 3 25
## 4 -
## 5 7
## 6 8
## 7 12
## 8 -
## 9 10
## 10 4
## 11 1
## 12 2
## 13 -
## 14 -
## 15 -
## 16 -
## 17 -
## 18 -
## 19 -
## 20 -
## 21 -
## 22 -
## 23 -
II.Procedemos a limpiar la información y clasificarla de manera concisa
# Transformamos y limpiamos la información de los pilotos -----------------------------------------------
# Añadimos los titulos de las columnas restantes
colnames(f1) <- c('Pos', 'Piloto', 'Total', sprintf('R%02d', 1:17))
# Convertimos a un "tibble data frame" y filtramos a los 8 mejores pilotos
f1 <- as_tibble(f1) %>%
filter(as.integer(Pos) <= 9)
# Convertimos a Piloto en una variable factorial, reemplazamos todos los '-' con ceros, convertimos a formato largo
f1$Piloto <- as.factor(f1$Piloto)
f1[, -2] <- apply(f1[, -2], 2, function(x) as.integer(gsub('-', '0', as.character(x))))
f1long <- gather(f1, Carrera, Puntos, R01:R17)
# Y así se ve mejor
f1long
## # A tibble: 153 x 5
## Pos Piloto Total Carrera Puntos
## <int> <fct> <int> <chr> <int>
## 1 1 Lewis Hamilton 347 R01 12
## 2 2 Valtteri Bottas 223 R01 25
## 3 3 Max Verstappen 214 R01 0
## 4 4 Sergio Perez 125 R01 8
## 5 5 Daniel Ricciardo 119 R01 0
## 6 6 Carlos Sainz 105 R01 10
## 7 7 Alexander Albon 105 R01 0
## 8 8 Charles Leclerc 98 R01 18
## 9 9 Lando Norris 97 R01 16
## 10 1 Lewis Hamilton 347 R02 25
## # … with 143 more rows
III.Graficamos la trayectoria a lo largo de la temporada de los 9 mejores pilotos
# Ahora añadimos algunas graficas ------------------------------------------------------
# '9 pilotos'
ggplot(f1long, aes(x = Carrera, y = Puntos, group = Piloto, colour = Piloto)) +
geom_line() +
scale_x_discrete(breaks=c('R01', 'R04', 'R08', 'R12', 'R17')) +
labs(title = 'Resultados Fórmula 1 2020, 9 mejores pilotos',
caption = 'fuente: www.formel1.de')
IV.A continuación, se muestra una gráfica independiente del desempeño de los 9 mejores pilotos
# Grafica para cada piloto
ggplot(f1long, aes(x = Carrera, y = Puntos, group = Piloto, colour = Piloto)) +
geom_line(show.legend = FALSE) + facet_wrap(~ Piloto) +
scale_x_discrete(breaks=c('R01', 'R04', 'R08', 'R12', 'R17')) +
labs(title = 'Resultados Fórmula 1 2020, 9 mejores pilotos',
caption = 'fuente: www.formel1.de')
V.Ahora analizamos las estadísticas del campeonato de constructores
# Importamos los resultados del campeonato de constructores 2020 ----------------
# Tomamos nuestra información de la siguiente pagina web
browseURL('https://www.formel1.de/rennergebnisse/wm-stand/2020/konstrukteurswertung')
# Fijamos los contenidos de la tabla HTML dentro de la variable f2
f2 <- read_html('https://www.formel1.de/rennergebnisse/wm-stand/2020/konstrukteurswertung') %>%
html_node('table') %>%
html_table()
# Display our data
f2
## Pos. Team Pkt.
## 1 1 Mercedes-Benz 573 37 43 41 25 34 41 43 17 44 41 25 44 44 25 29 7 33
## 2 2 Red Bull Racing 319 - 27 28 23 35 22 23 - 15 19 19 15 - 14 34 8 37
## 3 3 McLaren 202 26 13 2 10 2 9 6 30 8 - 10 8 10 15 22 13 18
## 4 4 Racing Point 195 8 14 18 2 14 22 3 16 10 12 16 6 8 20 - 40 1
## 5 5 Renault 181 4 4 4 20 4 - 23 12 12 16 15 6 15 1 8 28 9
## 6 6 Ferrari 131 19 - 8 16 12 6 - - 5 8 6 13 10 27 1 - -
## 7 7 AlphaTauri 107 6 1 - 6 1 2 4 27 6 6 8 10 12 - 8 6 4
## 8 8 Alfa Romeo 8 2 - - - - - - - 2 - 1 - 3 - - - -
## 9 9 Haas 3 - - 1 - - - - - - - 2 - - - - - -
## 10 10 Williams - - - - - - - - - - - - - - - - - -
VI.Analizamos los datos del campeonato de constructores
# Transformamos y limpiamos la informacion de las escuderias -----------------------------------------------
# Añadimos los titulos de las columnas restantes
colnames(f2) <- c('Pos', 'Escuderia', 'Total', sprintf('R%02d', 1:17))
# Convertimos a un "tibble data frame" y filtramos a las 9 mejores escuderias
f1 <- as_tibble(f2) %>%
filter(as.integer(Pos) <= 9)
# Convertimos a Escuderia en una variable factorial, reemplazamos todos los '-' con ceros, convertimos a formato largo
f2$Escuderia <- as.factor(f2$Escuderia)
f2[, -2] <- apply(f2[, -2], 2, function(x) as.integer(gsub('-', '0', as.character(x))))
f2long <- gather(f2, Carrera, Puntos, R01:R17)
# Y así se ve mejor
f2long
## Pos Escuderia Total Carrera Puntos
## 1 1 Mercedes-Benz 573 R01 37
## 2 2 Red Bull Racing 319 R01 0
## 3 3 McLaren 202 R01 26
## 4 4 Racing Point 195 R01 8
## 5 5 Renault 181 R01 4
## 6 6 Ferrari 131 R01 19
## 7 7 AlphaTauri 107 R01 6
## 8 8 Alfa Romeo 8 R01 2
## 9 9 Haas 3 R01 0
## 10 10 Williams 0 R01 0
## 11 1 Mercedes-Benz 573 R02 43
## 12 2 Red Bull Racing 319 R02 27
## 13 3 McLaren 202 R02 13
## 14 4 Racing Point 195 R02 14
## 15 5 Renault 181 R02 4
## 16 6 Ferrari 131 R02 0
## 17 7 AlphaTauri 107 R02 1
## 18 8 Alfa Romeo 8 R02 0
## 19 9 Haas 3 R02 0
## 20 10 Williams 0 R02 0
## 21 1 Mercedes-Benz 573 R03 41
## 22 2 Red Bull Racing 319 R03 28
## 23 3 McLaren 202 R03 2
## 24 4 Racing Point 195 R03 18
## 25 5 Renault 181 R03 4
## 26 6 Ferrari 131 R03 8
## 27 7 AlphaTauri 107 R03 0
## 28 8 Alfa Romeo 8 R03 0
## 29 9 Haas 3 R03 1
## 30 10 Williams 0 R03 0
## 31 1 Mercedes-Benz 573 R04 25
## 32 2 Red Bull Racing 319 R04 23
## 33 3 McLaren 202 R04 10
## 34 4 Racing Point 195 R04 2
## 35 5 Renault 181 R04 20
## 36 6 Ferrari 131 R04 16
## 37 7 AlphaTauri 107 R04 6
## 38 8 Alfa Romeo 8 R04 0
## 39 9 Haas 3 R04 0
## 40 10 Williams 0 R04 0
## 41 1 Mercedes-Benz 573 R05 34
## 42 2 Red Bull Racing 319 R05 35
## 43 3 McLaren 202 R05 2
## 44 4 Racing Point 195 R05 14
## 45 5 Renault 181 R05 4
## 46 6 Ferrari 131 R05 12
## 47 7 AlphaTauri 107 R05 1
## 48 8 Alfa Romeo 8 R05 0
## 49 9 Haas 3 R05 0
## 50 10 Williams 0 R05 0
## 51 1 Mercedes-Benz 573 R06 41
## 52 2 Red Bull Racing 319 R06 22
## 53 3 McLaren 202 R06 9
## 54 4 Racing Point 195 R06 22
## 55 5 Renault 181 R06 0
## 56 6 Ferrari 131 R06 6
## 57 7 AlphaTauri 107 R06 2
## 58 8 Alfa Romeo 8 R06 0
## 59 9 Haas 3 R06 0
## 60 10 Williams 0 R06 0
## 61 1 Mercedes-Benz 573 R07 43
## 62 2 Red Bull Racing 319 R07 23
## 63 3 McLaren 202 R07 6
## 64 4 Racing Point 195 R07 3
## 65 5 Renault 181 R07 23
## 66 6 Ferrari 131 R07 0
## 67 7 AlphaTauri 107 R07 4
## 68 8 Alfa Romeo 8 R07 0
## 69 9 Haas 3 R07 0
## 70 10 Williams 0 R07 0
## 71 1 Mercedes-Benz 573 R08 17
## 72 2 Red Bull Racing 319 R08 0
## 73 3 McLaren 202 R08 30
## 74 4 Racing Point 195 R08 16
## 75 5 Renault 181 R08 12
## 76 6 Ferrari 131 R08 0
## 77 7 AlphaTauri 107 R08 27
## 78 8 Alfa Romeo 8 R08 0
## 79 9 Haas 3 R08 0
## 80 10 Williams 0 R08 0
## 81 1 Mercedes-Benz 573 R09 44
## 82 2 Red Bull Racing 319 R09 15
## 83 3 McLaren 202 R09 8
## 84 4 Racing Point 195 R09 10
## 85 5 Renault 181 R09 12
## 86 6 Ferrari 131 R09 5
## 87 7 AlphaTauri 107 R09 6
## 88 8 Alfa Romeo 8 R09 2
## 89 9 Haas 3 R09 0
## 90 10 Williams 0 R09 0
## 91 1 Mercedes-Benz 573 R10 41
## 92 2 Red Bull Racing 319 R10 19
## 93 3 McLaren 202 R10 0
## 94 4 Racing Point 195 R10 12
## 95 5 Renault 181 R10 16
## 96 6 Ferrari 131 R10 8
## 97 7 AlphaTauri 107 R10 6
## 98 8 Alfa Romeo 8 R10 0
## 99 9 Haas 3 R10 0
## 100 10 Williams 0 R10 0
## 101 1 Mercedes-Benz 573 R11 25
## 102 2 Red Bull Racing 319 R11 19
## 103 3 McLaren 202 R11 10
## 104 4 Racing Point 195 R11 16
## 105 5 Renault 181 R11 15
## 106 6 Ferrari 131 R11 6
## 107 7 AlphaTauri 107 R11 8
## 108 8 Alfa Romeo 8 R11 1
## 109 9 Haas 3 R11 2
## 110 10 Williams 0 R11 0
## 111 1 Mercedes-Benz 573 R12 44
## 112 2 Red Bull Racing 319 R12 15
## 113 3 McLaren 202 R12 8
## 114 4 Racing Point 195 R12 6
## 115 5 Renault 181 R12 6
## 116 6 Ferrari 131 R12 13
## 117 7 AlphaTauri 107 R12 10
## 118 8 Alfa Romeo 8 R12 0
## 119 9 Haas 3 R12 0
## 120 10 Williams 0 R12 0
## 121 1 Mercedes-Benz 573 R13 44
## 122 2 Red Bull Racing 319 R13 0
## 123 3 McLaren 202 R13 10
## 124 4 Racing Point 195 R13 8
## 125 5 Renault 181 R13 15
## 126 6 Ferrari 131 R13 10
## 127 7 AlphaTauri 107 R13 12
## 128 8 Alfa Romeo 8 R13 3
## 129 9 Haas 3 R13 0
## 130 10 Williams 0 R13 0
## 131 1 Mercedes-Benz 573 R14 25
## 132 2 Red Bull Racing 319 R14 14
## 133 3 McLaren 202 R14 15
## 134 4 Racing Point 195 R14 20
## 135 5 Renault 181 R14 1
## 136 6 Ferrari 131 R14 27
## 137 7 AlphaTauri 107 R14 0
## 138 8 Alfa Romeo 8 R14 0
## 139 9 Haas 3 R14 0
## 140 10 Williams 0 R14 0
## 141 1 Mercedes-Benz 573 R15 29
## 142 2 Red Bull Racing 319 R15 34
## 143 3 McLaren 202 R15 22
## 144 4 Racing Point 195 R15 0
## 145 5 Renault 181 R15 8
## 146 6 Ferrari 131 R15 1
## 147 7 AlphaTauri 107 R15 8
## 148 8 Alfa Romeo 8 R15 0
## 149 9 Haas 3 R15 0
## 150 10 Williams 0 R15 0
## 151 1 Mercedes-Benz 573 R16 7
## 152 2 Red Bull Racing 319 R16 8
## 153 3 McLaren 202 R16 13
## 154 4 Racing Point 195 R16 40
## 155 5 Renault 181 R16 28
## 156 6 Ferrari 131 R16 0
## 157 7 AlphaTauri 107 R16 6
## 158 8 Alfa Romeo 8 R16 0
## 159 9 Haas 3 R16 0
## 160 10 Williams 0 R16 0
## 161 1 Mercedes-Benz 573 R17 33
## 162 2 Red Bull Racing 319 R17 37
## 163 3 McLaren 202 R17 18
## 164 4 Racing Point 195 R17 1
## 165 5 Renault 181 R17 9
## 166 6 Ferrari 131 R17 0
## 167 7 AlphaTauri 107 R17 4
## 168 8 Alfa Romeo 8 R17 0
## 169 9 Haas 3 R17 0
## 170 10 Williams 0 R17 0
VII.Añadimos gráfica global
# Ahora añadimos su grafica respectiva ------------------------------------------------------
# 'TOP 10'
ggplot(f2long, aes(x = Carrera, y = Puntos, group = Escuderia, colour = Escuderia)) +
geom_line() +
scale_x_discrete(breaks=c('R01', 'R04', 'R08', 'R12', 'R17')) +
labs(title = 'Resultados Fórmula 1 2020, Ranking mejores escuderias',
caption = 'fuente: www.formel1.de')
VIII.Gráfica para cada escuderia
ggplot(f2long, aes(x = Carrera, y = Puntos, group = Escuderia, colour = Escuderia)) +
geom_line(show.legend = FALSE) + facet_wrap(~ Escuderia) +
scale_x_discrete(breaks=c('R01', 'R04', 'R08', 'R12', 'R17')) +
labs(title = 'Resultados Fórmula 1 2020, Ranking escuderías',
caption = 'fuente: www.formel1.de')
IX.A continuación formaremos un vector con cada una de las ubicaciones en donde se desarrollaron las 17 carreras.
Austria<-c(47.2197222,14.7647222)
Hungría<-c(47.5822222,19.2511111)
Inglaterra<-c(52.0786111,-1.0169444)
España<-c(41.5700000,2.2611111)
Bélgica<-c(50.4372222,5.9713888)
ItaliaM<-c(45.6205555,9.2894444)
ItaliaT<-c(43.9975,11.37194)
Rusia<-c(43.40833,39.96556)
Alemania<-c(50.3355555,6.9475)
Portugal<-c(37.2294,-8.63053)
ItaliaER<-c(44.3411111,11.7133333)
Turquía<-c(40.9516666,29.405)
Barein<-c(26.0325,50.5105555)
EAU<-c(24.4702444,54.606075)
sedes<-rbind(Austria,Hungría,Inglaterra,España,Bélgica,ItaliaM,ItaliaT,Rusia,Alemania,Portugal,ItaliaER,Turquía,Barein,EAU)
sedes
## [,1] [,2]
## Austria 47.21972 14.764722
## Hungría 47.58222 19.251111
## Inglaterra 52.07861 -1.016944
## España 41.57000 2.261111
## Bélgica 50.43722 5.971389
## ItaliaM 45.62056 9.289444
## ItaliaT 43.99750 11.371940
## Rusia 43.40833 39.965560
## Alemania 50.33556 6.947500
## Portugal 37.22940 -8.630530
## ItaliaER 44.34111 11.713333
## Turquía 40.95167 29.405000
## Barein 26.03250 50.510556
## EAU 24.47024 54.606075
colnames(sedes)<-c("Longitud","Latitud")
sedes
## Longitud Latitud
## Austria 47.21972 14.764722
## Hungría 47.58222 19.251111
## Inglaterra 52.07861 -1.016944
## España 41.57000 2.261111
## Bélgica 50.43722 5.971389
## ItaliaM 45.62056 9.289444
## ItaliaT 43.99750 11.371940
## Rusia 43.40833 39.965560
## Alemania 50.33556 6.947500
## Portugal 37.22940 -8.630530
## ItaliaER 44.34111 11.713333
## Turquía 40.95167 29.405000
## Barein 26.03250 50.510556
## EAU 24.47024 54.606075
sedes<-data.frame(sedes)
sedes
## Longitud Latitud
## Austria 47.21972 14.764722
## Hungría 47.58222 19.251111
## Inglaterra 52.07861 -1.016944
## España 41.57000 2.261111
## Bélgica 50.43722 5.971389
## ItaliaM 45.62056 9.289444
## ItaliaT 43.99750 11.371940
## Rusia 43.40833 39.965560
## Alemania 50.33556 6.947500
## Portugal 37.22940 -8.630530
## ItaliaER 44.34111 11.713333
## Turquía 40.95167 29.405000
## Barein 26.03250 50.510556
## EAU 24.47024 54.606075
Ubicaciones de los GP de la temporada 2020 de la Fórmula 1.
qmplot(Latitud, Longitud, data=sedes, color=I(rainbow(14)))
## Using zoom = 4...
## Source : http://tile.stamen.com/terrain/4/7/5.png
## Source : http://tile.stamen.com/terrain/4/8/5.png
## Source : http://tile.stamen.com/terrain/4/9/5.png
## Source : http://tile.stamen.com/terrain/4/10/5.png
## Source : http://tile.stamen.com/terrain/4/7/6.png
## Source : http://tile.stamen.com/terrain/4/8/6.png
## Source : http://tile.stamen.com/terrain/4/9/6.png
## Source : http://tile.stamen.com/terrain/4/10/6.png