Quem tem o maior vocabulário do RAP nacional?

Breno Matos
7 min readJan 31, 2021

Desde pequeno gosto muito de RAP. No começo ouvia só hip hop americano (Eminem, 50 cent, Snoop Dogg) mas de uns anos para cá o RAP nacional foi ganhando bastante força e, hoje em dia, 90% dos raps que ouço são nacionais.

Desde que vi uma análise de vocabulário do RAP americano na puddin.cool, achei muito maneira e fiquei muito curioso para saber como seria isso no Brasil, quem seria o MC com maior vocabulário? Ou o que mais se repete?

Então decidi fazer essa análise, unindo a música com mais uma paixão que é o Data Science.

Pensando em como fazer, deu para separar esse projeto em duas frentes:

  1. WebScraping para conseguir os dados.
  2. Natural Language Processing para tratar os dados e obter os insights.

No final vamos ter um WordCloud das palavras mais utilizadas de cada artista e uma comparação com todos os artistas em relação a seu vocabulário.

Vou mostrar como eu fiz para qualquer um que quiser fazer, com pouco conhecimento de programação, possa replicar também.

1. WebScraping

Começando com WebScraping, eu já tinha feito alguns projetos com Beautiful Soup e Selenium, talvez até escreva sobre eles aqui futuramente, mas queria testar um novo framework que era o Scrapy, já que tinha ouvido falar muito bem da sua eficiência e praticidade.

Então vamos lá.

Para instalar o Scrapy é bem fácil, apenas digite no terminal:

pip install scrapy

Uma boa prática é criar uma virtualenv antes de começar um novo projeto e instalar o scrapy nessa virtualenv.

Para iniciar o projeto, escolha a pasta pelo terminal que você quer ter o seu diretório e de enter no comando scrapy startproject tutorial que ele vai criar as pastas e deixar tudo pronto para começarmos. Para qualquer dúvida, a documentação do Scrapy é bem útil.

O Scrapy utiliza as Spiders para acessar os sites e salvar os dados pra gente, então vamos criar uma agora.

Uma observação no meio do caminho: O Scrapy não é muito otimizado para rodar no Jupyter Notebook, pois você precisa criar arquivos .py (.pynb não funciona), por isso recomendo o uso do VS Code, pelo menos para essa parte de WebScraping.

Entre na pasta tutorials/spiders e crie um arquivo .py com o nome que quiser, eu criei como lyrics_spider.py. Segue o código abaixo e depois alguns comentários.

A nossa LyricsSpider precisa herdar uma class do Scrapy chamada scrapy.Spider. Damos um ‘name’ pra ela que no meu caso foi “rap”. Criei uma lista de todos os mcs que queria pegar os dados, conferindo no site letras.mus.br como ficava o url desse artista e depois assinalei o ‘start_urls’ para essa lista.

Esses são os links que nossa Spider vai começar trabalhando, mas dentro de cada um deles, ela vai entrar em cada uma das músicas e salvar os dados.

Isso é feito nas duas funções abaixo: parse_author e parse_song.

Na parse_author ele salva uma variável com os links de todas as músicas do mc através de uma tag css.

Aperte Ctrl+Shift+i para inspecionar o site.

Conseguimos ver que o link da letra está localizado dentro de uma tag <a> com a class=”song-name”.

Depois que ele pega todos esses links, ele entra em cada um e chama a parse_song, que guarda pra gente em um dicionário o nome da música, artista e a letra completa.

Como a letra é dividida em vários parágrafos e cada parágrafo tem uma tag, eu coloquei o método getall() para juntar todas.

Repara na divisão por parágrafo

Beleza, depois de tudo configurado e minimamente entendido, está quase pronto para rodarmos.

Quase porque como estamos pegando dados da internet de forma muito rápida, é importante agirmos de forma responsável e colocarmos alguns delays para não sobrecarregar o servidor e também não termos nosso ip bloqueado no site.

Esse blog explica muito bem sobre e da um passo-a-passo para usar no Scrapy.

Bom, levando em conta que todos os cuidados foram tomados, agora é só digitar scrapy crawl rap -o rap.csv pelo terminal na pasta que foi criado o projeto e o Scrapy começa a entrar nos links e baixar os dados pra gente. rap é o nome da nossa spider e -o é o output que queremos, que vai ser um .csv com o nome rap.

Com o csv baixado, podemos dar continuar para a parte de NLP.

2. Natural Language Processing

Para utilizarmos as bibliotecas de nltk e wordcloud, precisamos instalá-las na nossa virtualenv, utilizando o pip e importá-las no nosso código.

pip install nltk wordcloud

Bibliotecas utilizadas

O nosso csv ficou com essa cara aqui:

df_raw = pd.read_csv(‘rap.csv’)

df_raw

Cada linha possui uma música, com uma coluna para o artista e uma para a letra.

Vamos começar pela limpeza desses dados e agrupar as letras por artistas.

2.1. Data Cleaning

Nosso df clean ficou assim:

2.2. Tokenizing

Tokenização nada mais é do que transformar o texto inteiro em uma lista com todas as palavras separadas. É bem simples e aproveitei para já colocar os artistas como index do nosso DataFrame, o que vai nos ajudar mais pra frente.

DataFrame tokenizado

2.3. Stopwords Filtering

Agora, vamos filtrar as palavras que não possuem significado para nossa análise e que se repetem muito. Essas palavras são chamadas de stopwords e conseguimos uma lista delas com a biblioteca nltk.
Elas iriam acabar poluindo o nosso WordCloud ficando com um destaque muito maior do que as palavras mais interessantes, que diferem um artista do outro.

Nessa parte também vamos criar uma coluna com o título wordcloud para utilizar mais pra frente.

O WordCloud precisa receber, como input, um texto com as palavras separadas por espaço e, para termos uma visualização melhor das palavras importantes, sem stopwords.

Eu criei uma lista chamada update para incluir mais algumas stopwords que não estavam no pacote do nltk.

Dataframe com a coluna wordcloud

2.4. Words Counting

Agora, vamos contar a quantidade de palavras únicas, totais e a relação entre elas de cada artista, salvando nas colunas ‘Unique’, ‘Total’ e ‘Relative’. Isso servirá para analisarmos os vocabulários em seguida.

Pronto, agora nossa tabela já está organizada com tudo que precisamos e já podemos plotar.

2.5. WordCloud Plot

Começando pelo WordCloud.

Como a gente colocou os artistas para o index do DataFrame, fica bem mais fácil buscar as letras deles agora com o loop e utilizando o método .loc.

Um exemplo de como fica a WordCloud:

WordCloud do Xamã

Com o WordCloud da pra ver bem qual é o vocabulário mais utilizado de cada artista e qual é a sua “marca pessoal” por assim dizer.

2.6. Scatter Plot

E, finalmente, podemos fazer o nosso plot de dispersão e comparar o vocabulário utilizado de cada artista.

Decidi fazer a analise em dois eixos:
Quanto mais para direita o artista está, maior o vocabulário de suas músicas e quanto mais para cima, menos o artista repete as palavras. Assim não ficamos muito enviezados em relação à quantidade total de palavras/músicas que um mc tem.

De cara algumas coisa me chamam atenção nesse gráfico.

Primeiro em relação ao grupo Costa Gold, Emicida, Haikaiss e Facção Central estão entre os que possuem um maior vocabulário. E diferente dos demais, o Emicida é o único artista solo nesse grupo, o que mostra um vocabulário pessoal ainda maior.

Fabio Brazza também se destaca no sentido de ser um artista solo com vocabulário alto e com baixas repetições de letra, o que faz sentido visto que ele veio da poesia antes de ir para o rap.

Makalister e Speed Freaks liderando como os mc’s que menos se repetem nas músicas, apesar de possuírem poucas letras no geral.

E por fim, Luccas Carlos e Gaab com um alto nível de repetição e poucas quantidade de letras, o que faz sentido por serem artistas mais melódicos e que fazem bastante refrão.

No geral esse gráfico acaba sendo bem interessante para comparar diversos rappers na questão lírica e possivelmente até uma forma de conhecer novos artistas com base na sua posição nos eixos (Makalister por exemplo não conhecia e vi que suas letras parecem bem poéticas).

Conclusão

Agora você já consegue analisar toda a discografia de qualquer cantor, criando um wordcloud e até comparar o seu vocabulário com outros. Até mesmo comparar estilos diferentes.
Qual estilo de música deve ser o mais repetitivo? E o com maior vocabulário?
Qual outra análise seria maneira de fazer? Talvez até saindo do tema música, indo para filmes, séries… As possibilidades são imensas.

Nessa análise ainda da pra brincar um pouco mais com os dados e penso em separar em outros artigos pra esse aqui não ficar muito grande.

Gostou do texto ou ficou com alguma dúvida?

Comenta aqui embaixo e se conecta comigo no linkedin:

Abraços e até a próxima!

--

--