Descrição do exercício:


Para duas variáveis quantitativas: fazer um diagrama de dispersão e uma matriz de correlação na base de dados FifaData.csv


Criação da base de dados.



Carrregando arquivo

library(readr)
FifaData <- read_csv("C:/Users/marco/Desktop/Base_de_dados-master/FifaData.csv")
View(FifaData)

Verificando dados

head(FifaData)
# A tibble: 6 x 53
  Name    Nationality National_Positi~ National_Kit Club  Club_Position Club_Kit
  <chr>   <chr>       <chr>                   <dbl> <chr> <chr>            <dbl>
1 Cristi~ Portugal    LS                          7 Real~ LW                   7
2 Lionel~ Argentina   RW                         10 FC B~ RW                  10
3 Neymar  Brazil      LW                         10 FC B~ LW                  11
4 Luis S~ Uruguay     LS                          9 FC B~ ST                   9
5 Manuel~ Germany     GK                          1 FC B~ GK                   1
6 De Gea  Spain       GK                          1 Manc~ GK                   1
# ... with 46 more variables: Club_Joining <chr>, Contract_Expiry <dbl>,
#   Rating <dbl>, Height <chr>, Weight <chr>, Preffered_Foot <chr>,
#   Birth_Date <chr>, Age <dbl>, Preffered_Position <chr>, Work_Rate <chr>,
#   Weak_foot <dbl>, Skill_Moves <dbl>, Ball_Control <dbl>, Dribbling <dbl>,
#   Marking <dbl>, Sliding_Tackle <dbl>, Standing_Tackle <dbl>,
#   Aggression <dbl>, Reactions <dbl>, Attacking_Position <dbl>,
#   Interceptions <dbl>, Vision <dbl>, Composure <dbl>, Crossing <dbl>, ...

Ajustando dados


Como iremos trabalhar com o peso e altura nas análises de dados, precisamos eliminar a parte de texto destas colunas.
Criaremos novas colunas apenas com as partes numéricas.

#Limpar colunas de peso e altura das nomenclaturas - Elas estão como caracter, tranformar para números.
library(dplyr)
library(stringr)
FifaData = FifaData %>%
      mutate(
      Peso = as.integer(gsub('[a-zA-Z]', '', FifaData$Weight)),
      Altura = as.integer(gsub('[a-zA-Z]', '', FifaData$Height)))

Analisando os dados antes da geração dos gráficos.



Altura


Mínimo, 1º Quartil, Moda, Média, 3º Quartil e Máximo.


summary(FifaData$Altura)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
  155.0   176.0   181.0   181.1   186.0   207.0 

Desvio Padrão


dpadalt=sd(FifaData$Peso)
dpadalt
[1] 6.897948

Coeficiente de variação


CVpeso = (dpadalt/mean(FifaData$Altura))*100
CVpeso
[1] 3.808801

Histograma


ampalt=diff(range(FifaData$Altura))
Maioralt=max(FifaData$Altura)
Menoralt=min(FifaData$Altura)
Mediaalt=mean(FifaData$Altura)

quebrasalt=(ampalt/20)
hist(FifaData$Altura, main="Gráfico 1 - Distribuição de altura", xlab = "Valores", ylab = "Frequência", col="red" ,density = 50, angle = 45, breaks = seq(Menoralt,Maioralt, quebrasalt), axes = TRUE, probability = TRUE)
x = Menoralt:Maioralt
y = dnorm(x = x, mean = Mediaalt, sd = dpadalt)
lines(x = x, y = y, col = "black", lwd=2)

Faixas de altura.


FifaData = FifaData %>%
 mutate(
  faixa_Altura = case_when(
    Altura < 160 ~ "1. Romário",
    Altura < 175 ~ "2. Mediano",
    Altura < 190 ~ "3. Normal",
    Altura < 205 ~ "4. Alto",
    Altura < 215 ~ "5. Gigante",
        TRUE ~ "8. Outro Caso"))

library(reactable)
FifaData %>% select(faixa_Altura) %>% table() %>%
  data.frame() %>% reactable()

Boxplot


boxplot(Altura~faixa_Altura,
        data = FifaData,main="Gráfico 2 - Análise Faixa de Alturas",
        col=c("blue","red"), horizontal = T,
        xlab = "Altura (cm)", ylab = "Faixas de altura")


* Comentário 1 : Podemos observar que existem ajustes a serem realizados nas classificação, pois a faixa 5-Gigante, possui apenas um representante, nas faixas 2 e 4 apareceram outliners, indicando que as faixas não estão bem ajustadas ao banco de dados; a faixa 3 está muito grande em relação às demais, indicando concentração de dados.


Ajustando as faixas de altura para os dados do “summary”


Nova Faixa de altura.


FifaData = FifaData %>%
 mutate(
  faixa_Altura2 = case_when(
    Altura < 166 ~ "1. Baixinho",
    Altura < 171 ~ "2. Pequeno",
    Altura < 176 ~ "3. Quase lá",
    Altura < 181 ~ "4. Normal",
    Altura < 186 ~ "5. Alto",
    Altura < 191 ~ "6. Muito alto",
    Altura < 196 ~ "7. Jogador de basquete",
    Altura < 215 ~ "8. Poste",
        TRUE ~ "9. Outro Caso"))

library(reactable)
FifaData %>% select(faixa_Altura2) %>% table() %>%
  data.frame() %>% reactable()

Boxplot


boxplot(Altura~faixa_Altura2,
        data = FifaData,main="Gráfico 3 - Análise Faixa de Alturas - Nova Classificação",
        col=c("lightblue","pink"), horizontal = T,
        xlab = "Altura (cm))", ylab = "Faixas de altura")


* Comentário 2 : Os outliners ainda aparecem, mas apenas nas faixas de extremidade, a distribuição das faixas centrais está mais homogênea, indicando uma melhor classificação das faixas.



Peso


Mínimo, 1º Quartil, Moda, Média, 3º Quartil e Máximo.


summary(FifaData$Peso)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
  48.00   70.00   75.00   75.25   80.00  110.00 

Desvio Padrão


dpadpeso=sd(FifaData$Peso)
dpadpeso
[1] 6.897948

Coeficiente de variação


CVpeso = (dpadpeso/mean(FifaData$Peso))*100
CVpeso
[1] 9.166299

Histograma


amppeso=diff(range(FifaData$Peso))
Maiorpeso=max(FifaData$Peso)
Menorpeso=min(FifaData$Peso)
Mediapeso=mean(FifaData$Peso)

quebraspeso=(amppeso/20)
hist(FifaData$Peso, main="Gráfico 4 - Distribuição de Pesos", xlab = "Valores", ylab = "Frequência", col="blue" ,density = 30, angle = 135, breaks = seq(Menorpeso,Maiorpeso, quebraspeso), axes = TRUE, probability = TRUE)
x = Menorpeso:Maiorpeso
y = dnorm(x = x, mean = Mediapeso, sd = dpadpeso)
lines(x = x, y = y, col = "red", lwd=2)

Faixas de Peso utilizando nomenclaturas do Boxe.


FifaData = FifaData %>%
 mutate(
  faixa_Peso = case_when(
    Peso < 47.63 ~ "1. Palha",
    Peso < 50.35 ~ "2. Mosca",
    Peso < 53.52 ~ "3. Galo",
    Peso < 57.15 ~ "4. Pena",
    Peso < 61.23 ~ "5. Leve",
    Peso < 73.03 ~ "6. Médio",
    Peso < 79.03 ~ "7. Meio Pesado",
    Peso > 79.03 ~ "8. Pesado",
    TRUE ~ "8. Outro Caso"))

library(kableExtra)
FifaData %>% select(faixa_Peso) %>% table() %>%
  data.frame() %>%  kbl() %>%
  kable_styling() %>%
  kable_paper("striped", full_width = F) 
. Freq
  1. Mosca
4
  1. Galo
4
  1. Pena
41
  1. Leve
235
  1. Médio
6946
  1. Meio Pesado
5674
  1. Pesado
4684

Boxplot

boxplot(Peso~faixa_Peso,
        data = FifaData,main="Gráfico 5 - Análise Faixa de Pesos",
        col=c("green","yellow"), horizontal = T,
        xlab = "Pesos (Kg)", ylab = "Faixas de peso")

  • Comentário 3 : Podemos observar que as faixas iniciais estão muito estreitas, e que existem vários outliners na faixa 8, indicando uma escolha ruim de classificação. Subintende-se que a faixa de pesos utilizados no boxe, não é um bom parâmetro para classificar os jogadores de futebol.

  • Comentário 4: Como o iintuito deste estudo é apresentar uma correlação entre duas variáveis, não realizaremos os ajustes na classificação dos pesos como feito no caso das alturas.


Diagrama de dispersão


plot(FifaData$Altura,FifaData$Peso,
     main="Gráfico 6 - Diagrama de dispersão",
     xlab="Altura (cm)",
     ylab="Peso (Kg)",
     col='lightblue',pch=16,
     )
abline(lsfit(FifaData$Altura,FifaData$Peso),col="red")


Cálculo da correlação entre as duas variáveis.

cor(FifaData$Altura,FifaData$Peso)
[1] 0.7582135


* Comentário 5 : Podemos observar através do gráfico que os dados possuem uma correlalção positivia e forte 0,75.


Nas avaliações físicas é utilizado o cálculo do IMC - Índice de Massa Corporal, que é uma relação entre a altura e o peso dos indivíduos, pois a relação direta entre estas duas unidades, indicaria se uma pessoa está fora do peso ideal, já que não podemos dizer que uma pessoa com 100 Kg está acima do peso se ela possui 1,99 m de altura.


Para fazermos a correta relação, primeiramente precisamos criar uma coluna de IMC.

FifaData = FifaData %>%
      mutate(
      IMC = (Peso / ((Altura^2)/10000)))


Faixas de IMC.
Segundo a OMS Organização Mundial da Saúde:

IMC <18,5kg/m2 (baixo peso); IMC >18,5 até 24,9kg/m2 (eutrofia); IMC ≥25 até 29,9kg/m2 (sobrepeso); e IMC >30,0kg/m2 (obesidade).

summary(FifaData$IMC)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
  17.09   22.06   22.92   22.92   23.77   34.72 


FifaData = FifaData %>%
 mutate(
  faixa_IMC = case_when(
    IMC < 15.50 ~ "1. Baixo peso",
    IMC < 24.90 ~ "2. Eutrofia",
    IMC < 29.90 ~ "3. Sobrepeso",
        TRUE ~ "4. Obesidade"))

library(kableExtra)
FifaData %>% select(faixa_IMC) %>% table() %>%
  data.frame() %>%  kbl() %>%
  kable_styling() %>%
  kable_paper("striped", full_width = F) 
. Freq
  1. Eutrofia
16415
  1. Sobrepeso
1170
  1. Obesidade
3

  • Comentário 6 : Podemos observar que as faixas utilizadas pela OMS em relação a base de dados, temos que a maioria dos atelatas encontram-se na faixa da Eutrofia, ou seja, possuem IMC normal.

Diagrama de dispersão IMC


plot(FifaData$Altura,FifaData$IMC,
     main="Gráfico 7 - Dispersão IMC",
     xlab="Altura (cm)",
     ylab="IMC",
     col='green',pch=16,
     )
abline(lsfit(FifaData$Altura,FifaData$IMC),col="black")


Cálculo da correlação entre as duas variáveis.

cor(FifaData$Altura,FifaData$IMC)
[1] -0.07082073


Como a curiosidade matou o gato, vamos saber quem são os outliners do IMC.

df <- data.frame(
  id = 1:3, 
  Nomes = FifaData$Name[FifaData$IMC > 29.90],
  Posição = FifaData$Club_Position[FifaData$IMC > 29.90],
  Idade = FifaData$Age[FifaData$IMC > 29.90],
  Peso = FifaData$Peso[FifaData$IMC > 29.90],
  Altura = FifaData$Altura[FifaData$IMC > 29.90],
  IMC = FifaData$IMC[FifaData$IMC > 29.90])

df
  id               Nomes Posição Idade Peso Altura      IMC
1  1   Adebayo Akinfenwa      ST    34  110    178 34.71784
2  2 Sylvan Ebanks-Blake      RS    31   92    173 30.73942
3  3         Hiram Muñoz     Res    21   85    168 30.11621

Correlação outras categorias.


library(kableExtra)
library(reactable)
library(corrplot)
FifaData %>% select(Ball_Control,Dribbling,Marking,Aggression,Acceleration,Speed,Strength,Agility,Jumping) %>%
  cor() %>% corrplot.mixed()


Comentários.


Podemos observar que há uma correlação forte entre o peso e a altura, mas que o mesmo não se aplica quando analisamos o IMC. Entende-se por esta comparação que uma pessoa que é mais pesada, nem sempre está acima de seu peso, pois sua altura interfere nesta comparação.
A correlação do IMC com a altura é praticamente nula, com uma leve tendência a negativa; em contrapartida a de peso possui correlção forte e positiva.
Também pode-se observar que a uma definição incoerente das faixas para classificação de categorias relacionadas a um dado, pode interferir na análise dos dados.
Com esta base de dados podemos fazer diversas inferências, tais como a relação de altura do pulo com a altura do jogador, velocidade ou força com a idade.