4 Fifa World Cup 2018

Pour m’améliorer sur les chapitres précédentes et plus particulièrement sur la library tidyverse, je mets en place ce mini projet qui n’a aucune revendication sur la maitrise et le cheminement d’un projet statistique.
Comme le titre l’indique, je vais travailler sur les données des joueurs du mondial de football 2018, histoire de mêler l’utile à l’agréable.
Les données sont téléchargeables sur kaggle.  

Comme d’accoutummée, on va commencer par charger les libray nécessaires à l’étude.

library(tidyverse)
library(ggthemes)
library(plotly)
library(kableExtra)       
library(knitr)
library(lubridate)        
library(gridExtra)        
library(reshape2)

4.1 Préparation des données

wc <- read.csv("Data/wc2018-players.csv", header = T)

head(wc) %>%  # voir le début des données
  kable(booktab = T) %>%
  kable_styling(font_size = 10)
Team X. Pos. FIFA.Popular.Name Birth.Date Shirt.Name Club Height Weight
Argentina 3 DF TAGLIAFICO Nicolas 31.08.1992 TAGLIAFICO AFC Ajax (NED) 169 65
Argentina 22 MF PAVON Cristian 21.01.1996 PAVÓN CA Boca Juniors (ARG) 169 65
Argentina 15 MF LANZINI Manuel 15.02.1993 LANZINI West Ham United FC (ENG) 167 66
Argentina 18 DF SALVIO Eduardo 13.07.1990 SALVIO SL Benfica (POR) 167 69
Argentina 10 FW MESSI Lionel 24.06.1987 MESSI FC Barcelona (ESP) 170 72
Argentina 4 DF ANSALDI Cristian 20.09.1986 ANSALDI Torino FC (ITA) 181 73
glimpse(wc)    # montre la structure des données
## Observations: 736
## Variables: 9
## $ Team              <fct> Argentina, Argentina, Argentina, Argentina, ...
## $ X.                <int> 3, 22, 15, 18, 10, 4, 5, 7, 14, 21, 19, 9, 1...
## $ Pos.              <fct> DF, MF, MF, DF, FW, DF, MF, MF, DF, FW, FW, ...
## $ FIFA.Popular.Name <fct> TAGLIAFICO Nicolas, PAVON Cristian, LANZINI ...
## $ Birth.Date        <fct> 31.08.1992, 21.01.1996, 15.02.1993, 13.07.19...
## $ Shirt.Name        <fct> TAGLIAFICO, PAVÓN, LANZINI, SALVIO, MESSI, A...
## $ Club              <fct> AFC Ajax (NED), CA Boca Juniors (ARG), West ...
## $ Height            <int> 169, 169, 167, 167, 170, 181, 175, 175, 174,...
## $ Weight            <int> 65, 65, 66, 69, 72, 73, 73, 73, 73, 73, 74, ...

Nous remarquons qu’il y’a plusieurs variables qui sont mises automatiquement en factor et qui nous seront utiles pour les analyses à venir. On va commencer par modifier leur nom pour simplifier leur manipulation puis leur affecter le type nécessaire.

# changement des noms des colonnes
names(wc) <- c("team","number","pos","name",
                "birthDate","shirtName","club","height","weight")

select(wc, everything(), -number, -shirtName) %>%
  head()%>%
  kable(booktab = T)
team pos name birthDate club height weight
Argentina DF TAGLIAFICO Nicolas 31.08.1992 AFC Ajax (NED) 169 65
Argentina MF PAVON Cristian 21.01.1996 CA Boca Juniors (ARG) 169 65
Argentina MF LANZINI Manuel 15.02.1993 West Ham United FC (ENG) 167 66
Argentina DF SALVIO Eduardo 13.07.1990 SL Benfica (POR) 167 69
Argentina FW MESSI Lionel 24.06.1987 FC Barcelona (ESP) 170 72
Argentina DF ANSALDI Cristian 20.09.1986 Torino FC (ITA) 181 73

   

attach(wc)   # permet de pouvoir manipuler les variables en utilisant juste leur nom

wc$birthDate <- dmy(wc$birthDate) # convertit birthdate en type "Date"

select(wc, everything(), -number, -shirtName) %>%
  head()%>%
  kable(booktab = T)
team pos name birthDate club height weight
Argentina DF TAGLIAFICO Nicolas 1992-08-31 AFC Ajax (NED) 169 65
Argentina MF PAVON Cristian 1996-01-21 CA Boca Juniors (ARG) 169 65
Argentina MF LANZINI Manuel 1993-02-15 West Ham United FC (ENG) 167 66
Argentina DF SALVIO Eduardo 1990-07-13 SL Benfica (POR) 167 69
Argentina FW MESSI Lionel 1987-06-24 FC Barcelona (ESP) 170 72
Argentina DF ANSALDI Cristian 1986-09-20 Torino FC (ITA) 181 73

4.2 Création d’une nouvelle variable “age”

On va introduire une variable age qui nous permettra de mieux appréhender l’interprétation de la variable birthDate

# On soustrait la date d'ajourd'hui et leur date de naissance
# Cette opération rend une valeur de type double en nombre de jour
# D'ou la division par 365.25 qui est le nombre de jours exacte dans une année
age <- as.numeric((Sys.Date() - wc$birthDate) / 365.25)

# On arrondit à 0 près
age <- round(age)

# On supprime la variable birthdate et on incorpore à sa place "age"
wcp <- wc %>%
  mutate(age) %>%
  select(team,number,pos,age,name,shirtName,club,height,weight, -birthDate)

select(wcp, everything(), -number, -shirtName) %>%
  head()%>%
  kable(booktab = T)
team pos age name club height weight
Argentina DF 26 TAGLIAFICO Nicolas AFC Ajax (NED) 169 65
Argentina MF 23 PAVON Cristian CA Boca Juniors (ARG) 169 65
Argentina MF 26 LANZINI Manuel West Ham United FC (ENG) 167 66
Argentina DF 29 SALVIO Eduardo SL Benfica (POR) 167 69
Argentina FW 32 MESSI Lionel FC Barcelona (ESP) 170 72
Argentina DF 32 ANSALDI Cristian Torino FC (ITA) 181 73

4.3 Interpretation des variables

summary(select(wcp, pos,shirtName, age,club, height,weight)) %>%
  kable(booktab =T) %>%
  kable_styling(font_size = 9)
pos shirtName age club height weight
DF:248 RODRIGUEZ: 3 Min. :20.00 Manchester City FC (ENG) : 16 Min. :165.0 Min. :59.00
FW:160 CAHILL : 2 1st Qu.:26.00 Real Madrid CF (ESP) : 15 1st Qu.:178.0 1st Qu.:72.00
GK: 96 DEMBELE : 2 Median :28.00 FC Barcelona (ESP) : 14 Median :183.0 Median :77.00
MF:232 GOMEZ : 2 Mean :28.51 Chelsea FC (ENG) : 12 Mean :182.4 Mean :77.19
NA JONES : 2 3rd Qu.:31.00 Paris Saint-Germain FC (FRA): 12 3rd Qu.:187.0 3rd Qu.:82.00
NA RAMOS : 2 Max. :46.00 Tottenham Hotspur FC (ENG) : 12 Max. :201.0 Max. :99.00
NA (Other) :723 NA (Other) :655 NA NA

 

On peut noter que le nombre de déffenseurs (248) et de milieu de terrain (232) sélctionnés est plus important que sur les autres postes. On a 3 joeurs qui ont le même nom “RODRIGUEZ”. Le plus agé de la compétition a 45 ans et le plus jeune 19 ans avec un age moyen de 28 ans. Les clubs les plus représentés sur ce mondial sont Manchester City (16), Real Madrid (15) et FC Barcelone (14). La taille des joueurs varient entre 1m65 et 2m10 avec une moyenne de 1m82 et le poids minimum est 59kg tandisque le maximum est 99kg.  

Nous allons partir sur cette base pour faire quelques statistiques que l’on entend souvent sur les joueurs.
Comme dit au début, l’idée est de pratiquer ce que je viens d’apprendre. Pour l’instant tout est plus ou moins basique.

4.4 Représentation graphique

ggplot(wcp,aes(pos,fill=pos))+
  geom_bar(stat="count")+
  geom_text(aes(label=..count..),
            stat="count", position=position_stack(0.96))+
  ggtitle("Position des joueurs")

p <- ggplot(wcp) + 
  geom_histogram(aes(x = age), 
                 breaks=seq(min(age), max(age), 1),
                 col="white",
                 fill="black", 
                 alpha=.5) +
  ggtitle("Age des joueurs")+
  geom_vline(xintercept = mean(age), size = 1, colour = "#FF3721",
             linetype = "dashed")
ggplotly(p)
ggplot(wcp) + 
  geom_bar(aes(x = club)) +
  ggtitle("Nombre de joeurs representes par club")

On remarque que ce graphique est difficlement interprétable car il y’a plus de 650 club représentés dans ce mondial.
L’idée est donc de récupèrer les 10 clubs les plus représentés.

clubMust <- wcp %>% 
  group_by(club) %>% 
  summarise(nombreJoueur=n()) %>% 
  arrange(desc(nombreJoueur)) %>% 
  slice(1:10)

clubMust %>%
  kable(booktab = T) %>%
  kable_styling(full_width = T)
club nombreJoueur
Manchester City FC (ENG) 16
Real Madrid CF (ESP) 15
FC Barcelona (ESP) 14
Chelsea FC (ENG) 12
Paris Saint-Germain FC (FRA) 12
Tottenham Hotspur FC (ENG) 12
FC Bayern München (GER) 11
Juventus FC (ITA) 11
Manchester United FC (ENG) 11
Al Ahli SC (KSA) 9

On peut aussi utiliser la fonction table() pour créer la variable clubMust

p <- clubMust %>% 
  ggplot(aes(reorder(club, nombreJoueur ), nombreJoueur))+
  geom_col(fill = mycolors[9])+
  theme(legend.position = "none")+
  labs(title = "Les 10 clubs les plus représentés",
       x = "Nombre de joueur",
       y = "Club")+
  coord_flip()

ggplotly(p)
p <- wcp %>% 
  ggplot(aes(x=weight, y=height)) +
  geom_point(aes(size=age,color=pos),alpha=.5) +
  scale_color_brewer(name='',palette='Set1') + theme_minimal(12) +
  geom_smooth(method='lm',size=.5, color = 'black', alpha=.25) +
  facet_wrap(~pos,ncol=1) + theme(strip.text = element_text(size = 14, face="bold")) + 
  labs(title='Height vs. Weight vs. Age',
       subtitle='height en cm, weight en Kg')+
  theme(legend.position = "none")
ggplotly(p)

4.5 Manipulation des données

4.5.1 Les plus jeunes joueurs

wcp %>%
  select(name, age, team, club) %>%
  arrange((age)) %>%                  # On arrange le df par rapport à l'age
  slice(1:10) %>%                     # On prend les 10 premières lignes
  kable(booktab = T) %>%              # Données de sortie représentées sous forme de tableau
  kable_styling(position = "center")  # Tableau centré sur la page
name age team club
ARZANI Daniel 20 Australia Melbourne City FC (AUS)
ALEXANDER-ARNOLD Trent 20 England Liverpool FC (ENG)
MBAPPE Kylian 20 France Paris Saint-Germain FC (FRA)
HAKIMI Achraf 20 Morocco Real Madrid CF (ESP)
UZOHO Francis 20 Nigeria Deportivo La Coruña (ESP)
WAGUE Moussa 20 Senegal KAS Eupen (BEL)
SMITH Ian 21 Costa Rica IFK Norrkoping FK (SWE)
DOLBERG Kasper 21 Denmark AFC Ajax (NED)
RASHFORD Marcus 21 England Manchester United FC (ENG)
LEE Seungwoo 21 Korea Republic Hellas Verona FC (ITA)

4.5.2 Les joeurs les plus agés

wcp %>%
  select(name, age, team, club) %>%
  arrange(desc(age)) %>%
  slice(1:10) %>%    
  kable(booktab = T) %>%
  kable_styling(position = "center")
name age team club
ESSAM EL HADARY 46 Egypt Al Taawoun FC (KSA)
MARQUEZ Rafael 40 Mexico CF Atlas (MEX)
IGNASHEVICH Sergey 40 Russia CSKA Moscow (RUS)
CAHILL Tim 39 Australia Millwall FC (ENG)
CORONA Jose 38 Mexico Cruz Azul (MEX)
PEREZ Blas 38 Panama CSD Municipal (GUA)
BALOY Felipe 38 Panama CSD Municipal (GUA)
CABALLERO Wilfredo 37 Argentina Chelsea FC (ENG)
JONES Brad 37 Australia Feyenoord Rotterdam (NED)
PEMBERTON Patrick 37 Costa Rica LD Alajuelense (CRC)

4.5.3 Les joueurs de plus grands tailles

wcp %>%
  select(team,name, club, height) %>%
  arrange(desc(height)) %>%
  slice(1:10) %>%
  kable(booktab = T) %>%        
  kable_styling(full_width = T)
team name club height
Croatia KALINIC Lovre KAA Gent (BEL) 201
Denmark VESTERGAARD Jannik VfL Borussia Mönchengladbach (GER) 200
Argentina FAZIO Federico AS Roma (ITA) 199
Belgium COURTOIS Thibaut Chelsea FC (ENG) 199
Iceland SCHRAM Frederik Roskilde BK (DEN) 198
Sweden OLSEN Robin FC Kobenhavn (DEN) 198
Belgium CASTEELS Koen VfL Wolfsburg (GER) 197
France NZONZI Steven Sevilla FC (ESP) 197
Korea Republic KIM Shinwook Jeonbuk Hyundai (KOR) 197
Nigeria NWANKWO Simeon FC Crotone (ITA) 197

4.5.4 Age et Taille moyens des équipes

wcp %>% group_by(team)%>%
  select(team,age,height) %>%
  summarise( age_moyen = round(mean(age),0),
             taille_moyenne=round(mean(height),0)) %>%
  arrange(age_moyen, taille_moyenne) %>%
  kable(booktab =T) %>%
  kable_styling(full_width = T)
team age_moyen taille_moyenne
England 27 183
France 27 183
Tunisia 27 183
Nigeria 27 185
Serbia 27 187
Peru 28 178
Korea Republic 28 182
Morocco 28 183
Switzerland 28 183
IR Iran 28 184
Senegal 28 184
Belgium 28 185
Germany 28 186
Denmark 28 187
Saudi Arabia 29 178
Japan 29 179
Portugal 29 180
Spain 29 180
Australia 29 181
Brazil 29 181
Colombia 29 181
Uruguay 29 181
Poland 29 183
Russia 29 184
Croatia 29 185
Iceland 29 186
Sweden 29 186
Argentina 30 178
Mexico 30 180
Costa Rica 30 181
Egypt 30 181
Panama 30 182
sort(table(club), decreasing = T)%>%head(20)%>%
  kable(booktab = T) %>%
  kable_styling(full_width = T)
club Freq
Manchester City FC (ENG) 16
Real Madrid CF (ESP) 15
FC Barcelona (ESP) 14
Chelsea FC (ENG) 12
Paris Saint-Germain FC (FRA) 12
Tottenham Hotspur FC (ENG) 12
FC Bayern München (GER) 11
Juventus FC (ITA) 11
Manchester United FC (ENG) 11
Al Ahli SC (KSA) 9
Al Hilal SFC (KSA) 9
Atletico Madrid (ESP) 9
AS Monaco (FRA) 8
Leicester City FC (ENG) 8
Al Ahly SC (EGY) 7
Arsenal FC (ENG) 7
Borussia Dortmund (GER) 7
Liverpool FC (ENG) 7
Sporting CP (POR) 7
VfL Borussia Mönchengladbach (GER) 7

4.5.5 Position des joueurs par équipe

table(team, pos) %>%kable(booktab = T) %>%
  kable_styling(full_width = T)
DF FW GK MF
Argentina 9 4 3 7
Australia 7 8 3 5
Belgium 7 5 3 8
Brazil 8 5 3 7
Colombia 7 5 3 8
Costa Rica 9 3 3 8
Croatia 8 6 3 6
Denmark 7 7 3 6
Egypt 8 6 3 6
England 10 5 3 5
France 8 7 3 5
Germany 9 3 3 8
Iceland 7 3 3 10
IR Iran 8 7 3 5
Japan 8 3 3 9
Korea Republic 10 3 3 7
Mexico 6 7 3 7
Morocco 6 4 3 10
Nigeria 8 6 3 6
Panama 8 5 3 7
Peru 8 5 3 7
Poland 7 4 3 9
Portugal 8 5 3 7
Russia 7 2 3 11
Saudi Arabia 7 3 3 10
Senegal 6 8 3 6
Serbia 8 4 3 8
Spain 8 5 3 7
Sweden 8 4 3 8
Switzerland 8 4 3 8
Tunisia 8 8 3 4
Uruguay 7 6 3 7

4.6 Valeur marchande des joueurs

Je m’intéresse maintenant à la performance des joueurs. Pour cela j’utilise une autre feuille de données qui intègre tous les footballeurs en activités.

w <- read.csv("Data/wp2018.csv",header = T)

names(w)    # Toutes les variables présentes dans les données
##  [1] "X"                   "Name"                "Age"                
##  [4] "Photo"               "Nationality"         "Flag"               
##  [7] "Overall"             "Potential"           "Club"               
## [10] "Club.Logo"           "Value"               "Wage"               
## [13] "Special"             "Acceleration"        "Aggression"         
## [16] "Agility"             "Balance"             "Ball.control"       
## [19] "Composure"           "Crossing"            "Curve"              
## [22] "Dribbling"           "Finishing"           "Free.kick.accuracy" 
## [25] "GK.diving"           "GK.handling"         "GK.kicking"         
## [28] "GK.positioning"      "GK.reflexes"         "Heading.accuracy"   
## [31] "Interceptions"       "Jumping"             "Long.passing"       
## [34] "Long.shots"          "Marking"             "Penalties"          
## [37] "Positioning"         "Reactions"           "Short.passing"      
## [40] "Shot.power"          "Sliding.tackle"      "Sprint.speed"       
## [43] "Stamina"             "Standing.tackle"     "Strength"           
## [46] "Vision"              "Volleys"             "CAM"                
## [49] "CB"                  "CDM"                 "CF"                 
## [52] "CM"                  "ID"                  "LAM"                
## [55] "LB"                  "LCB"                 "LCM"                
## [58] "LDM"                 "LF"                  "LM"                 
## [61] "LS"                  "LW"                  "LWB"                
## [64] "Preferred.Positions" "RAM"                 "RB"                 
## [67] "RCB"                 "RCM"                 "RDM"                
## [70] "RF"                  "RM"                  "RS"                 
## [73] "RW"                  "RWB"                 "ST"

4.7 Recodage de variables

Je vais juste choisir les variables dont j’aurai besoin pour la suite de cette étude.

wp <- select(w, name=Name, rating=Overall, 
             nationality=Nationality, age=Age, 
             club=Club, position=Preferred.Positions)

head(wp, 10) %>%
  kable(booktab = T) %>% 
  kable_styling(full_width = T)
name rating nationality age club position
Cristiano Ronaldo 94 Portugal 32 Real Madrid CF ST LW
L. Messi 93 Argentina 30 FC Barcelona RW
Neymar 92 Brazil 25 Paris Saint-Germain LW
L. Suárez 92 Uruguay 30 FC Barcelona ST
M. Neuer 92 Germany 31 FC Bayern Munich GK
R. Lewandowski 91 Poland 28 FC Bayern Munich ST
De Gea 90 Spain 26 Manchester United GK
E. Hazard 90 Belgium 26 Chelsea LW
T. Kroos 90 Germany 27 Real Madrid CF CDM CM
G. Higuaín 90 Argentina 29 Juventus ST
glimpse(wp)
## Observations: 17,981
## Variables: 6
## $ name        <fct> Cristiano Ronaldo, L. Messi, Neymar, L. Suárez, M....
## $ rating      <int> 94, 93, 92, 92, 92, 91, 90, 90, 90, 90, 90, 89, 89...
## $ nationality <fct> Portugal, Argentina, Brazil, Uruguay, Germany, Pol...
## $ age         <int> 32, 30, 25, 30, 31, 28, 26, 26, 27, 29, 31, 26, 25...
## $ club        <fct> Real Madrid CF, FC Barcelona, Paris Saint-Germain,...
## $ position    <fct> ST LW , RW , LW , ST , GK , ST , GK , LW , CDM CM ...
attach(wp) # manipulation plus simple des colonnes

# function pour supprimer les caractères spéciaciales
removeSpecialChars <- function(x) {
  gsub("[^a-zA-Z0-9 ]", " ", x)
}

wp$name <- sapply(wp$name, removeSpecialChars)

# Ne laisse qu'un seul choix pour la position des joueurs. 
# Exemple: Ronaldo: "ST LW" donnera seulement "ST"
# Ainsi que T.kroos:"CDM CM" donnera "CDM"

# On soustrait les 3 chractères et s'il y'a un espace, on le supprime
wp$position <- str_trim(str_sub(wp$position, 1, 3))

wp$position <- str_replace_all(wp$position, 
                               c("ST"="AV", "RB"="DD",
                                  "RWB"="DD", "LWB"="DG",
                                 "CB"="DC", "LB"="DG", 
                                 "AVGB"="DG","AVDB"="DD",
                                 "RM"="MD","LM"="MG", 
                                 "CM"="MC","CAM"="MOC",
                                 "CF"="AV","RF"="AVD",
                                 "RW"="AVD", "LW"="AVG",
                                 "CDM"="MC","LF"="AVG"))
wp$position <- factor(wp$position, 
                      levels=c("GK", "DC","DG","DD","MC",
                               "MG","MD","MOC","AV","AVG","AVD"))

head(wp,10) %>% 
  kable(booktab=T)
name rating nationality age club position
Cristiano Ronaldo 94 Portugal 32 Real Madrid CF AV
L Messi 93 Argentina 30 FC Barcelona AVD
Neymar 92 Brazil 25 Paris Saint-Germain AVG
L Su rez 92 Uruguay 30 FC Barcelona AV
M Neuer 92 Germany 31 FC Bayern Munich GK
R Lewandowski 91 Poland 28 FC Bayern Munich AV
De Gea 90 Spain 26 Manchester United GK
E Hazard 90 Belgium 26 Chelsea AVG
T Kroos 90 Germany 27 Real Madrid CF MC
G Higua n 90 Argentina 29 Juventus AV

4.8 Représentation graphique

Comme sur la partie précédente, nous allons représenter les varaibles retenues

p <- ggplot(wp)+
  geom_histogram(aes(age),
                 col="white",fill="#56B4E9", 
                 breaks=rep(15:40),
                 alpha=0.7)
ggplotly(p)

  On remarque que la variable age suit une loi de student et que l’age des joueurs est essentiellement concentré entre 18 et 29 ans. 

p <- ggplot(wp)+
  geom_histogram(aes(rating), col="white")
ggplotly(p)
ggplot(wp,aes(position,fill=position))+
  geom_bar(stat="count")+
  geom_text(aes(label=..count..),
            stat="count", 
            position=position_stack(0.96))+
  ggtitle("Position des joueurs")+
  theme(legend.position = "none")


 

4.8.1 Nombre de joueur par pays

sort(table(nationality), decreasing = T) %>%
  head(50) %>%
  kable()
nationality Freq
England 1630
Germany 1140
Spain 1019
France 978
Argentina 965
Brazil 812
Italy 799
Colombia 592
Japan 469
Netherlands 429
Republic of Ireland 417
United States 381
Chile 375
Sweden 368
Portugal 367
Mexico 360
Denmark 346
Poland 337
Norway 333
Korea Republic 330
Saudi Arabia 329
Russia 306
Scotland 300
Turkey 291
Belgium 272
Austria 266
Switzerland 233
Australia 227
Uruguay 153
Serbia 133
Senegal 129
Nigeria 126
Wales 123
Ghana 117
Croatia 109
Ivory Coast 101
Greece 98
Cameroon 86
Northern Ireland 86
Morocco 78
South Africa 77
Czech Republic 73
Paraguay 69
Slovenia 65
Slovakia 64
Finland 62
Romania 59
DR Congo 58
Algeria 57
Bosnia Herzegovina 55

4.8.2 Les 100 meilleurs footballeurs

On va selectionner les 100 meilleurs footbaleurs de 2018 pour étudier leur différents aspects.

bestplayer <- wp %>% 
  select(name:position) %>%
  arrange(desc(rating)) %>%
  slice(1:100)

head(bestplayer) %>%
  kable(booktab=T) %>% 
  kable_styling(position = "center")
name rating nationality age club position
Cristiano Ronaldo 94 Portugal 32 Real Madrid CF AV
L Messi 93 Argentina 30 FC Barcelona AVD
Neymar 92 Brazil 25 Paris Saint-Germain AVG
L Su rez 92 Uruguay 30 FC Barcelona AV
M Neuer 92 Germany 31 FC Bayern Munich GK
R Lewandowski 91 Poland 28 FC Bayern Munich AV

 

summary(bestplayer) %>%
  kable(booktab=T) %>% 
  kable_styling(font_size = 11)
name rating nationality age club position
Length:100 Min. :84.00 Spain :15 Min. :21.0 Real Madrid CF :13 DC :20
Class :character 1st Qu.:85.00 France :11 1st Qu.:25.0 FC Bayern Munich:12 MC :17
Mode :character Median :86.00 Germany:11 Median :28.0 Juventus : 9 AV :16
NA Mean :86.84 Belgium:10 Mean :28.1 FC Barcelona : 8 GK :13
NA 3rd Qu.:88.00 Brazil : 9 3rd Qu.:30.0 Chelsea : 7 AVG : 9
NA Max. :94.00 Italy : 7 Max. :39.0 Manchester City : 6 MG : 8
NA NA (Other):37 NA (Other) :45 (Other):17

4.8.3 Les 100 meilleurs joueurs par PAYS

p <- bestplayer %>% 
  group_by(nationality) %>% 
  summarise(nb = n()) %>% 
  ggplot(aes(x = reorder(nationality, nb),
           y = nb, fill=nationality))+
  geom_bar(stat = "identity")+
  labs(title="Les 100 meilleurs joueurs par pays",
     x="Pays", y="Nombre de joueurs")+
  coord_flip()+
  theme_classic()+
  theme(legend.position='none')
 
ggplotly(p)

 Ce classement est dominé par l’Espagne avec 15 joueurs suivit, en exeaquo, par la France et l’Allemagne avec 11 joueurs puis respectivement par la Belgique (10), le Brasil(9), l’Italy(7) et l’Argentine (5)

4.8.4 Les 100 meilleurs joueurs par club

p <- bestplayer %>% 
  group_by(club) %>% 
  summarise(nb = n()) %>% 
  ggplot(aes(x = reorder(club, nb),
           y = nb, fill=club))+
  geom_col()+
  labs(title="Les 100 meilleurs joueurs par club", 
       x = "Club",
       y="Nombre de joueurs")+
  coord_flip()+
  theme(legend.position='none')
ggplotly(p)

  On note une domination des grands clubs hisqtoriques: le Real Madrid (12), le Bayern Munich (9), la Juventus (8) et le FC Barcelone (7).
Le premier club français est évidemment le Paris-Saint-Germain (6) suivi de l’AS Monaco (4) et de l’AS Saint-Etienne (1).
Bien que dominé par quatre clubs, la répartition des 100 meilleurs footballeurs reste assez homogène sur les quatre championnats majeurs de la FIFA.

p <- bestplayer %>% 
ggplot(aes(reorder(position,age, FUN = median),
                 age, fill=position))+
  stat_boxplot(geom="errorbar", width=.2)+
  geom_boxplot()+ 
  labs(title="Boxplot de l'âge par rapport au poste",
     x = "Poste des joueurs", y = "Age")+
  theme(plot.title = element_text(color="red", 
                                size=14, face="bold.italic"))+
  theme_minimal()+
  theme(legend.position='none')
ggplotly(p)
p <- ggplot(bestplayer,aes(age,rating, size=rating))+
  geom_point()+ 
  geom_smooth(method = lm,color="darkred", fill="blue")+
  labs(title="Regression des ages par rapport \n au niveau des joueurs")+
  theme(plot.title = element_text(color="red", size=14, face="bold.italic"))+
  theme_minimal()+
  theme(legend.position='none')
ggplotly(p)