Análise de Rede: Playlists do Spotify
Tags: networkanalysis, python, spotify
Published: 2022-02-02 02:32:20

Análises de rede e visualização de gráficos usando Python e Gephi

## Objetivo

Realizar uma análise de redes utilizando como base o conteúdo estudado na disciplina de Análise de Redes, no curso de Bacharelado em Tecnologia da Informação ([IMD/UFRN](https://www.metropoledigital.ufrn.br/portal/)), ministrada pelo o professor [Ivanovitch Silva](https://github.com/ivanovitchm). O conteúdo tem como foco o estudo de hubs e estudo de caso de rede direcionada e de co-ocorrência, explorando métricas globais, distribuição de centralidade e decomposição em cores da rede — tradução livre do inglês — núcleos da rede.

## Tecnologias Utilizadas

Utilizamos o ambiente (em nuvem) chamado [Google Colaboratory](https://colab.research.google.com/) (ou apenas Colab), para as análises de rede, e também o programa [Gephi](https://gephi.org/), para realizar o deploy da rede gerada. Em relação às análises no Colab, utilizamos a linguagem de programação [Python](https://www.python.org/), junto com algumas bibliotecas associadas a ela. Segue a lista das bibliotecas usadas:

- Pandas
- Matplotlib
- NetworkX
- Numpy
- Nxviz
- Json
- Scipy
- Seaborn

## Base de Dados

Foi utilizada como base de dados um dataset disponibilizado por [Jack Vasylenko](https://github.com/vaslnk), com mil playlists criadas na plataforma de streaming de música Spotify. Cada playlist possui informações sobre ela mesma, e sobre cada música presente nela, porém, focaremos apenas em:

1. **nome do artista**
2. **URI do artista (indicador que refere-se ao artista, um identificador)**
3. **o nome da playlist em que o artista foi encontrado.**

Este dataset utilizado na verdade é parte de um dataset maior, utilizado em um projeto onde uma inteligência artificial é treinada para gerar recomendações de músicas, feito pelo o Vasylenko e seu time, para ver mais sobre o projeto deles [clique aqui](https://github.com/vaslnk/Spotify-Song-Recommendation-ML).

## Tratamento de Dados

O tratamento de dados que realizamos foi apenas o ajuste no nome de artistas que possuíam $$, este caractere é reconhecido no Google Colab como grafia LaTeX e não era reconhecido na parte de gerar o grafo então não era possível salvar o nó com a relação artista e playlist.

## Criação do Grafo

Para gerar o grafo, consideramos que gostaríamos de gerar uma rede de coocorrência, logo, tínhamos três variáveis chaves para considerar: nome do artista, nome da música e nome do álbum. Na perspectiva de música, o artista — neste caso, o nome dele — pareceu ser a variável mais rentável para uma análise de redes com músicas, certo? Então estabelecemos uma relação entre artista e playlist onde a música dele foi adicionada, em outras palavras, definimos uma existência combinada entre artista e playlist.

Sendo assim, primeiro criamos os nós com as 3 variáveis selecionadas: nome de artista, uri do artista e nome da playlist; nesta etapa, nos certificamos que não houvesse nós duplicados.
Depois, seguimos para criar os edges (ou traduzido do inglês: vértices), que são as conexões entre estes nós. 

Essas conexões podem existir entre um nó e ele mesmo ou um nó e outro nó distinto, por isso, podemos atribuir uma pontuação ao nó de acordo com a quantidade de ligações ele possuí — isso é o que chamamos de o peso de um nó.

E, por cada relação entre os nós ser uma relação distinta, consideramos que este grafo é um grafo direcionado, em outras palavras, cada vértice possui valor único nesta perspectiva. Ao final da criação do grafo, é possível receber todas essas informações contabilizadas: um grafo direcionado com 9722 nós e 48088 vértices.

![Grafo direcionado gerado e contabilizado.](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/g9q1d4astbxda05x2up0.png)
Grafo direcionado gerado e contabilizado.

## Métricas Globais

Este estudo de rede é realizado com análises que utilizam métricas de distância, conectividade e centralidade. As métricas de distância e conectividade são: excentricidade, periferia, diâmetro e raio.

**Excentricidade e demais métricas**

![Excentricidade, imagem gerada no Colab.](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/05c2vx20dcwwoh1rapqt.png)
Excentricidade, imagem gerada no Colab.

A excentricidade é a distância máxima de um nó a todos os outros nós da rede. Numa rede de 9722 nós, uma excentricidade máxima, também chamada de diâmetro, de 42, quer dizer que a rede está bem conectada, e uma excentricidade mínima, também chamada de raio, com o valor 18, nos diz que a rede também é bem dispersa, além disso, o grupo com maior excentricidade, a periferia, é composto por somente um artista, com o nome de Mother Mabel Carter.

**Além das medidas de distância e conectividade, temos outras métricas, as de centralidade compõe o assunto de distribuição da rede. São elas:**

**Centralidade de Grau (Degree Centrality)**

A centralidade de grau assina para cada nó um valor entre 0 e 1 sobre a conectividade do nó, se ele estiver conectado a todos os outros nós, quer dizer que ele tem o maior grau e portanto, uma centralidade de grau máxima. Se não estiver conectado a nenhum nó, o grau dele é 0, portanto, a centralidade de grau dele tem o valor mínimo.

![Centralidade de Grau, imagem gerada no Colab.](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zh5dh22b04l7q3yx27ky.png)
Centralidade de Grau, imagem gerada no Colab.

Nesse caso, a rede mantém no geral uma homogeneidade e o grau de centralidade não é algo muito variado, ou seja, mesmo Drake com valor de 5,9% de centralidade de grau, o artista mais escutado, atinge comunidades pontuais.

**Centralidade de Aproximação (Closeness Centrality)**

Uma medida média de proximidade de um artista a todos os outros.

![Centralidade de Proximidade, imagem gerada no Colab.](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qwzuag6xnrs00yj9rvuv.png)
Centralidade de Proximidade, imagem gerada no Colab.

Aqui já é possível perceber diferenças entre os nós na rede, artistas que não tem um grau de conectividade tão alto conseguem se destacar, por exemplo, The Chainsmokers, que não chega nem ao Top 10 artistas com mais conexões, chega a ser o terceiro em centralidade de proximidade.

**Centralidade de Intermediação (Betweennes Centrality)**

Uma medida que observa a posição em que o artista está, no caminho mais curto, para todos os outros.

![Centralidade de Intermediação, imagem gerada no Colab.](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zuvcw1mu5pcn42y04j6o.png)
Centralidade de Intermediação, imagem gerada no Colab.

Novamente, assim como a centralidade de grau, a rede é bem homogênea com relação a essa métrica, com destaques para The Rolling Stones, que pouco aparece, ou não aparece, nas outras métricas, porém aqui aparece no Top 10.

**Centralidade de Autovetor (Eigenvector Centrality)**

Uma medida que observa o quão “importante” ou quão conectado estão os “vizinhos” daquele artista.

![Centralidade de Autovetor, imagem gerada no Colab.](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9383qnbn16yn7ampcs4c.png)
Centralidade de Autovetor, imagem gerada no Colab.

Apesar do grafo parecer homogêneo a escala consegue entregar que essa métrica vai superior a 20%. Somente cinco artistas passam 10% nessa métrica, são eles Drake, Rihanna, Kanye West, Chris Brown e Beyoncé. O destaque dessa métrica vai para Miley Cyrus que não obteve métricas expressivas até então, mas entrou dessa vez no Top 10.

## Análise Bivariada

É uma análise feita com 2 métricas: grau e centralidade de aproximação (Closeness Centrality).

![Análise Bivariada, imagem gerada no Colab.](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/tcxlyzxntxgg794a4fb1.png)
Análise Bivariada, imagem gerada no Colab.

Na relação de grau e centralidade de aproximação é possível concluir que os nós mais próximos da rede têm, na verdade, menos conexões.

## Análise Multivariada

Essa é uma análise com múltiplas análises, feitas cada uma com 2 métricas — essas métricas são o grau do nó, já mencionado muito por aqui, e as métricas que envolvem centralidade. Ao todo foram gerados 16 gráficos, relacionando 4 métricas já citadas aqui (Centralidade de Grau, Centralidade de Aproximação, Centralidade Autovetor e Centralidade de Intermediação).

![Multivariada, imagem gerada no Colab.](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mh3xnvu4a422xq72i8vf.png)
Multivariada, imagem gerada no Colab.

## Análise Decomposição da Rede 2 k-cores mais profundos

A análise de decomposição pode ser comparada, por meio de analogia, a uma cebola e suas camadas, a rede possui camadas de nós e vértices que se conectam entre essas camadas. Nesta parte focamos em analisar o núcleo da rede, mais precisamente, as últimas duas camadas dessa rede.

No grafo gerado encontramos que o seu núcleo era a trigésima oitava camada encontrada, e sua penúltima camada sendo a trigésima sétima. Para obter o núcleo teríamos que realizar a retirada da chamada “casca”: para obter a camada 38, teríamos que remover todos os nós que tinham menos que 37 conexões (vértices).

![2 k-cores, imagem gerada no Colab.](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/jd7ngjs90o3raahhdhtm.png)
2 k-cores, imagem gerada no Colab.

## Rede gerada via Gephi

A imagem da rede foi feito no Gephi e a rede foi gerada considerando 5 (cinco) hierarquias: Cluster, Coeficiente de Cluster, Grau, Grau de Entrada e Grau de Saída, seguindo esta ordem. 

As medidas de centralidade de intermediação são baixas, ou seja, mesmo o nó mais conectado faz parte de poucos caminhos mais curtos de um nó a outro nó da rede.

Dessa forma, a rede está bem distribuída e com poucas conexões para fora da comunidade (cluster), o que era esperado de algo tão pessoal como o gosto musical, a tendência é que determinadas pessoas escutem as mesma músicas, ou o mesmo estilo, durante um período de tempo e se elas escutam algo como música Gospel, dificilmente elas iriam escutar Heavy Metal.

De forma geral, existem três grupos que conseguem “quebrar” as barreiras dos clusters, o grupo em rosa, marrom e verde claro, o grupo em rosa majoritariamente uma comunidade formada por artistas de rap, o grupo em verde claro, rock alternativo, pop e estilos mais lentos, assim como o grupo em marrom que compõe com artistas pop norte-americanos. Esses fariam parte do chamado mainstream musical.

![Versão interativa (online) da rede criada.](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/la0ergifyfla6l763l3p.png)
Versão interativa (online) da rede criada.

## Explore a rede!

Acessar a versão interativa da rede, que colocamos no [Github](https://github.com/paulovanzo/networks/tree/main/Spotify-playlist), é uma boa forma de consolidar o estudo que trouxemos neste artigo. Além de ser uma boa visualização do todo, é bom explorar os grupos e membros pertinentes na rede. [Confira](https://paulovanzo.github.io/networks/network/)!

## Conclusão

Como esperado de algo pessoal e personalizado, a rede é bem distribuída e de maneira geral, um artista só será escutado por pessoas que escutam outros artistas de gêneros com alguma ligação, nesse caso, houveram algumas exceções como pode ser observado ao pegar os 2 k-core mais profundos da rede, existe um núcleo de artistas que são escutados por quase todo perfil de pessoa no Spotify.

Este post foi feito como parte de uma atividade avaliativa da disciplina de Análise de Redes. Outros diversos assuntos podem ser analisados utilizando as ferramentas e assuntos que utilizamos aqui.

Caso deseje, é possível acessar o projeto no [Github](https://github.com/paulovanzo/networks/tree/main/Spotify-playlist). Espero que tenha gostado deste post!

## Autores

Este post, gráficos e códigos utilizados foram feitos por [Brenda Silva](https://github.com/breudes) e [Paulo Vanzolini](https://github.com/paulovanzo). 

O post foi originalmente postado no [Medium](https://medium.com/@paulovanzolinimouradasilva/an%C3%A1lise-de-rede-playlists-do-spotify-b2806ccd8ea5).