Introdução Link para o cabeçalho
Meu intuito nesta análise é verificar qual a idade em que jogadores de futebol atingem seu maior preço. Com isso, pretendo analisar qual seria a melhor idade para vender um jogador
Uma limitação do meu método é não conseguir avaliar se um jogador no seu auge deveria ser vendido. Como não possuo informações a respeito do seu desempenho em campo, este tipo de análise não pode ser feito com os dados que possuo.
Aliás, os dados foram obtidos a partir do Kaggle: Football Data from Transfermarkt.
Preparação dos Dados Link para o cabeçalho
O conjunto de dados original possui 10 arquivos. Nesta análise usarei apenas dois, chamados players.csv
e player_valuations.csv
.
players <-
read_csv("dados/players.csv") |>
clean_names()
## Rows: 31573 Columns: 23
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (15): first_name, last_name, name, player_code, country_of_birth, city_...
## dbl (6): player_id, last_season, current_club_id, height_in_cm, market_val...
## dttm (1): contract_expiration_date
## date (1): date_of_birth
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
player_valuations <-
read_csv("dados/player_valuations.csv") |>
clean_names()
## Rows: 478189 Columns: 5
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (1): player_club_domestic_competition_id
## dbl (3): player_id, market_value_in_eur, current_club_id
## date (1): date
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
Como ambos possuem a coluna player_id
, com um número único para cada jogador, é possível juntá-los:
dados <-
players |>
left_join(player_valuations, by = "player_id")
dim(dados)
## [1] 479699 27
São dim(dados)[1]
jogadores diferentes presentes no conjunto de dados. Não sei afirmar se todos os jogadores profissionais do mundo estão lá, mas ao menos os principais estão diponíveis. Por exemplo, esta é a evolução do valor de mercado do Neymar:
dados |>
filter(grepl("Neymar", name)) |>
ggplot(aes(x = date, y = market_value_in_eur.y)) +
geom_line() +
scale_y_continuous(labels = comma) +
labs(x = "Data", y = "Valor de Mercado (Euros)")
Abaixo a comparação entre Neymar, Messi e Mbappé:
dados |>
filter(grepl("Neymar|Messi$|Mbappé", name)) |>
filter(!grepl("Ethan", name)) |>
ggplot(aes(x = date, y = market_value_in_eur.y, group = name, colour = name)) +
geom_line() +
scale_y_continuous(labels = comma) +
labs(x = "Data", y = "Valor de Mercado (Euros)") +
scale_colour_viridis_d()
Note como é possível perceber a ascenção e queda dos valores de mercado de Messi e Meymar, enquanto o valor de mercado de Mbappé permanece bastante próximo ao máximo atingido.
Com isso feito, agora vem as perguntas:
- Como encontrar a idade em que os jogadores atingem o seu valor de mercado máximo?
- Existem diferenças entre países, isto é, jogadores de países europeus tendem a atingir o seu pico de valor de mercado em uma idade diferente dos sulamericanos?
É o que iremos responder a seguir.
Idade de maior valor de mercado Link para o cabeçalho
Para encontrar a idade na qual cada jogador atingiu seu maior valor de mercado, eu encontrei a primeira e última datas em que cada jogador atingiu este valor. Com esta informação, eu descobri as idades que cada jogador tinha nestas duas datas e fiz a média aritmética entre elas.
dados_idade <-
dados |>
select(player_id, name, country_of_birth, date_of_birth, date, market_value_in_eur = market_value_in_eur.y, highest_market_value_in_eur) |>
filter(market_value_in_eur == highest_market_value_in_eur) |>
group_by(player_id) |>
filter((date == max(date, na.rm = TRUE))|date == min(date, na.rm = TRUE)) |>
mutate(idade = date-date_of_birth) |>
mutate(idade_media = as.numeric(mean(idade, na.rm = TRUE))/365) |>
drop_na(idade_media) |>
drop_na(country_of_birth) |>
filter((date == max(date))) |>
ungroup()
O resultado obtido é este:
dados_idade |>
summarise(media = mean(idade_media))
## # A tibble: 1 × 1
## media
## <dbl>
## 1 24.3
Ou seja, a idade média em que os jogadores atingiram seu valor máximo de mercado é 24.3 anos. Ou seja, isso ocorre com eles bem jovens. Abaixo vemos a distribuição destas idades:
ggplot(dados_idade, aes(x = idade_media)) +
geom_histogram(binwidth = 1, boundary = 0, closed = "left", colour = "white") +
labs(x = "Idade Média ao Atingor Valor Máximo de Mercado", y = "Frequência") +
scale_x_continuous(breaks = seq(0, 50, 5))
Diferenças entre países Link para o cabeçalho
Se realizarmos esta análise por país, os países com maiores e menores idades médias em que seus jogadores atingem a valorização máxima são, respectivamente,
dados_idade |>
group_by(country_of_birth) |>
summarise(media = mean(idade_media)) |>
arrange(desc(media))
## # A tibble: 184 × 2
## country_of_birth media
## <chr> <dbl>
## 1 India 32.6
## 2 Oman 30.6
## 3 Neukaledonien 30.4
## 4 Tahiti 29.7
## 5 Libya 28.7
## 6 Malta 28.4
## 7 Dominica 28.4
## 8 Guatemala 27.3
## 9 Jordan 27
## 10 East Germany (GDR) 26.9
## # ℹ 174 more rows
e
dados_idade |>
group_by(country_of_birth) |>
summarise(media = mean(idade_media)) |>
arrange(media)
## # A tibble: 184 × 2
## country_of_birth media
## <chr> <dbl>
## 1 Serbia and Montenegro 19.3
## 2 Korea, North 19.6
## 3 Guernsey 20.3
## 4 DR Congo 20.9
## 5 Sudan 21.1
## 6 Sao Tome and Principe 21.2
## 7 Curacao 21.3
## 8 Liechtenstein 21.3
## 9 Somalia 21.6
## 10 Türkiye 22.0
## # ℹ 174 more rows
Como há muitos países com pouca tradição no futebol, vou manter na análise apenas aqueles que já disputaram alguma semi-final de Copa do Mundo:
dados_idade |>
filter(country_of_birth %in% c("Brazil", "Germany", "Italy", "Argentina", "France", "Uruguay", "England", "Spain", "Netherlands", "Hungary", "Czech Republic", "Sweden", "Croatia", "Poland", "Austria", "Portugal", "Belgium", "United States", "Chile", "Turkey", "Serbia", "Russia", "Bulgaria", "South Korea", "Morocco")) |>
group_by(country_of_birth) |>
summarise(media = mean(idade_media)) |>
arrange(media) |>
print(n = Inf)
## # A tibble: 23 × 2
## country_of_birth media
## <chr> <dbl>
## 1 Turkey 22.8
## 2 Russia 22.9
## 3 Italy 23.3
## 4 Belgium 23.5
## 5 Netherlands 23.6
## 6 Croatia 23.9
## 7 Czech Republic 24.0
## 8 Germany 24.1
## 9 United States 24.2
## 10 France 24.4
## 11 England 24.4
## 12 Portugal 24.4
## 13 Sweden 24.6
## 14 Poland 24.7
## 15 Hungary 24.7
## 16 Spain 24.8
## 17 Morocco 24.8
## 18 Uruguay 24.9
## 19 Austria 25.0
## 20 Brazil 25.3
## 21 Argentina 25.5
## 22 Bulgaria 25.6
## 23 Chile 25.6
Aparentemente, os jogadores dos principais países sul-americanos atingem seus valores de mercado máximos depois dos europeus.