httr
.rvest
realice un procedimiento de web scraping sobre una pagina de su preferencia que contenga tablas de datos que puedan ser extraídas y visualizadas en R
(Por ejemplo best places) de igual forma que en el anterior se piden estadísticas de resumen y análisis exploratorio de datosLa API football-data.org, que se utilizará para este ejercicio, proporciona datos acerca del fútbol soccer; como esta API se conforma de distintos conjuntos de datos, utilizaremos uno cuyo autor lo denomina “Competition” que posee una lista de todas los competencias que se realizan en el fútbol y ciertos resultados por cada año. Utilizando la función fromJSON()
del paquete jsonlite
, se podrá descargar la información deseada; en este caso, solo se tomará las columnas:
La idea no es solo descargar los datos relacionados con un solo año, sino varios años, pero una url solo proporciona los datos de un solo año; entonces para descargar la informción de varios años y de forma automática, se realizará un ciclo for
; en este caso se hará del año 2015 al 2017:
library(jsonlite)
futdata<-list()
for(j in 1:3){
dfut<-fromJSON(paste0("http://api.football-data.org/v1/competitions/?season=",2014+j))
message("Cargando pagina ", 2014+j)
futdata[[j]]<-data.frame(dfut$league,dfut$year,dfut$currentMatchday,dfut$numberOfTeams,dfut$numberOfGames)
}
Cargando pagina 2015
Cargando pagina 2016
Cargando pagina 2017
Con la función rbind_pages()
, una lista de data frame se comvertirá en un data frame:
dfutbol<-rbind_pages(futdata)
colnames(dfutbol)<-c("Liga","Año","N_Fechas","N_equipos","N_juegos")
head(dfutbol);tail(dfutbol)
Ahora que se tiene los datos limpios y organizados, procederemos con el análisis exploratorio de datos:
dplyr::glimpse(dfutbol)
Observations: 48
Variables: 5
$ Liga <fctr> BL1, BL2, FL1, FL2, PL, PD, SD, SA, PPL, BL3, DED, C...
$ Año <fctr> 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015...
$ N_Fechas <int> 34, 34, 38, 38, 38, 38, 42, 38, 34, 38, 34, 10, 16, 7...
$ N_equipos <int> 18, 18, 20, 20, 20, 20, 22, 20, 18, 20, 18, 32, 24, 2...
$ N_juegos <int> 306, 306, 380, 380, 380, 380, 462, 380, 306, 380, 306...
summary(dfutbol)
Liga Año N_Fechas N_equipos N_juegos
BL1 : 3 2015:13 Min. : 1.00 Min. :18.0 Min. : 48.0
BL2 : 3 2016:19 1st Qu.: 5.00 1st Qu.:19.5 1st Qu.:306.0
CL : 3 2017:16 Median :34.00 Median :20.0 Median :380.0
DED : 3 Mean :23.73 Mean :23.0 Mean :355.4
EL1 : 3 3rd Qu.:38.00 3rd Qu.:24.0 3rd Qu.:400.5
FL1 : 3 Max. :46.00 Max. :64.0 Max. :552.0
(Other):30
rbind(tapply(dfutbol$N_Fechas,dfutbol$Año,mean),
tapply(dfutbol$N_equipos,dfutbol$Año,mean),
tapply(dfutbol$N_juegos,dfutbol$Año,mean))
2015 2016 2017
[1,] 33.23077 32.89474 5.125
[2,] 20.76923 23.78947 23.875
[3,] 357.15385 350.05263 360.375
colMeans(dfutbol[,3:5])
N_Fechas N_equipos N_juegos
23.72917 23.00000 355.41667
Se observan los promedios para las fechas, los equipos y juegos por cada año. En promedio, se han realizado aproximadamente 24 fechas entre todos los torneos durante estos últimos tres años, han jugado 23 equipos y aproximadamente 355 juegos.
rbind(tapply(dfutbol$N_Fechas,dfutbol$Año,median),
tapply(dfutbol$N_equipos,dfutbol$Año,median),
tapply(dfutbol$N_juegos,dfutbol$Año,median))
2015 2016 2017
[1,] 38 38 4.5
[2,] 20 20 20.0
[3,] 380 380 380.0
apply(dfutbol[,3:5],2,median)
N_Fechas N_equipos N_juegos
34 20 380
rbind(tapply(dfutbol$N_Fechas,dfutbol$Año,var),
tapply(dfutbol$N_equipos,dfutbol$Año,var),
tapply(dfutbol$N_juegos,dfutbol$Año,var))
2015 2016 2017
[1,] 87.69231 195.8772 24.91667
[2,] 14.35897 106.1754 127.18333
[3,] 9704.30769 25587.7193 20139.85000
apply(dfutbol[,3:5],2,var)
N_Fechas N_equipos N_juegos
282.11658 86.80851 18725.69504
Varianza para las 3 variables por cada año. Hay una gran variación entre los números de juegos realizados entre los distintos torneos.
cor(dfutbol[,3:5])
N_Fechas N_equipos N_juegos
N_Fechas 1.0000000 -0.3049551 0.3908054
N_equipos -0.3049551 1.0000000 -0.4659933
N_juegos 0.3908054 -0.4659933 1.0000000
Las variables no están altamente correlacionadas.
library(ggplot2)
ggplot(dfutbol,aes(Año,N_Fechas,fill=Liga))+geom_bar(stat = "identity",position = "dodge",colour="black")+ggtitle("N. de Fechas por Año según la Liga")
Hay mucha diferencia entre los tres graficos, sobre todo en el 2017, y es entendible debido a que no se han jugado todas las fechas. Aunque la liga BSA es la que lleva más fechas cumplidas; si se comparan respecto a los dos años anteriores, al finalizar este año es posible que otras ligas tengan un mayor número de fechas.
ggplot(dfutbol,aes(Año,N_equipos,fill=Liga))+geom_bar(stat = "identity",position = "dodge",colour="black")+ggtitle("N. de Equipos por Año según la Liga")
Según el gráfico, el número de equipos ha sido similar durante los tres años, la mayoria de las ligas poseen el mísmo número de equipos; la DFB-poka (DFB), es la liga con el mayor número de equipos.
ggplot(dfutbol,aes(Año,N_juegos,fill=Liga))+geom_bar(stat = "identity",position = "dodge",colour="black")+ggtitle("N. de Juegos por Año según la Liga")
El número de partidos jugados por cada año, es similar; nótese que no hay la misma cantidad de ligas en cada año.
A continuación se realiza un procedimiento web scraping a la pagina http://www.sobrefutbol.com/torneos/torneo_colombiano.htm la cual contiene información sobre los campeones del Fútbol Colombiano de primera división.
Utilizaremos el paquete rvest creado por Hadley Wickham y la función read_html para leer una página web. Esta función es proporcionada por el paquete xml2, que se cargó automáticamente cuando cargamos rvest
library(rvest)
Loading required package: xml2
url <- 'http://www.sobrefutbol.com/torneos/torneo_colombiano.htm'
webpage <- read_html(url)
A continuación, utilizamos las funciones html_nodes y html_table (de rvest) para extraer el elemento de tabla HTML y convertirlo en un data frame.
data <- html_nodes(webpage, 'table')
datos <- html_table(data)[[1]]
head(datos)
Hacemos uso de la libreria ggplot2 para realizar distintos gráficos
library(ggplot2)
El torneo colombia se realizó entre el año 1948 al 2001.
Extraemos las columnas de Campeón y Subcampeón del Torneo Colombia
TC <- datos[c(36:47,49:89), 2:3]
names(TC) <- c("Campeón", "Subcampeón")
head(TC)
Realizamos un gráfico de barras de los equipos campeones del torneo colombia
TCc <- as.data.frame(TC[,1])
names(TCc) <- c("Campeón")
ggplot(TCc, aes(x = Campeón))+ geom_bar()+
scale_y_continuous(name = "Frecuencia")+theme(axis.text.x = element_text(angle = 90, hjust = 1))
Realizamos un gráfico de barras de los equipos subcampeones del torneo colombia
TCs <- as.data.frame(TC[,2])
names(TCs) <- c("Subcampeón")
ggplot(TCs, aes(x = Subcampeón))+ geom_bar()+
scale_y_continuous(name = "Frecuencia")+theme(axis.text.x = element_text(angle = 90, hjust = 1))
El torneo apertura/finalización se lleva a cabo desde el año 2002 hasta la fecha.
Extraemos las columnas de Campeón y Subcampeón del Torneo Apertura/Finalización
TAF <- datos[3:33, 2:3]
names(TAF) <- c("Campeón", "Subcampeón")
head(TAF)
Realizamos un gráfico de los equipos campeones del Torneo Apertura/Finalización
TAFc <- as.data.frame(TAF[,1])
names(TAFc) <- c("Campeón")
ggplot(TAFc, aes(x = Campeón))+ geom_bar()+
scale_y_continuous(name = "Frecuencia")+theme(axis.text.x = element_text(angle = 90, hjust = 1))
Realizamos un gráfico de los equipos subcampeones del Torneo Apertura/Finalización
TAFs <- as.data.frame(TAF[,2])
names(TAFs) <- c("Subcampeón")
ggplot(TAFs, aes(x = Subcampeón))+ geom_bar()+
scale_y_continuous(name = "Frecuencia")+theme(axis.text.x = element_text(angle = 90, hjust = 1))