Skip to main content

Solução integrada para exploração de dados da NBA utilizando API pública e pacotes python para construção de pipelines, realização de análises estatísticas e visuais.

Project description


nbaflow logo
:basketball: Solução integrada para extração e análise de dados estatísticos da NBA :basketball:

Table of contents

Sobre o Projeto

Antes de mais nada, imagine algo pessoal que você goste de acompanhar, seja um esporte, um programa de TV ou mesmo notícias sobre um determinado assunto. Agora pense sobre unir seus conhecimentos em tecnologia para aprender mais sobre esse assunto ao mesmo tempo que aprimora suas skills técnicas. Assim surge o NBAFlow: uma mistura entre programação, arquitetura, desenvolvimento e esporte! Para acessar diretamente os detalhes de uso da solução, navegar até o tópico NBAFlow - Solução Integrada

Fases do Desenvolvimento

Concebido como uma forma prática e bacana de mergulhar em universos ainda desconhecidos, o NBAFlow pode ser definido como uma frente de aprendizado próprio e compartilhamento de conhecimentos com a comunidade de tecnologia. Após uma jornada inicial de maturação do projeto, faz-se válida a divisão do desenvolvimento implementado e da produção de conteúdo em fases distintas, sendo elas:


  • Fase 01: Primeiros Passos: a primeira fase do projeto consistiu em um essencial entendimento de todas as possibilidades de geração, extração e análise de dados da NBA a partir de APIs e bibliotecas compatíveis com a linguagem Python. Nela, foi possível construir componentes e módulos capazes de encapsular todo o processo de preparação de dados de jogadores em cada uma de suas respectivas partidas disputadas na liga. A materialização de todo este trabalho se deu por meio de um painel no Tableau altamente responsivo e dinâmico que rendeu e vem rendendo bons frutos aos amantes do esporte. Em resumo, os principais resultados alcançados nesta primeita etapa do projeto envolvem:
    • Construção dos módulos gamelog.py e images.py para extração e preparação de dados de partidas de jogadores
    • Construção de scripts de processamento de dados para construção de base final a ser analisada
    • Criação de um painel publicado no Tableau Public

📌 O post de divulgação do painel da Fase 01 do projeto foi visto por mais de 12 mil pessoas no LinkedIn, sendo compartilhado por um dos gerentes nacionais da Tableau Software e por diretores de grandes empresas como Salesforce.


  • Fase 02: O Contato com a AWS: após uma jornada recompensadora vivenciada na primeira fase do projeto, novos horizontes vieram à tona e uma nobre ideia de utilizar os serviços de uma provedora cloud se fizeram presentes para aprimorar ainda mais o projeto. Assim, motivado por um mergulho inicial no universo de computação em nuvem, decidiu-se realizar uma verdadeira migração do fluxo existente, este formado sob um viés de processamento totalmente local, para uma arquitetura em nuvem capaz de proporcionar uma série de facilidades adicionais ao projeto. Dessa forma, utilizando a AWS como provedora cloud, a segunda fase do projeto NBAFlow permitiu:
    • Utilização do serviço RDS para armazenamento dos dados de partidas de jogadores em um banco de dados relacional
    • Utilização de instância computacional EC2 contendo lógica de consumo de dados diretamente do RDS
    • Desenho de arquitetura segura e de alta disponibilidade a partir de configurações de Security Groups e Subnets na AWS


Arquitetura - Fase 03

Em andamento...


Contextos e Cenários

Criado como uma ideia genérica de análise e exploração de dados da NBA dentro de cenários que pudessem proporcionar uma aprendizagem de tecnologias relevantes em termos de construção de pipelines de ingestão, armazenamento, visualização e análise de dados, o projeto NBAFlow teve, como ponto de partida, o próprio site de estatísticas oficiais da NBA. Neste momento, a pergunta a ser respondida se resumiu a: "Como obter esse tipo de dado para análises mais refinadas?"

Já nas primeiras tentativas em busca das possíveis formas de obter os tais dados estatísticos da NBA, chegou-se a biblioteca python nba-api capaz de servir como um agente integrador proporcionando o acesso a dados diretamente do site. Com o avanço da obtenção e exploração dos dados, novas inspirações focadas em visualização de dados se tornaram um grande meio para materializar todos os estudos propostos. E assim, considerando os três alicerces motivacionais que giram em torno do projeto, esta breve seção tem por objetivo detalhar o conteúdo presente no site oficial de estatísticas da NBA, na biblitoeca nba_api implementada e em frentes de visualização de dados utilizando cenários da NBA.

NBA Stats

A página de estatísticas da NBA é um repositório altamente rico em termos de dados de jogadores e times. Em um exemplo prático, ao acessar a rota https://www.nba.com/stats/player/203081/ referente ao jogador Damian Lillard, é possível, logo de cara, consumir um denso pacote de indicadores de performance:


lillard stats header

Ao navegar pela página, ainda é possível utilizar filtros e menus específicos para gerar novas visões agrupadas e estatísticas da performance do jogador em cenários de temporada regular ou de playoffs em diferentes anos.


lillard stats table splits

Existem, ainda, diversas outras funcionalidades presentes na rota /stats do site da NBA, permitindo assim uma série de análises pontuais, históricas e comparações, sejam em uma visão individual de jogadores ou de franquias como um todo. O site da NBA fornece um mundo completo de estatísticas para os usuários e, de alguma forma, seria extremamente vantajoso poder requisitar e ter em mãos esses dados para transformações e análises próprias.

NBA API

Imaginando um cenário onde os usuários podem ter em suas mãos dados estatísticos de jogadores da NBA e de franquias diretamente do site oficial da NBA, seria possível realizar uma série de atividades envolvendo análises descritivas ou até mesmo preditivas em contextos livres, desde dados individuais de jogadores ou até mesmo de situações envolvendo atacantes e defensores.

Pensando nisso, usuários da comunidade Python desenvolveram uma poderosa API conhecida por nba-api capaz de proporcionar uma série de módulos úteis para o retorno de informações relacionadas a estatísticas da NBA.

Maiores detalhes sobre a biblioteca nba-api podem ser encontrados em:

Visualização de Dados

Uma das grandes motivações relacionadas ao início deste projeto tem raízes conectadas a visualização de dados. Nomes como Kirk Goldsberry (@kirkgoldsberry) são grandes inspirações dentro deste cenário de Data Viz. Em sua página no Instagram, Kirk compartilha uma série de visualizações extremamente interessantes sobre tópicos relacionados a NBA, desde os melhores arremessadores por zona, até dispersões relacionadas a tentativas de arremessos e eficiência em percentual de grandes nomes da liga.

Abaixo, seguem alguns exemplos de visualizações criadas por Kirk Goldsberry em sua página:


lillard stats game5
A imagem acima traz uma visão de eficiência de arremessos do jogador Damian Lillard, do Portland Trailblazers, no fatídico jogo 5 dos playoffs de 2021 contra Denver Nuggets.

lillard stats game5
Já essa segunda imagem traz uma relação de tentativas e eficiência de arremessos realizados por jogadores na fase de playoffs.

NBAFlow - Solução Integrada

Após um vasto consumo da literatura e documentação disponíveis em fontes relacionadas, entende-se pelo projeto NBAFlow como ponto central para o desenvolvimento de fluxos e scripts de requisição e preparação de dados de modo a permitir a construção de visualizações dinâmicas envolvendo estatísticas da NBA. Como MVP, o diagrama de solução abaixo demonstra uma parcela dos entregáveis obtidos até o momento, sendo estes:

  • Classes e scripts Python capazes de coletar, preparar e transformar dados estatísticos da NBA;
  • Painel analítico e interativo construído no Tableau;

Consumo da Solução

Como mencionado anteriormente, a construção de toda a solução proposta tem como base a linguagem Python em conjunto com algumas bibliotecas disponibilizadas para fins específicos. Dessa forma, para utilizar os scripts desenvolvidos neste projeto, recomenda-se a execução das seguintes etapas:

1. Criação e ativação de um ambiente virtual Python

# Criando e ativando venv no Linux
$ python -m venv <path_venv>/<name_venv>
$ source <path_venv>/<nome_venv>/bin/activate

# Criando e ativando venv no Windows
$ python -m venv <path_venv>/<name_venv>
$ <path_venv>/<nome_venv>/Scripts/activate

2. Clone do repositório NBAFlow

git clone https://github.com/ThiagoPanini/nbaflow.git

3. Instalação das dependências do projeto via requirements.txt

# Navegando até o diretório do projeto e instalando pacotes
cd nbaflow/
pip install -r requirements.txt

4. Instalação do pacote/projeto em modo de edição

Isso permitirá a devida leitura de módulos internos dentro dos scripts já desenvolvidos

pip install -e .

5. [OPCIONAL] Execução de scripts já desenvolvidos para finalidades de estudo

pyhon scripts\one_player_gamelog.py

Painel Analítico - Tableau

Como principal produto dentro desse projeto, encontra-se o Painel Analítico de Estatística de Jogadores publicado e disponível no Tableau Public. Em resumo, trata-se de uma solução altamente refinada e construída sob as principais boas práticas de Data Viz, UX e UI com foco nos amantes do esporte e nos entusiastas de análise de dados.

Como principais funcionalidades, o painel disponibilizado possui:

  • Menu principal e painel de estatística de jogadores com background disruptivo
  • Filtro dinâmico para visualização de indicadores de cada um dos jogadores ativos da liga
  • Imagem personalizada para cada jogador da liga de acordo com o filtro (isso foi trabalhoso!)
  • Dados agregados de todos os jogadores da liga em todas as temporadas jogadas
  • Farois dinâmicos e comparativos com as médias da liga
  • Interação dinâmica de dispersão de arremessos
  • Ranking de jogadores de acordo com atributos dinâmicos (rebotes, assistências, pontos, minutos, entre outros)
  • Muito mais...

nbaflow-tableau

nbaflow-tableau

Contatos

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

nbaflow-0.0.2.tar.gz (8.8 kB view hashes)

Uploaded Source

Built Distribution

nbaflow-0.0.2-py3-none-any.whl (7.3 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page