Este projeto extrai e processa eventos, comentários e reviews do repositório GitHub LadybirdBrowser para análise de teoria dos grafos (trabalho prático TP1). Utiliza Python para extração de dados via API do GitHub e Java (Maven) para processamento e análise dos grafos.
- Java 21 (para compilação Maven)
- Python 3.x com bibliotecas
requestsepython-dotenv - Token do GitHub válido (armazenado em arquivo
.env) - Maven instalado para componentes Java
-
Clone o repositório:
git clone <url-do-repositorio> cd grafos-tp1
-
Instale as dependências Python:
pip install requests python-dotenv
-
Configure o token do GitHub:
- Crie um arquivo
.envna raiz do projeto - Adicione:
GITHUB_TOKEN=seu_token_aqui
- Crie um arquivo
-
Compile o projeto Java:
mvn clean compile -f app/api/pom.xml
grafos-tp1/
├── app/
│ ├── data/ # Dados CSV extraídos
│ │ ├── issue_authors.csv # Autores das issues
│ │ ├── closed_issues.csv # Issues fechadas
│ │ ├── issue_comments.csv # Comentários em issues
│ │ ├── pr_events.csv # Eventos de pull requests
│ │ ├── pr_reviews.csv # Reviews de pull requests
│ │ └── pr_comments.csv # Comentários em PRs
│ │
│ ├── extraction/ # Scripts Python para extração
│ │ ├── core/ # Módulos principais
│ │ │ ├── api.py # Cliente da API GitHub
│ │ │ └── io.py # Operações de I/O
│ │ ├── comments.py # Extração de comentários
│ │ ├── issues.py # Extração de issues
│ │ ├── prs.py # Extração de pull requests
│ │ └── main.py # Script principal de extração
│ │
│ ├── exports/ # Arquivos GEXF exportados
│ │ ├── grafo_comentarios.gexf # Grafo de comentários
│ │ ├── grafo_fechamentoissues.gexf # Grafo de fechamento
│ │ ├── grafo_pullrequests.gexf # Grafo de pull requests
│ │ └── grafo_grafointegrado.gexf # Grafo integrado
│ │
│ └── api/ # Aplicação Java
│ └── src/main/java/com/grafos/puc/
│ ├── Main.java # Classe principal
│ ├── model/ # Modelos de grafo
│ │ ├── AbstractGraph.java
│ │ ├── AdjacencyListGraph.java
│ │ └── AdjacencyMatrixGraph.java
│ ├── loader/ # Carregadores de dados
│ │ ├── GerenciadorUnificado.java
│ │ ├── issues/ # Processamento de issues
│ │ ├── comentarios/ # Processamento de comentários
│ │ └── pullRequest/ # Processamento de PRs
│ ├── builder/ # Construtores de grafos
│ │ ├── GerenciadorGrafos.java
│ │ ├── ConstrutorGrafoComentarios.java
│ │ ├── ConstrutorGrafoFechamentoIssues.java
│ │ ├── ConstrutorGrafoReviewPullRequests.java
│ │ └── ConstrutorGrafoIntegrado.java
│ ├── service/ # Serviços de análise
│ │ ├── GraphMetricsService.java
│ │ └── metrics/ # Métricas específicas
│ └── ui/ # Interface do usuário
│ ├── GerenciadorMenu.java
│ └── AnaliseGrafo.java
├── docs/ # Documentação do projeto
│ ├── enunciado-tp1.pdf # Enunciado do trabalho prático
│ ├── apresentacao.pdf # Apresentação usada no vídeo
│ ├── relatorio-tp1.pdf # Relatório final do TP1
│ └── LadybirdBrowser.md # Sobre o repositório analisado
└── README.md # Este arquivo
Na pasta docs/ você encontrará:
LadybirdBrowser.md: Documentação detalhada sobre o repositório GitHub LadybirdBrowser que foi analisado, incluindo características do projeto, estatísticas de contribuição e padrões de desenvolvimentoenunciado-tp1.pdf: Enunciado completo do trabalho prático, com especificações dos requisitos, objetivos e critérios de avaliaçãoapresentacao.pdf: Slides da apresentação utilizada no vídeo de divulgação, contendo resumo visual dos resultados e metodologiarelatorio-tp1.pdf: Relatório final detalhado com análise dos resultados, discussão das métricas obtidas e conclusões
Execute o script Python para buscar dados do GitHub:
python app/extraction/main.pyDados extraídos:
- issue_comments.csv: Comentários em issues
- pr_comments.csv: Comentários em pull requests
- closed_issues.csv: Issues fechadas
- pr_events.csv: Eventos de PRs (abertura, fechamento, merge)
- pr_reviews.csv: Reviews de pull requests
- issue_authors.csv: Autores das issues
Execute a aplicação Java para análise dos grafos:
mvn exec:java -Dexec.mainClass="com.grafos.puc.Main" -f app/api/pom.xmlFuncionalidades disponíveis:
- Escolha entre Lista de Adjacência ou Matriz de Adjacência
- Construção de 4 tipos de grafos diferentes
- Análise de métricas (centralidade, comunidades, estrutura)
- Exportação para formato GEXF
A aplicação Java constrói 4 tipos de grafos na seguinte ordem:
-
Grafo de Comentários Unificado
- Representa interações através de comentários em issues e PRs
- Arestas: usuário que comenta → autor do item
-
Grafo de Fechamento de Issues
- Representa colaboração no fechamento de issues
- Arestas: quem fecha → quem criou a issue
-
Grafo de Pull Requests (Reviews)
- Representa interações através de reviews
- Arestas: reviewer → autor do PR
-
Grafo Integrado Ponderado
- Arestas ponderadas pela frequência de interação
- Menu principal com navegação intuitiva
- Análise individual de cada grafo
- Comparação entre grafos
- Centralidade: Grau, Betweenness, Closeness
- Estrutura: Densidade, componentes conectados, diâmetro
- Comunidades: Detecção e análise de comunidades
- Arquivos GEXF para visualização em ferramentas como Gephi
- Relatórios detalhados das métricas
Verificar limite da API:
python app/extraction/check_rate_limit.pyCompilar apenas:
mvn clean compile -f app/api/pom.xmlExecutar testes:
mvn test -f app/api/pom.xmlOs dados extraídos representam interações no repositório, adequados para modelagem de grafos de colaboração entre usuários, incluindo:
- Redes de comentários e discussões
- Fluxos de trabalho de desenvolvimento
- Padrões de colaboração e review
- Hierarquias de contribuição
- Faça um fork do projeto
- Crie uma branch para sua feature (
git checkout -b feature/AmazingFeature) - Commit suas mudanças (
git commit -m 'Add some AmazingFeature') - Push para a branch (
git push origin feature/AmazingFeature) - Abra um Pull Request
Este projeto está sob a licença MIT. Veja o arquivo LICENSE para mais detalhes.
- Todos os comandos devem ser executados a partir do diretório raiz devido aos contextos das pastas
- O token do GitHub é obrigatório para extração de dados
- Os arquivos CSV devem estar em
app/data/para a aplicação Java funcionar - A aplicação suporta tanto grafos esparsos (lista) quanto densos (matriz)
Para dúvidas ou problemas:
- Verifique se todos os arquivos CSV estão presentes em
app/data/ - Confirme se o token do GitHub está configurado corretamente
- Verifique se o Java 21 e Maven estão instalados
- Execute os comandos a partir do diretório raiz do projeto