Gerando relatórios e análises da Premier League 15/16 com R e Power BI

A inspiração para este post veio do blog do Jason Thomas, que criou no Power BI um mapa dos arremessos do jogador de basquete Stephen Curry durante alguns jogos da NBA (vale a pena dar uma olhada clicando aqui).

Mantendo esta linha de realizar análises com dados de esportes, minha escolha então foi utilizar os dados do Fantasy da Premier League, que apresenta estatísticas de todos os jogadores que disputaram o Campeonato Inglês 15/16. O Fantasy da Premier League possui uma API onde conseguimos acessar os dados no formato JSON.

Como são vários arquivos JSON que precisaremos ler, vamos utilizar a ferramenta estatística “R” para retornar os dados que precisamos, e em seguida iremos levar o script do R para o Power BI Desktop para gerar os relatórios.

Integração do R com Power BI Desktop

Para utilizar scripts do R no Power BI Desktop são necessários alguns passos que você pode verificar neste link.

Leitura e carga dos dados da Premier League

Para conseguirmos obter os dados de todos os jogadores que estão disponíveis na API do Fantasy da Premier League, iremos utilizar um script na linguagem R para realizar a coleta destes dados.

Para adicionar o script do R no Power BI Desktop, selecione “Obter Dados”, “Outras”, “Script do R” (imagem abaixo):

r_script_powerbi

Script do R no Power BI Desktop

 

O script do R a seguir¹ carrega os 716 arquivos JSON, um para cada jogador. Inicialmente instalamos os pacotes necessários no R, e depois é feito o loop para trazer todas as informações.

Dica: execute o script no Microsoft R Open² para testar se ele está funcionando corretamente, e só depois leve-o para o Power BI.

install.packages("jsonlite")
 install.packages('curl')

library(jsonlite)

url <- "http://fantasy.premierleague.com/web/api/elements/"
 names(fromJSON(paste0(url,1))) # Concatenate URL and player id to fetch player data

url <- "http://fantasy.premierleague.com/web/api/elements/"
  
 ## Both paste commands produce same output
 paste(url, 1, sep = "")
 paste0(url, 1)

url <- "http://fantasy.premierleague.com/web/api/elements/"
 toJSON(fromJSON(paste0(url, 1)), pretty = TRUE)

## List of relevant fields we are interested in
  
 relevantFields <- c("points_per_game","total_points","type_name",
  "team_name","team_code","team_id",
  "id","status","first_name","second_name",
  "now_cost","value_form","team",
  "ep_next","minutes","goals_scored",
  "assists","clean_sheets","goals_conceded",
  "own_goals","penalties_saved","penalties_missed",
  "yellow_cards","red_cards","saves",
  "bonus","bps","ea_index",
  "value_form","value_season","selected_by")
  
 numCols = length(relevantFields) # Length of relevant string vector
 # Initializing an empty dataframe
 allplayerdata <- data.frame(matrix(NA,nrow=1,ncol=numCols))
 allplayerdata <- allplayerdata[-1,]
  
 fetchData <- function(i) {
  
  res <- try(jsondata <- fromJSON(paste0(url,i)))
  
  if(!inherits(res, "try-error")) {
  
       jsondata <- jsondata[which(names(jsondata) %in% relevantFields)]
  }
 }
  
 allplayerdata <- lapply(1:716, fetchData)
 allplayerdata <- do.call(rbind, lapply(allplayerdata,
                                            data.frame,
                                            stringsAsFactors=FALSE))

Após isso, aguarde o tempo de leitura dos arquivos, e você terá os dados carregados para o seu relatório do Power BI Desktop, conforme a imagem a seguir:

premierleague_data_powerbi

Dados dos jogadores da Premier League 2015/2016 importados

 

Obs: realizei a consulta a estes dados em Junho/2016. Quando você reproduzir este script, irá buscar os dados referentes à temporada que estiver sendo disputada no momento.

Geração de relatórios

Após a obtenção dos dados, temos infinitas possibilidades de análises que podemos realizar. Dois relatórios de exemplo que podemos gerar são os seguintes:

  • Comparação entre estatísticas de ataque (gols marcados) e defesa (jogos sem sofrer gol) para identificar jogadores mais completos
relatorio_premierleague

Relatório comparativo entre gols marcados e jogos sem sofrer gol

 

No gráfico acima foi realizada uma comparação entre os jogadores do Leicester City e do Arsenal, onde destacaram-se os jogadores Giroud, Sánchez, Mahrez e Vardy pelo número de gols marcados.

Para gerar este relatório utilizei o gráfico de dispersão do Power BI, e adicionei informações como nome do jogador, time do jogador, gols marcados, “clean sheets” (jogos sem sofrer gol) e minutos jogados.

Para o filtro por clube, que exibe os escudos das equipes para filtrar as informações exibidas no gráfico, utilizei um recurso do Power BI chamado “Custom Visuals” (mais detalhes aqui), e importei um visual chamado “Chiclet Slicer”. Montei uma planilha Excel com as URL’s das logos de todos os clubes e importei esta planilha para o Power BI, definindo esta coluna sendo do tipo “URL de imagem”, conforme figura abaixo:

dados_logos

URL para exibição das imagens dos escudos dos clubes

 

  • Identificação de jogadores que precisam de menos minutos para fazer um gol
relatorio2_premierleague

Relatório de jogadores com melhor média de gols por minuto

 

No relatório acima realizei filtros para trazer somente os jogadores que fizeram pelo menos 5 gols e que tiveram média de pelo menos 1 gol a cada 200 minutos, para ter uma análise mais real e trazer os melhores jogadores nesta estatística.

Percebe-se que os jogadores Iheanacho e Aguero, ambos do Manchester City, foram os líderes nesta comparação, sendo que Aguero disputou mais minutos durante o campeonato.

Para calcular esta média de gols marcados por minuto foram criadas três medidas dentro do Power BI Desktop:

Gols Marcados = SUM(allplayerdata[goals_scored])
Minutos Disputados = SUM(allplayerdata[minutes])
Minutos por gol = IF([Gols Marcados]= 0;0;[Minutos Disputados]/[Gols Marcados])

Assim, conseguimos chegar no resultado correto através deste cálculo (por exemplo, Iheanacho fez 8 gols em 766 minutos, que dá a média de 1 gol a cada 96 minutos, aproximadamente).

Utilizei o gráfico de linhas e colunas empilhadas do Power BI, e adicionei informações como minutos disputados, minutos por gol (medidas criadas), nome do time e nome do jogador.

Publicação e geração do dashboard

Terminado o processo de criação, podemos publicar nossos relatórios utilizando o serviço do Power BI, e assim montarmos e compartilharmos o dashboard com outros usuários. Basta clicar no botão “Publicar” e entrar na sua conta do Power BI (utilizando um e-mail corporativo).

powerbi_publicar

Botão de publicação dos relatórios para o Power BI

 

Após adicionarmos as visualizações e criarmos um dashboard, o resultado pode ficar dessa forma:

dashboard_premierleague

Dashboard exibindo os gráficos criados

 

Este dashboard pode ser visualizado também pelo aplicativo do Power BI, que está disponível nas principais lojas virtuais³.

Para quem quiser reproduzir este exemplo e criar outros relatórios com estes dados, disponibilizei o script .R e as imagens dos escudos dos clubes em um diretório do GitHub.

Atualização: houve uma mudança na URL da API do Fantasy Premier League para a temporada 16/17. Em vez da URL antiga (http://fantasy.premierleague.com/web/api/elements/1), utilizar a nova (https://fantasy.premierleague.com/drf/element-summary/1).

Referências:

  1. Post que encontrei o script em R para ler os arquivos JSON do Fantasy da Premier League – Importing JSON Data
  2. O download do Microsoft R Open pode ser realizado aqui
  3. Os links de download do Power BI Desktop, do aplicativo do Power BI e de outros recursos pode ser encontrado aqui

 

Anúncios

2 pensamentos sobre “Gerando relatórios e análises da Premier League 15/16 com R e Power BI

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s