Análise de sentimento do COPOM com R (parte 3: analisando o sentimento)

Inspirado no artigo “Quando as palavras contam a história”, do Terraço Econômico, resolvi elaborar minha própria implementação do método, contribuindo para a comunidade. Vou mostrar então como eu fiz em alguns posts dessa série:

  1. Usando a base de dados
  2. Replicando a base de dados
  3. Analisando o sentimento

Nesse post eu vou explicar como fazer uma análise de sentimento básica.

Primeiramente, vamos garantir que temos tudo o que precisamos carregando a base de dados na tabela atas (você pode baixar o arquivo direto no link na parte 1 ou criar o seu próprio com a parte 2):

library(dplyr)
library(lubridate)

atas <- read.table(“atas.txt”, header = TRUE) %>%
as_tibble() %>%
mutate(data = ymd(data)) %>%
mutate(texto = as.character(texto))

Para fazer a análise vamos utilizar o pacote lexiconPT. Neste pacote temos o objeto oplexicon_v3.0 que nada mais é que uma tabela com uma lista de palavras e expressões. Cada palavra (chamada term) corresponde a uma classificação (adjetivo, verbo, substantivo, emoticon, etc.) e uma polaridade, definida como -1, 0 ou 1.

A análise de sentimento simples que vamos propor aqui nada mais é que pegar a lista de palavras de cada ata do COPOM e bater com a lista de palavras do oplexicon, somando as polaridades por ata. Primeiro criamos a função de pontuação:

library(tidyverse)
library(tidytext)
library(lexiconPT)

pontuar_texto <- function(x) {
p <- x %>%
as_tibble() %>%
unnest_tokens(term, value) %>%
inner_join(oplexicon_v3.0) %>%
.$polarity %>%
sum()
return(p)
}

Pegamos o texto x, fazemos uma tabela com ele, “abrimos” as células para que cada palavra seja uma linha (unnest) e fazemos um inner_join com a tabela de termos. Inner Join é um tipo de mescla de tabelas, onde as linhas serão unidas pelos termos em comum das tabelas. Em seguida selecionamos apenas a coluna das polaridades e somamos os valores. A função vai retornar este número apenas, a pontuação do texto passado para ela.

Vamos então aplicar esta função na tabela com todas as atas:

pts <- atas %>%
mutate(pontos = map(texto, pontuar_texto)) %>%
unnest(pontos)

Ou seja, vamos criar a nova tabela “pts”, pegando a tablea original das atas e acrescendo uma coluna que é a aplicação da função pontuar_texto no texto de cada linha.

A minha ficou assim:

# A tibble: 192 x 4
ata data texto pontos
<int> <date> <chr> <int>
1 21 1998-05-22 Início » Sistema de Metas para a Inflação » Copom » Atas do Copom » Notas da 21ª Reunião do C~ 14
2 22 1998-06-26 “Início » Sistema de Metas para a Inflação » Copom » Atas do Copom » Notas da 22ª Reunião do ~ 27
3 23 1998-07-31 “Início » Sistema de Metas para a Inflação » Copom » Atas do Copom » Notas da 23ª Reunião do ~ 3
4 24 1998-08-04 “Início » Sistema de Metas para a Inflação » Copom » Atas do Copom » Notas da 24ª Reunião do ~ 7
5 25 1998-10-09 “Início » Sistema de Metas para a Inflação » Copom » Atas do Copom » Notas da 25ª Reunião do ~ -6
6 26 1998-11-13 “Início » Sistema de Metas para a Inflação » Copom » Atas do Copom » Notas da 26ª Reunião do ~ 25
7 27 1998-12-18 “Início » Sistema de Metas para a Inflação » Copom » Atas do Copom » NOTAS DA 27ª REUNIÃO DO ~ 13
8 28 1999-02-12 Início » Sistema de Metas para a Inflação » Copom » Atas do Copom » Notas da 28ª Reunião (Ext~ -3
9 29 1999-02-12 “Início » Sistema de Metas para a Inflação » Copom » Atas do Copom » Notas da 29ª Reunião do ~ -2
10 30 1999-03-05 “Início » Sistema de Metas para a Inflação » Copom » Atas do Copom » Notas da 30ª Reunião do ~ 15
# … with 182 more rows

Vamos fazer um gráfico com o pacote ggplot2:

ggplot(data = pts, aes(x = data, y = pontos)) +
geom_line()

Isto é: me faça um gráfico usando a tabela “pts”, colocando as datas no eixo x e os pontos no eixo y, usando uma linha. Resultado:

sentimento

Tá aí a análise simples de sentimento.

DICA EXTRA:

Muitas vezes, para fazer uma nuvem de termos ou a análise de um texto maior, precisamos tirar as palavras mais comuns da língua portuguesa da tabela de palavras. O procedimento é o mesmo, pegue a sua tabela e faça um inner_join com a tabela das palavras comuns. Aqui você baixa uma boa tabela de palavras comuns da língua portuguesa:

https://github.com/stopwords-iso/stopwords-pt/blob/master/stopwords-pt.txt

Boa análise!

Anúncios

Um comentário sobre “Análise de sentimento do COPOM com R (parte 3: analisando o sentimento)

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

w

Conectando a %s