terça-feira, 8 de dezembro de 2020

As transferências de jogadores de futebol

Encontrei há uns tempos um dataset com as 250 transferências de jogadores de futebol mais caras, cada ano, entre 2000 e 2018.
São 615 os clubes envolvidos, e achei curioso estudar esta rede.
Comecei por fazer um ranking dos clubes pelo número total de transferências


e registando também o grau In (total de jogadores recebidos) e o grau Out (total de jogadores transferidos).
São os tubarões de costume, uns com saldo positivo e outros com saldo negativo entre o In e o Out, tudo com o seu significado.
A rede de transferências que envolve estes clubes mostra a existência de um certo número de "comunidades" de clubes e alguma subtis diferenças quando se consideram os jogadores recebidos


ou os jogadores transferidos


As comunidades detectadas representam conjuntos de clubes em que há mais transferências intra comunidade do que entre comunidades.
Todo um "mundo" a explorar...

sábado, 11 de abril de 2020

Epidemias e redes [1]

As epidemias transmitem-se pelas redes de contactos físicos dos humanos. Assim, para estudar epidemias é necessário saber como os humanos se movimentam, dentro das suas comunidades homogéneas, entre comunidades geograficamente vizinhas, e entre comunidades distantes usando meios de transporte como o avião.
A difusão de epidemias não será muito diferente da difusão de ideias, ou de comportamentos, só que aqui também estes se podem movimentar entre comunidades distantes através de um simples WhatsApp ou um programa de televisão, por exemplo.
Num modelo altamente simplificado, supomos que a infecção dura um dia, e que todos ficam curados, mas não imunizados, e que só intervêm dois factores, k, o número de indivíduos que um indivíduo pode infectar, e que tem a ver com o seu isolamento pessoal, e p, a probabilidade de um indivíduo ser infectado, que depende das suas vulnerabilidades próprias e do uso de dispositivos de protecção individual.
Neste modelo simples, numa população homogénea surge um indivíduo infectado, que vai contactar com k indivíduos, que infecta com uma probabilidade p e tudo depende deste valor R0=kp.


Se R0 for menor que 1 a infecção vai eventualmente extinguir-se e se R0 for maior que 1 vai eventualmente propagar-se a toda a população, ao fim de algum tempo.
Sem esquecer que se trata de probabilidades, e que, portanto, se os números forem pequenos os resultados podem parecer inesperados, aquele factor R0 é determinante para a propagação da epidemia.
Qualquer que seja o valor de R0 > 1, o crescimento será inicialmente exponencial, mas não crescerá indefinidamente, pois à medida que se aproxima da população total começa a ser difícil encontrar indivíduos disponíveis para infectar.


Nesta figura, começamos com um único infectado no dia inicial, e vê-se que o crescimento da epidemia é muito sensível ao valor de R0.
Analisaremos em próxima publicação os efeitos da imunidade e do esgotamento da população não infectada.
Uma boa referência é este capítulo do livro Networks, Crowds, and Markets: Reasoning about a Highly Connected World, de David Easley e Jon Kleinberg, Cambridge University Press, 2010.

sexta-feira, 8 de novembro de 2019

Um ranking ATP

Estabelecer o ranking dos jogadores profissionais de ténis ao logo de uma época ou de um conjunto de épocas é uma tarefa complexa.
Não jogando todos contra todos, pode pontuar-se mais os resultados em torneios mais valiosos, com os pontos crescendo de eliminatória para eliminatória, como actualmente é feito, ou pode considerar-se cada resultado como uma interacção entre dois jogadores (direccionada, do vencido para o vencedor, por exemplo) e usar uma métrica de ranking da rede de resultados (PageRank ou eigenvector) para o ranking global, valorizando mais as vitórias sobre jogadores melhor classificados.
No sítio data.world encontramos um ficheiro muito completo com todos os resultados de todos os torneios de ténis ATP desde 2000-01-31 até 2019-10-27 (54846 jogos, ao longo de quase 20 anos), do qual extraímos facilmente uma lista de pares ordenados (vencido, vencedor) que abrimos na ferramenta Gephi.
Nesta figura, onde só constam os jogadores com mais de 100 vitórias, temos os vértices da redes e etiquetas com tamanho proporcional ao PageRank e usamos o algoritmo fornecido para descobrir comunidades, que acabou por agrupar os jogadores de acordo com as gerações a que pertencem e também com os continente em que mais vezes jogam:


Sem surpresas, Federer, Nadal e Djokovic lideram este ranking.
O que fica patente é que seria possível aprofundar este estudo, ver as dinâmicas das classificações ano a ano, ver a influência dos pisos dos courts, etc.
Deixo a sugestão...

terça-feira, 13 de agosto de 2019

Os TopColegas

Nada como um pequeno desafio para estudar um assunto qualquer.
Tenho vindo a estudar algumas packages muito interessantes de Python, nomeadamente Requests: HTTP for Humans, que simplifica os acessos a páginas Web, e NetworkX, para redes complexas e grafos.
Para me ajudar neste estudo, coloquei a mim próprio um pequeno desafio, que consistiu em utilizar uma plataforma muito interessante sobre jogadores de futebol - ForaDeJogo - e nomeadamente uma funcionalidade designada por TopColegas, que, para cada jogador, indica quais os outros jogadores que foram seus colegas o maior número de épocas.
Estudando a estrutura das páginas dos jogadores, e começando por um jogador, não é difícil descobrir uma forma de se extrair a informação necessária, e repetir sucessivamente a operação para cada colega, colega de colega, etc.
O meu pequeno programa produz os ficheiros csv de vértices e arestas que podem ser abertos directamente pela ferramenta Gephi, permitindo a obtenção de redes como esta:


Utilizei o algoritmo Force Atlas para o posicionamento dos vértices da rede.
Fico a aguardar reacções...

segunda-feira, 8 de julho de 2019

Todos os números vão dar a um

Uma conjectura conhecida - Collatz - diz que, tomando um número inteiro positivo e aplicando sucessivamente a seguinte regra
 - se o número for par, divido-o por 2,
 - se o número for ímpar, multiplico-o por 3 e somo 1,
chego inevitavelmente ao número 1.
Procurei as sequências para todos os números entre 1 e 100, e interpretei-as como uma rede de números, em que cada um aponta para o seguinte, segundo a regra anterior.
No total, passei por 251 números, e encontrei todo o tipo de percursos, desde o rápido até ao muito trabalhoso, como esta figura mostra


O caso mais interessante é o do número 97, que é aquele que requere mais iterações para se chegar finalmente ao número 1...
E o número maior por onde passei foi o 9232.
(coloquei aqui uma imagem de maior resolução)

terça-feira, 21 de maio de 2019

Geo-política da Eurovisão

Os dados das votações no Festival da Eurovisão revelam aspectos muito interessantes das relações entre os países, desde a simples simpatia entre eles até trocas obscuras de votos, como ainda se viu no último festival em Israel.
Esses dados estão disponibilizados por exemplo no site data.world, voto a voto, país a país, de 1975 a 2019.
Neste pequeno estudo, utilizei apenas as votações dos júris nas finais (ultimamente passou a haver duas meias finais, e voto popular), considerando todos os votos que cada país atribuiu a cada um dos outros, tendo obtido o grafo seguinte:


Neste grafo, o tamanho de cada vértice é proporcional ao número de votos recebido por cada país, e o seu posicionamento foi obtido utilizando um algoritmo de forças disponível no programa Gephi, que aproxima os vértices entre os quais as relações são mais intensas.
A Suécia foi o país que mais votos acumulou nestes 45 anos, e Andorra nunca recebeu um único voto...
As cores correspondem às três classes de modularidade descobertas pelo programa Gephi, que curiosamente dão uma leitura geo-política interessante: a laranja a velha Europa, a verde os países nórdicos, e a roxo a Europa de leste, com as suas excepções, naturalmente.
Ou não fosse esta análise essencialmente social.
[coloquei uma imagem de maior resolução aqui]

domingo, 21 de abril de 2019

A rede de páginas do FCP no Facebook

A ferramenta netvizz v1.6 de Bernard Rieder permite obter as páginas que seguem uma determinada página no Facebook e as ligações entre elas (profundidade 1) e ainda todos as páginas que seguem cada uma destas e as ligações entre elas (profundidade 2).
Experimentei a sua versão actual, depois das limitações impostas pelo Facebook, usando como ponto de partida a página oficial do Futebol Clube Porto, que tem cerca de 4 milhões de seguidores individuais.
Encontrei uma rede com um total de 961 páginas e 5089 ligações entre elas.
Abri o ficheiro gdf produzido na aplicação Gephi, calculei o grau in de cada vértice, que usei para definir o seu tamanho no grafo, e usei o algoritmo para determinação de classes de modularidade para pesquisar clusters.
Encontrei 10  clusters, que colori usando uma paleta de cores gerada automaticamente no Gephi, e usei o layout Force Atlas para separar os clusters encontrados.


O resultado encontrado evidencia os diferentes universos em que o clube está presente, que vão desde o futebol ao andebol, da cidade às competições europeias, dos órgãos de comunicação social aos patrocinadores, e mesmo ao México, onde estão um número significativo dessas páginas.
[coloquei uma imagem de maior resolução aqui]