Rode Duivels: data 1

Recent deelden we een paar kleine datasets over de Rode Duivels en de Red Flames zodat anderen er mee aan de slag kunnen ( klik hier ). Daarbij deden we een oproep om deze data (visueel) te verkennen. Zelf doen we dat natuurlijk ook. In deze blogpost beginnen we met de univariate verdeling van de eerste dataset.

Verkennen doe ik aan de hand van R, de gratis statistische omgeving voor computationele statistiek en grafieken. De code geven we er ook bij. We kiezen ervoor om voornamelijk de packages dplyr en ggplot2 te gebruiken. Dit omdat beide even populair als eenvoudig in gebruik zijn.

In deze korte blogpost laden we de data in en bekijken we snel de verdeling en top10. We beginnen dus met het inladen van de nodige packages en de eerste dataset:

library( readr) # data uitlezen
library( dplyr) # data behandeling
library( ggplot2) # plotting
# Inlezen data
Belgian_Red_Devils <- read_delim( “https://raw.githubusercontent.com/arcoutte/RodeDuivels/master/Belgian_Red_Devils.csv&#8221;,
delim = “;”, # gegevens in onze .csv worden gescheiden via ;
escape_double = FALSE, # geen dubbele quotes
col_types = cols( Geboortedatum = col_date( format = “%d-%m-%Y”)), # datum variabele formatten
trim_ws = TRUE, # loslopende spaties elimineren
locale = locale(encoding = ‘ISO-8859-1’)) # accenten in spelersnamen behouden
# Data check
Belgian_Red_Devils %>%
glimpse
## Observations: 752
## Variables: 6
## $ Naam “Jan Vertonghen”, “Axel Witsel”, “Jan Ceulemans”…
## $ Geboortedatum 1987-04-24, 1989-01-12, 1957-02-28, 1991-01-07,…
## $ Caps 110, 97, 96, 94, 94, 87, 86, 86, 85, 84, 84, 84,…
## $ Selecties 115, 102, 99, 99, 114, 96, 94, 93, 98, 95, 86, 8…
## $ Doelpunten 9, 9, 22, 27, 6, 18, 3, 1, 10, 3, 4, 19, 5, 30, …
## $ Speelminuten 9387, 8012, 8256, 6655, 7634, 6371, 7460, 7388, …
# zijn alle observaties compleet ?Belgian_Red_Devils %>%
select_if( function( x) any (is.na( x))) %>% # selecteer variabelen met NA
summarise_all( funs( sum( is.na( .)))) # Tel aantal NA bij geselecteerde variabelen
# Geboortedatum 28

Zo, we hebben de data van Github ingelezen en de data ziet er op het eerste zicht ok uit. We zien dat er 752 spelers zijn met een selectie achter hun naam, maar we merken ook dat er 28 observaties zijn waar de geboortedatum ongekend is – wat op zich geen probleem vormt.

De volgende stap is de verdeling van elke variabele eens te bekijken. In R vraag je eenvoudig een samenvatting op van de verdeling van je variabele. Bijvoorbeeld:

summary( Belgian_Red_Devils$Selecties)
# Min. 1st Qu. Median Mean 3rd Qu. Max.
# 1.0 2.0 7.0 16.6 22.0 115.0

Onze Rode Duivels behalen gemiddeld 16.6 selecties, maar de mediaan ligt op 7 selecties. De verdeling van selecties is scheef, er zijn meer spelers met weinig selecties.
Visueel zien we de volledige verdeling snel via een histogram en de samenvatting ervan via een boxplot:

hist selecties

boxplot selecties

We zien inderdaad dat de meeste spelers niet veel selecties behalen (Q3 = 22). Welke spelers hebben de meest Selecties achter hun naam?

Belgian_Red_Devils %>%
# Rangschik spelers naar Caps van hoog naar laag
arrange( desc( Caps)) %>%
# Enkel top 10
slice( 1: 10) %>%
# Geordende factor (~ ordinale variabele) om y-as juist te rangschikken
mutate( Naam = factor( Naam,
levels = rev( Naam),
ordered = TRUE)) %>%
## ‘grammar of graphics’ – plot
ggplot( aes( x = Naam, # Naam als x-as
y = Caps)) + # Caps als y-as
# barplot
# waarden op y-aes mappen is niet compatibel, daarom ‘stat = “identity” ‘
geom_bar( stat = “identity”, #
fill = “#EA2459” ) + # kleur
geom_text( aes( Naam, Selecties, label = Selecties), hjust = 1.2, colour = “white”) +
labs( title = “Belgian Red Devils”,
subtitle = “TOP10 CAPS”,
x = “”,
y = ”
) +
KRL_theme + # ggplot theme element komt uit private KRL package
coord_flip() # wissel de coördinaten om; plot horizontaal leggen
belgian_red_devils_top10_selecties
Deze barplot geeft ons meer zicht op die hogere waarden. Jan Vertonghen blijkt de autoritaire recordhouder. Ook opvallend: 5/10 spelers met de meeste Selecties zijn nog actief in de huidige selectie. Witsel, Alderweireld en Hazard moeten nog 30 worden en zullen daar nog heel wat selecties bij doen. En dan is er nog Lukaku (25 jaar), die ook al aan 91 selecties zit.
Verder bevat het datasetje nog 3 andere variabelen per speler:
– Caps
– Speelminuten
– Doelpunten
Ook deze gaan we op dezelfde wijze verkennen, dus we passen de code een beetje aan.
# vector met variabelen waarover te itereren
vars <- c(“Caps”, “Selecties”, “Doelpunten”, “Speelminuten”)
# functie die subset en plot
hist_vars <- function( data, var, ylab = NULL, …) {
data <- data %>%
select( “Naam”, !! sym( var)) %>% # character string var moet als kolom beschouwd worden
arrange( desc( !! sym( var))) %>%
mutate( Naam = factor( Naam, levels = rev( Naam), ordered = TRUE))p <- ggplot( data , aes_string( colnames( data)[ 2])) +
geom_histogram( fill = “#EA2459”, color = “#fffa65” ) +
labs( title = “Belgian Red Devils”,
subtitle = sprintf( “histogram %s”, colnames(data)[2]), x = “”, y = ylab ) +
KRL_theme
p
}
# for loop over vars object met functie hist_vars
for( v in vars) {
print( Belgian_Red_Devils %>%
hist_vars( var = v)
)
# optioneel: log-schaal; duidelijker
print( Belgian_Red_Devils %>%
hist_vars( var = v,
ylab = “log”) +
scale_y_continuous( trans=’log2′)
)
}

hist caps
hist speelminuten
hist goals
Veel nieuws brengen deze histogrammen niet, opnieuw zijn de variabelen scheef verdeeld met telkens een aantal zeldzamere, hogere waarden. Liefhebbers kunnen met bovenstaande code de y-as log-transformeren om een beter zicht te krijgen op deze extremere waarden..
ook de top10 plots vragen we op.
barplot_vars <- function( data, var) {
data <- data %>%
select( “Naam”, !!sym(var)) %>%
arrange( desc( !!sym( var))) %>%
slice(1:10) %>%
mutate(Naam = factor(Naam, levels = rev(Naam), ordered = TRUE))print(
ggplot( data , aes_string(x = colnames(data)[1], y = colnames(data)[2])) +
geom_bar(stat = “identity”, fill = “#EA2459” ) +
geom_text( aes( Naam, !!sym(var), label = !!sym(var)), hjust = 1.2, colour = “white”) +
labs( title = “Belgian Red Devils”,
subtitle = sprintf( “TOP10 %s”,
colnames(data)[2]),
x = “”,
y = ”
) +
KRL_theme +
coord_flip()
)
}
for( v in vars) {
Belgian_Red_Devils %>%
barplot_vars( var = v)
}
top10_caps
Beetje dezelfde resultaten als bij de selecties. In vergelijking met de top10 selecties valt de 3e meest geselecteerde speler, Moussa Dembélé, er uit. Moussa moet het doen met 82 Caps op 106 selecties.
Franky Van der Elst daarentegen, verschijnt op de 9e plek (86/93) samen met Vincent Kompany (85/88). Opvallend, want Kompany wordt toch gezien als het gezicht van deze generatie, terwijl er maar liefst 5 spelers van deze generatie meer Caps achter hun naam hebben. Blessuregevoelig.
top10_speelminuten
Qua speelminuten verschijnen Enzo Scifo en Paul Van Himst in de top 10 – en zakt de huidige generatie wat weg. Sterke Jannen op kop, minder prettig is het voor Koen Casteels met 0 speelminuten op 29 selecties.
top10_goals

Doelpunten ten slotte. Tsja, Romelu Lukaku degradeert de tegenstand.

Hierdoor lijkt het bijna geen prestatie meer dat Eden Hazard de grens van 30 zal overschrijden. Wilmots heeft dat eigenlijk ook gedaan #Prendergast.

Interessante naam in dit lijstje is Robert De Veen. Robert scoorde maar liefst 26 doelpunten in 23 wedstrijden bij de nationale ploeg (!) , maar ook bij FC Brugeois scoorde hij 135 doelpunten in 172 wedstrijden. Vergeten held.

Door telkens de waarden van twee variabelen te vergelijken lopen we eigenlijk voor op de feiten. Dit valt gemakkelijker af te leiden uit o.a. scatterplots. Dat is voor een volgende treinrit.

Algemeen opvallend is deze generatie domineert qua Caps en Selecties, maar (nog) niet in speelminuten.

Speelt deze generatie dan meer wedstrijden? Dit bekijken we snel door de tweede dataset erbij te nemen en het aantal wedstrijden per jaar af te leiden.

# laad de data
Belgian_Red_Devils_players <- read_delim(
https://raw.githubusercontent.com/arcoutte/RodeDuivels/master/Belgian_Red_Devils_players.csv&#8221;,
delim = “;”,
escape_double = FALSE,
col_types = cols( Geboortedatum = col_date( format = “%d-%m-%Y”)),
trim_ws = TRUE,
locale = locale(encoding = ‘ISO-8859-1’))
Belgian_Red_Devils_players %>%
mutate( year = lubridate::year( date)) %>% # via lubridate package jaar variabele aanmaken
group_by( year) %>%
summarise( n_wedstrijden = n_distinct( date)) %>%
# per jaar aantal wedstrijden tellen
ggplot( aes( year, n_wedstrijden)) +
# trendlijn wedstrijden per jaar
geom_line(colour = “#EA2459”) +
# smoother toevoegen
stat_smooth(method = “lm”,
formula = y ~ poly( x, 3), se = FALSE) +
labs( title = “Belgian Red Devils”,
subtitle = “Evolutie – Wedstrijden per jaar”,
y = “aantal”,
x = “jaar”) +
KRL_theme
belgian_red_devils_wedstrijden per jaar

Er is inderdaad een stijgende trend te observeren in het aantal gespeelde wedstrijden per jaar. Ook de invloed van de wereldoorlogen zien we.

Waarom speelt men nu meer wedstrijden? De opkomst van het EK? Meer ploegen op het WK? Wat denk jij?

De volgende blogpost in deze reeks overlopen we eerst dezelfde zaken voor de Red Flames, maar we gaan ook wat dieper in gaan op deze data.
Advertenties

Geef een reactie

Vul je gegevens in of klik op een icoon om in te loggen.

WordPress.com logo

Je reageert onder je WordPress.com account. Log uit /  Bijwerken )

Google+ photo

Je reageert onder je Google+ account. Log uit /  Bijwerken )

Twitter-afbeelding

Je reageert onder je Twitter account. Log uit /  Bijwerken )

Facebook foto

Je reageert onder je Facebook account. Log uit /  Bijwerken )

Verbinden met %s