Este repositório contém a solução de um desafio de código do bootcamp da DIO focado em modelagem de dados em grafos utilizando Neo4j. O projeto consiste na construção de um modelo de dados em grafo para oferecer recomendações de músicas para usuários de uma plataforma, explorando como entidades e relacionamentos podem ser estruturados e consultados dentro do ecossistema do Neo4j.
Você foi contratado para desenvolver um sistema de recomendação de músicas que utiliza grafos para identificar padrões de escuta e sugerir novas faixas aos usuários. O sistema deve ser capaz de:
- Representar usuários, artistias, músicas e gêneros em um grafo
- Representar interações (escutar, curtir, seguir) como propriedades
Modelagem do grafo com a ferramenta Arrows App
User: usuários da plataforma, separados entre ouvintes e criadores.
Music: criação de algum artista dentro da plataforma, podendo ser distinguido entre song (uma única música) ou album (coletânea de músicas).
Genre: o tipo musical que abrange determinadas criações registradas na plataforma.
Ao usar a query CALL db.schema.visualization() os principais tipos de nós presentes no grafo são apresentados
Ao usar a query MATCH (l:Listener) RETURN l é possível visulizar apenas os nós dos usuários ouvintes dentro da plataforma.
FOLLOW: relaciona um Listener a um Creator. Denotando quando um usuário passou a seguir um determinado artista, possuindo a propriedade since, com o ano que a ação de seguir o artista foi feita.
LIKED: relaciona um Listener a um Song. Evidência qual música específica o usuário gostou dentro da plataforma, possuindo a propriedade replays, com a quantidade de vezes que o usuário escutou a música.
SANG: relaciona um Creator a um Song. Responde a pergunta "qual música esse artista cantou?".
CATALOGED_AS: relaciona um Song a um Genre. Mostra a conexão que existe entre uma música e um estilo musical.
Relacionamentos do nó Listener com a propriedade nome:Jean, feita com a query MATCH (l:Listener{name:'Jean'}) RETURN l
É possível perceber que o/a usuário(a) 'Jean' segue um artista mas não possui uma música desse artista registrada como Liked.
A plataforma Neo4j aura permite navegar facilmente entre conexões, como:
● encontrar todos os usuários ouvintes e/ou criadores (artistas) dentro da platafomra
● descobrir quais usuários curtiram a mesma música
● rankear o gênero musical preferido com base nas avaliações de 100 usuários
Ao fazer a sugestão de uma música, tendo como base um artista seguido por dois usuários distintos, onde um deles não possui a propriedade Liked, é gerado o seguinte resultado:
Query utilizada
MATCH (você:Listener {name: "Joseph"})-[:FOLLOW]->(artista:Creator)<-[:FOLLOW]-(outro:Listener)
MATCH (outro)-[:LIKED]->(musica_recomendada:Song)
WHERE NOT (você)-[:LIKED]->(musica_recomendada)
RETURN DISTINCT musica_recomendada.title AS Sugestão, artista.name AS Porque_voce_segue





