Projeto final do módulo de Programação Funcional em Java. Trilha Backend de Java da Ada, Turma #1172, grupo cinco. O dataset utilizado foi o IMDb Top 1000 Movies.
- Descrição do Projeto
- Tecnologias Utilizadas
- Como Executar o Projeto
- Estrutura do Projeto
- Pacote
main
: - Pacote
test
:
- Pacote
- Como as Classes Respondem às Perguntas
- Observações
- Contribuidores
O objetivo deste projeto é responder a 10 perguntas utilizando programação funcional, realizando uma análise de dados. Os dados escolhidos foram os filmes do IMDb Top 1000 Movies.
A arquitetura do projeto é baseada em camadas, promovendo a separação de responsabilidades e facilitando a manutenção e escalabilidade do código.
- Java;
- Maven;
- JUnit;
- H2 Database;
- Hibernate.
Para visualizar a análise, basta executar a classe Main
localizada no pacote app
. Os resultados serão impressos no
terminal.
Contém a classe Main
, que inicializa o servidor H2 e chama os métodos dos serviços para responder às perguntas da
análise.
public class Main {
public static void main(String[] args) {
H2ServerConfig.start("8181");
// Chamada aos métodos de análise...
}
}
Contém a classe H2ServerConfig
, responsável por configurar e iniciar o servidor H2.
public class H2ServerConfig {
public static void start(String webPort) {
try {
Server.createWebServer("-web", "-webAllowOthers", "-webPort", webPort).start();
System.out.printf("H2 iniciado em http://localhost:%s%n", webPort);
} catch (SQLException e) {
e.printStackTrace();
}
}
}
Contém os modelos e enums utilizados no projeto, como a classe Movie
e o enum Genres
.
Contém utilitários que auxiliam na manipulação e análise dos dados:
CSVParser
: Responsável por ler e interpretar os dados do arquivo CSV.FileUtils
: Funções utilitárias para manipulação de arquivos.StatisticUtils
: Funções para cálculos estatísticos, como correlação.
Contém a interface MovieService
e sua implementação MovieServiceImpl
, que fornecem métodos para manipulação e
análise dos filmes.
Contém classes que respondem às 10 perguntas propostas no projeto. As perguntas foram divididas em grupos, e cada classe responde a um grupo específico.
Responde às seguintes perguntas:
- Existe uma tendência nas avaliações ao longo do tempo para a categoria de filmes de terror?
- Qual o engajamento da audiência para cada gênero?
- Qual a correlação entre engajamento e média de avaliação para cada gênero?
Responde às perguntas:
- Quais são os top 5 filmes de cada categoria no século XX e XXI?
- Quais os 10 filmes mais/menos bem avaliados dentre os filmes com menor quantidade de votos?
Responde às perguntas:
- Qual a tendência da avaliação ao longo do tempo?
- Quais os 5 filmes mais "subestimados" e os 5 mais "superestimados"?
Responde às perguntas:
- Qual a correlação entre o número de votos e a média de avaliação para filmes lançados após o ano 2000?
- Quais os gêneros que apresentam maior variação de avaliação entre filmes lançados na década de 1990 e filmes lançados na década de 2010?
Responde à pergunta:
- Quais os filmes com as maiores discrepâncias entre o número de votos e a média de avaliação, e qual o gênero predominante desses filmes?
Contém a classe MovieDAO
, responsável pelo acesso e manipulação dos dados dos filmes no banco de dados.
public class MovieDAO {
private final CSVParser csvParser;
private EntityManagerFactory emf;
private EntityManager em;
public MovieDAO(CSVParser csvParser) {
this.csvParser = csvParser;
try {
emf = Persistence.createEntityManagerFactory("IMDbData");
this.em = emf.createEntityManager();
} catch (Exception e) {
System.out.println("Erro ao criar EntityManagerFactory: " + e.getMessage());
}
}
public List<Movie> getAllMovies() {
try {
return csvParser.getAllMovies();
} catch (IOException e) {
throw new CSVParseException("Erro ao ler dados do CSV");
}
}
// Outros métodos para manipulação dos filmes...
}
Contém testes unitários nos pacotes dao
, service
e utils
. Foram escritos apenas alguns testes básicos, porque não
era o foco do projeto.
As perguntas foram organizadas conforme as classes responsáveis por respondê-las:
- Perguntas 1 a 3: Respondidas pela classe
HorrorGenreAnalysis
. - Perguntas 4 e 5: Respondidas pela classe
LotharQuestions
. - Perguntas 6 e 7: Respondidas pela classe
RatingTendencyAnalysis
. - Perguntas 8 e 9: Respondidas pela classe
VictorFariaQuestions
. - Pergunta 10: Respondida pela classe
VictorFerreiraQuestions
.
- Execução da Análise: Para visualizar a análise, execute a classe
Main
no pacoteapp
. Os resultados serão exibidos no terminal. - Dependências: Certifique-se de que todas as dependências estão corretamente configuradas no
pom.xml
, incluindo o H2 Database e o Hibernate. - Banco de Dados: O projeto utiliza o H2 Database para armazenar os dados dos filmes. O servidor H2 é iniciado
automaticamente ao executar a classe
Main
.
Desenvolvido por:
-
Grupo 5:
-
Turma #1172 - Ada, Trilha Backend Java.
-
Santander Coders 2024.