Escolha uma Página

Análise de Sentimento do Mercado de Ações em Python

A análise de sentimento em finanças tem se tornado comum no mercado financeiro. Estas serão as etapas gerais realizar a análise de sentimentos para finanças:

  • Entenda o que é Análise de Sentimentos ;
  • Entenda como ele pode ser efetivamente usado nas finanças ;
  • Aprenda coleta de dados e processamento de texto ;
  • Aprenda a executar a análise de sentimentos;
  • Saiba como usar a saída da análise para finanças;

O que é Análise de Sentimentos?

Definição oficial (da Wikipedia): A análise de sentimento (também conhecida como mineração de opinião ou IA de emoção) refere-se ao uso de processamento de linguagem natural, análise de texto, linguística computacional e biometria para identificar, extrair, quantificar e estudar sistematicamente estados afetivos e informações subjetivas.

De um modo geral, podemos descrever a análise de sentimento, também conhecida como mineração de opinião, é uma técnica de processamento de linguagem natural usada para estabelecer se os dados são positivos, neutros ou negativos .

Por que precisamos da Análise de Sentimentos?

  • Máquinas podem ler muito mais rápido (talvez um milhão de vezes mais rápido) do que humanos;
  • As máquinas podem ler em vários idiomas;
  • As máquinas podem derivar significado do texto de maneira padronizada (os humanos são subjetivos);
  • As máquinas podem armazenar informações de textos de maneira conveniente para processamento posterior;

É claro que há desvantagens na análise de sentimentos. As máquinas não são capazes de derivar com precisão o significado dos textos (mas estão melhorando). Gírias, erros de digitação, significado contextual, sarcasmo ainda apresentam dificuldades.

Como a análise de sentimento é usada no Mercado Financeiro?

A análise de sentimento financeiro é usada para extrair informações de notícias, mídias sociais, relatórios financeiros e dados alternativos para investimento, negociação, gerenciamento de risco, operações em instituições financeiras e basicamente qualquer coisa relacionada a finanças.

Além disso, é importante para ler um artigo de notícias ou tweet rapidamente e disparar uma negociação instantaneamente; ler uma grande quantidade de relatórios financeiros e insights de saída; reunir insights das multidões analisando mídias sociais, fóruns da web, notícias e relatórios de analistas.

Quando se trata do mercado de ações, você pode usar a análise de sentimentos para analisar as manchetes de notícias sobre uma determinada ação, por exemplo.

Importação (Processamento de texto – Etapa 1 )

Usaremos o Python e o Google Colab para isso. Python é uma linguagem de programação e Google Colab é um serviço de nuvem gratuito hospedado pelo próprio Google utilizar o código de programação para Aprendizado de Máquina e Inteligência Artificial.

Usaremos o método pd.read_csv() no Pandas para puxar nosso arquivo CSV. O arquivo a ser utilizado é disponível em : https://www.kaggle.com/code/stpeteishii/stockmarket-sentiment-wordcloud/data . O arquivo foi baixado para o formato CSV. Esta base de dados analisa o sentimento do mercado de ações no Twitter, sejam positivos ou negativos.

Primeiro importaremos as bibliotecas que usaremos para armazenar os dados. Usaremos a biblioteca spacy para construir extração de informações ou sistemas de compreensão de linguagem natural. A biblioteca Pandas será usada para armazenar os dados em seus objetos DataFrame enquanto a biblioteca Matplotlib será usada para visualizar os dados. Além disso, utilizamos as bibliotecas string, seaborn, numpy, re para compreensão dos textos, visualização de gráficos, processamento de grandes matrizes/funções científicas e expressões regulares respectivamente para encontrar padrões em strings.

!pip install spacy==2.2.4i

import spacy

spacy.__version__

2.2.4

import pandas as pd

import string

import matplotlib.pyplot as plt

import seaborn as sns

import random

import numpy as np

import re

Como importaremos o arquivo diretamente da plataforma Google Colab, montaremos um Google Drive no Google Colab para salvar o arquivo a ser analisado dentro da plataforma do python.

from google.colab import files

uploaded = files.upload()

Agora você verá seus arquivos do Google Drive no painel esquerdo (explorador de arquivos). Clique com o botão direito do mouse no arquivo que você precisa importar e selecione o caminho de cópia. Em seguida, importe como de costume nos pandas, usando este caminho copiado

import io

data = io.BytesIO(uploaded[‘stock_data.csv’])

import pandas as pd  

 df = pd.read_csv(data , encoding=’utf8′)

Podemos ver as primeiras linhas da base de dados.

df[0:20]

Com a função countplot(), podemos visualizar a quantidade de textos classificados como sentimentos positivos e negativos do Twitter.

sns.countplot(x = df[‘Sentiment’])

Limpeza dos dados (Processamento de texto – Etapa 2 )

O próximo passo é limpar nossos dados.

Vamos eliminar as ‘palavras de parada’ – Stop words (ou palavras de parada – tradução livre) – são palavras que podem ser consideradas irrelevantes para o conjunto de resultados a ser exibido em uma busca realizada para a análise de sentimentos.

Primeiramente iremos eliminar Stop Words da língua portuguesa.

!python -m spacy download pt

spacy.load(‘pt’)

print(spacy.lang.pt.stop_words.STOP_WORDS)

{‘vosso’, ‘desta’, ‘certeza’, ‘dá’, ‘acerca’, ‘eventual’, ‘ali’, ‘boa’, ‘vão’, ‘deve’, ‘temos’, ‘dizer’, ‘dezesseis’, ‘poder’, ‘teu’, ‘grupo’, ‘faz’, ‘os’, ‘somos’, ‘vai’, ‘for’, ‘sim’, ‘deverá’, ‘nem’, ‘devem’, … }

Depois, elimina-se Stop Words da língua inglesa.

!python -m spacy download en

pln = spacy.load(‘en’)

stop_words = spacy.lang.en.stop_words.STOP_WORDS

print(stop_words)

{‘too’, ‘latterly’, ‘we’, ‘next’, ‘he’, ‘using’, ‘were’, ‘whither’, ‘among’, ‘most’, ‘there’, ‘whereafter’, ‘thereafter’, ‘enough’, ‘hereupon’, ‘behind’, … }

Outro passo importante da limpeza de dados é realizar a limpeza de dados.

string.punctuation

!”#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~

Em seguida, utilizaremos a função preprocessamento() para: converter todas as letras para minúsculas; elimintar caracteres especiais; tirar expressões de URL; eliminar espaços em branco; e considerar apenas uma lista de palavras, removendo Stop Words.

Agora podemos realizar um teste para verificar se a limpeza foi feita de acordo com o pré-processamento correto.

preprocessamento(‘I will @test9&+ buy the https://br.financas.yahoo.com/ Facebook stock. 978 ,buy, sell’)

buy facebook stock buy sell

Verificamos que os caracteres especiais e palavras desnecessárias foram eliminadas da frase que testamos.

Executar a Análise de Sentimentos e criar um Word Cloud

A última etapa desta análise é enviar nossas manchetes para um analisador de sentimentos para produzir uma pontuação. Podemos construir nosso próprio modelo de analisador de sentimentos. Um simples pode ser algo treinado usando aprendizado de máquina supervisionado.

df.head(10)

O método apply() permite aplicar uma função ao longo de um dos eixos do DataFrame, padrão 0, que é o eixo do índice (linha). Com isto, aplicamos o pré- processamento, realizado anteriormente.

df[‘Text’] = df[‘Text’].apply(preprocessamento)

df[‘tamanho’] = df[‘Text’].apply(len)

df.head()

Definimos uma nova base ‘positivo’ como todas colunas de sentimento iguais a 1.

positivo = df[df[‘Sentiment’] == 1]

Definimos uma nova base ‘negativo’ como todas colunas de sentimento iguais a -1.

negativo = df[df[‘Sentiment’] == -1]

textos_positivos = positivo[‘Text’].tolist()

len(textos_positivos)

3685

Temos 3685 textos positivos.

O método join() fornece uma maneira flexível de criar strings a partir de objetos iteráveis

textos_positivos_string = ‘ ‘.join(textos_positivos)

Wordcloud – uma nuvem de palavras (também conhecida como nuvem de tags) é uma representação visual de palavras. Os criadores de nuvem são usados ​​para destacar palavras e frases populares com base na frequência e relevância. Eles fornecem insights visuais rápidos e simples que podem levar a análises mais aprofundadas.

Vamos utilizar, neste caso, para descobrir quais os termos e palavras positivas são mais usados nos dados coletados do twitter.

from wordcloud import WordCloud

plt.figure(figsize=(20,10))

plt.imshow(WordCloud().generate(textos_positivos_string));

Podemos destacar como palavras positivas do Word Cloud:

Buy = Indicação de compra de ações

Long= Posição de compra em uma ativo

Bullish =Otimista

Good =Bom

Nice = Legal

High = maior alta de um ativo em determinado período

aap = Ação americana da empresa Bank of America Corp; provavelmente estava numa expectativa positiva no período

Hold= manter a ação na carteira

Utilizarei também para descobrir quais os termos e palavras negativos são mais usados nos dados coletados do twitter.

lista_negativo = negativo[‘Text’].tolist()textos_negativos_string = ‘ ‘.join(lista_negativo)

len(textos_negativos_string)

111533

Temos 111533 textos negativos.

plt.figure(figsize=(20,10))

plt.imshow(WordCloud().generate(textos_negativos_string));

Podemos destacar como palavras negativas deste segundo do Word Cloud:

Sell = Indicação de venda de ações

Short = Posição vendida em uma ativo

Stop = ordem que estabelece a perda máxima que o trader ou investidor deseja assumir na sua posição no mercado

Break =Uma quebra, às vezes chamada de breakout, é quando o preço de um título faz um movimento acentuado em qualquer direção, para cima ou para baixo.

Low= Indicação de baixa de um ativo em determinado período

Goog = Ação americana da empresa Alphabet Inc Class C; provavelmente estava numa expectativa negativo no período

Conclusões Finais

A análise de sentimento é uma técnica de mineração de dados usada pelas empresas para determinar se um sentimento é positivo ou negativo. É a técnica usada pelos computadores para obter o significado por trás de textos, imagens e outros tipos de dados. Você pode usar a análise de sentimentos para analisar o feedback dos clientes e saber se eles estão felizes ou insatisfeitos com sua marca. Você também pode usar a análise de sentimentos para analisar as manchetes de notícias sobre as ações nas quais está interessado. Isso lhe dirá mais sobre a saúde da ação. Python é uma ótima ferramenta de análise de sentimentos porque existem muitas bibliotecas Python para realizar tarefas de análise de sentimentos.

Autor: Bruno Santos
Criador do Blog Possui experiência em Finanças e Análise de Dados. É graduado em Administração de empresas, com foco em finanças pelo Centro Universitário Ibmec (2017) e faz MBA de Finanças Corporativas na FGV. Atualmente é Head Financeiro de uma Startup & Gestor de Fundos. Tem diversos artigos publicados em revistas e congressos nacionais e internacionais. Possui experiência e trabalhos realizados nas linguagens de programação R, PYTHON e VBA. Tem experiência nas áreas de Finanças, Métodos Quantitativos, Análise de Dados, Automação de Processos e Mercado Financeiro. Presta consultoria nas áreas de Finanças e Análise de Dados.

1 Comentário

  1. Avatar

    Muito bom o conteúdo Bruno. Não conhecia essa análise de sentimentos. Parabéns.

    Responder

Enviar um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *