Outro dia, falando com um amigo sobre o que pediria para um gênio se tivesse apenas um pedido eu disse que pediria acesso ao banco de dados de deus (Por que não? Já que estamos falando de seres imaginários e pedidos impossíveis).

Imagine que divertido seria poder consultar coisas do tipo quantos átomos existem no universo, número de células no meu corpo, quais seres cada átomo do meu corpo já foi parte e por aí vai…

Falando de deus, o assunto acabou indo para a morte recente de Maradona e a impressão de meu amigo que um número grande de jogadores de futebol morriam relativamente cedo. Eu puxei pela memória e lembrei de alguns casos de acidente e problemas do coração, mas os casos que lembrei eram bem esparsos e não parecia ser tão predominante assim, ou seriam? Podemos ter algum viés e dar atenção só aos casos excepcionais.

Fiquei com isso na cabeça e, como não tenho acesso ao banco de dados divino pensei na segunda melhor coisa: Wikipedia. Eu resolvi tentar pegar os dados usando o site e ver se tinha algum padrão, mas, enquanto apanhava na tentativa de fazer um scrapping das páginas eis que encontro o Wikidata, um projeto irmão da Wikipedia que proporciona acesso a dados estruturados que podem ser consultads usando uma linguagem chamada SPARQL. Não preciso dizer que fiquei obcecado com o projeto.

Os detalhes de SPARQL e do Wikidata não vem ao caso no momento, mas essa descoberta me deu acesso aos dados que precisava para fazer uma analise se tem algo de diferente nas mortes de jogadores de futebol.

Vamos lá, primeiro vamos importar as bibliotecas que preciso:

library(WikidataQueryServiceR)

Uma vez que as bibliotecas estão carregadas, agora podemos consultar os dados que preciso:

r <- query_wikidata('SELECT ?personLabel ?day_of_birth ?day_of_death ?cause_of_deathLabel WHERE {

?person wdt:P106 wd:Q937857;

wdt:P509 ?cause_of_death;

SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en". }

Nesse momento, temos 2617 jogadores listados no Wikidata que já morreram.

Agora temos que arrumar algumas datas para o data type correto:

r$day_of_birth <- as.Date(r$day_of_birth)

r$day_of_death <- as.Date(r$day_of_death)

r$age <- time_length(difftime(r$day_of_death, r$day_of_birth), 'years')

r <- r %>% filter(!(r$age < 14 | r$age > 104))

Sobraram 2609 linhas.

E agora podemos visualizar e explorar os dados:

ggplot(r, aes(age)) + geom_histogram(bins=10, fill=I("blue"), col=I("red"), alpha=I(.2), xlim=c(20,100), breaks=seq(20, 100, by=3)) + scale_fill_gradient("Count", low="blue", high="red") + labs(title="Histogram for Age", x="Age", y="Count") + ylim(c(0,300)) + scale_x_continuous(breaks=seq(20, 100, 5)) + scale_y_continuous(breaks=seq(0, 300, 25)) + theme_clean()

ggplot(r, aes(age)) + geom_histogram(aes(y =..density..), fill=I("blue"), col=I("red"), alpha=I(.2), breaks=seq(20, 100, by=3)) + scale_fill_gradient("Count", low="blue", high="red") + labs(title="Histogram for Age", x="Age", y="Count") + geom_density(col=1) + scale_x_continuous(breaks=seq(20, 100, 5)) + theme_clean()

A expectativa de vida média para um jogador de futebol segundo os dados do Wikidata é de 52 anos! E também temos um aumento da quantidade de mortes entre os 25 e 30 anos e depois entre os 55 e 60.

r[r$age < 30,] %>% group_by(cause_of_deathLabel) %>% tally() %>% arrange(desc(n))

Causas de MorteNúmerotraffic collision228myocardial infarction45aircraft crash18tuberculosis15car accident13cancer12leukemia12drowning11hanging11heart failure7

r[r$age > 55 & r$age < 61,] %>% group_by(cause_of_deathLabel) %>% tally() %>% arrange(desc(n))

Causes de MorteNúmeromyocardial infarction53cancer30traffic collision13stomach cancer10lung cancer9amyotrophic lateral sclerosis6disease6liver cancer6brain cancer5cerebral hemorrhage5

Vemos que a morte de jogadores jovens é dominada por acidentes de trânsito e ataques cardíacos e de jogares próximos dos 60 anos a causa principal é infarto, como foi o caso de Maradona.

causes_ordered <- r %>% group_by(cause_of_deathLabel) %>% tally() %>% arrange(n) #order cause of death

r$cause_of_deathLabel <- factor(r$cause_of_deathLabel, levels=causes_ordered$cause_of_deathLabel)

causes_top <- tail(causes_ordered, 9)

r_top <- r %>% filter(r$cause_of_deathLabel %in% causes_top$cause_of_deathLabel)

ggplot(r_top, aes(cause_of_deathLabel)) + geom_bar() + coord_flip() + labs(title="Maiores Causas de Morte", x="Idade", y="Número") + theme_clean()

Se olhar os dados, verá que depois dessa idade cancer começa a aparecer como uma causa principal e depois dos 80 temos doenças como Alzheimer como causa principal e COVID-19 é uma causa importante.

r_box <- r_top %>% group_by(cause_of_deathLabel, age=round(age)) %>% tally() %>% arrange(age)

ggplot(r_box, aes(age, n, fill=cause_of_deathLabel, colour=cause_of_deathLabel)) + geom_bar(position = "stack", stat='identity') + scale_x_continuous(breaks=seq(20, 100, 5)) + theme_clean() + labs(title="Causas por Idade", x="Idade", y="Número")

ggplot(r_box, aes(age, n, fill=cause_of_deathLabel, colour=cause_of_deathLabel)) + geom_bar(position = "fill", stat='identity') + scale_x_continuous(breaks=seq(20, 100, 5)) + theme_clean() + labs(title="Causas por Idade", x="Idade", y="Porcentagem")

Qual idade morrem de acidente de carro?

r_traffic <- r %>% filter(r$cause_of_deathLabel == 'traffic collision')

ggplot(r_traffic, aes(age)) + geom_density() + theme_clean() + labs(title="Mortes por Acidente de Carro por Idade", x="Idade", y="Densidade")

E agora vemos os dados para infarto do miocardio, a cauda da morte de Maradona:

r_infarction <- r %>% filter(r$cause_of_deathLabel == 'myocardial infarction')

ggplot(r_infarction, aes(age)) + geom_density() + theme_clean() + labs(title="Mortes por Ataque Cardíaco", x="Idade", y="Densidade")

E Alzheimer:

r_alzheimer <- r %>% filter(r$cause_of_deathLabel == 'Alzheimer's disease')

ggplot(r_alzheimer, aes(age)) + geom_density() + theme_clean() + labs(title="Mortes por Alzheimer por idade", x="Idade", y="Densidade")

E por fim, COVID-19:

r_covid <- r %>% filter(r$cause_of_deathLabel == 'COVID-19')

ggplot(r_covid, aes(age)) + geom_density() + theme_clean() + labs(title="Mortes por COVID-19 por idade", x="Idade", y="Densidade")

Não tenho dados para dizer se essas proporções são diferentes das médias da população, mas, me parece que o volume de jogadores que morrem de acidente de carro quando jovens é muito grande e também não parece normal a quantidade de atletas que morrem relativamente jovens de ataque cardíaco, mas não sou médico para opinar sobre isso.

Enfim, foi um exercício interessante usar o Wikidata e aprender sobre SPARQL e usar um pouco de R para fazer a análise, espero que acham interessante e, por favor, deixe um comentário se encontrar algum erro ou quiser continuar a discussão.

Nasci em Araçatuba. Estudei letras na Unicamp. Gosto de escrever, ler e fotografar. Atualmente estou preso na vida de um personagem de Silicon Valley.