Para duas variáveis quantitativas: fazer um diagrama de dispersão e uma matriz de correlação na base de dados FifaData.csv
library(readr)
FifaData <- read_csv("C:/Users/marco/Desktop/Base_de_dados-master/FifaData.csv")
View(FifaData)
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>, ...
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)))
summary(FifaData$Altura)
Min. 1st Qu. Median Mean 3rd Qu. Max.
155.0 176.0 181.0 181.1 186.0 207.0
dpadalt=sd(FifaData$Peso)
dpadalt
[1] 6.897948
CVpeso = (dpadalt/mean(FifaData$Altura))*100
CVpeso
[1] 3.808801
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)
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(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”
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(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.
summary(FifaData$Peso)
Min. 1st Qu. Median Mean 3rd Qu. Max.
48.00 70.00 75.00 75.25 80.00 110.00
dpadpeso=sd(FifaData$Peso)
dpadpeso
[1] 6.897948
CVpeso = (dpadpeso/mean(FifaData$Peso))*100
CVpeso
[1] 9.166299
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)
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 |
|---|---|
|
4 |
|
4 |
|
41 |
|
235 |
|
6946 |
|
5674 |
|
4684 |
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.
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 |
|---|---|
|
16415 |
|
1170 |
|
3 |
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
library(kableExtra)
library(reactable)
library(corrplot)
FifaData %>% select(Ball_Control,Dribbling,Marking,Aggression,Acceleration,Speed,Strength,Agility,Jumping) %>%
cor() %>% corrplot.mixed()
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.