Coletando e visualizando dados do mercado financeiro utilizando Python

Para essa análise, foram escolhidas as ações de 5 empresas e o índice BOVA 11

Hernandes Matias Junior
Jogando os Dados
4 min readMay 24, 2021

--

Ilustração por SeizSafe.

O mercado financeiro é um grande campo de atuação da Ciência de Dados, sendo possível ser realizada a previsão do preço de ações, clusterização de empresas similares, análise de sentimentos de textos, entre outros trabalhos utilizando algoritmos supervisionados e não supervisionados. Área em que tenho um grande interesse enquanto estudante de Data Science, nesse post ensinarei como coletar os dados das ações utilizando Python e Jupyter Notebook.

1. Importando as bibliotecas e o dataset

Nessa primeira etapa, importaremos as bibliotecas python bastante utilizadas na análise de dados. O pandas, para a manipulação; numpy, para cálculos matemáticos; matplotlib, seaborn e plotly para a visualização; e, por fim, o datareader, para trazer os dados das ações da web.

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import plotly.express as px
from pandas_datareader import datasns.set()

Nosso objetivo agora é coletar os dados das ações de algumas empresas. Para isso, utilizaremos o datareader, já importado anteriormente, e também o Yahoo! Finanças como nossa fonte web.

Precisamos definir então ações de quais empresas desejamos importar, colocando seus nomes em uma lista. Esses nomes podem ser encontrados no Yahoo! Finanças, se atentando pois uma mesma empresa pode ter suas ações comercializadas em mercados de vários países, e aqui analisaremos a bolsa de valores brasileira, a B3. Nesse ponto, optei pelas ações da Gol, CVC, WEGE, Magalu, TOTV e o índice da BOVA11.

acoes = ['GOLL4.SA','CVCB3.SA','WEGE3.SA','MGLU3.SA','TOTS3.SA','BOVA11.SA']

Definidas as ações que queremos coletar, criamos um dataframe vazio e um laço de repetição for que vai percorrer cada uma das ações dessa lista, coletá-las do Yahoo! Finanças e armazená-las no dataframe.

acoes_df = pd.DataFrame()

for acao in acoes:
acoes_df[acao] = data.DataReader(acao, data_source='yahoo', start='2015-01-01')['Close']

Repare que dentro da função do datareader, passamos o nome da ação, a fonte, a data de início e, fora dos parênteses, frisamos se tratar de dados do fechamento diário da bolsa. Vamos visualizar como ficou nosso dataset.

Para facilitar a utilização desses dados, podemos renomear as colunas, fazendo com que fiquem mais intuitivo para quem está lendo.

acoes_df = acoes_df.rename(columns={'GOLL4.SA':'GOL','CVCB3.SA':'CVC','WEGE3.SA':'WEGE',
'MGLU3.SA':'MGLU','TOTS3.SA':'TOTS','BOVA11.SA':'BOVA'})

2. Visualizando os dados

Com os dados coletados, uma forma mais interessante de visualizá-los é utilizando gráficos. Para os dados de ações, é possível fazer vários tipos de análises, mas aqui focaremos nas séries temporais para visualizar como as ações se comportam ao longo do tempo.

Para isso, é necessário transformar a coluna “Date” para o tipo data. Após a conversão, plotaremos um gráfico de linhas utilizando o próprio plot do pandas.

# convertendo a variável para o tipo dataacoes_df_normalizado['Date'] = pd.to_datetime(acoes_df_normalizado['Date'])# plotando o grafico de linha

acoes_df_normalizado.plot( x = 'Date', figsize=(20,12), title = 'Histórico do preço das ações')

Com o gráfico plotado, o que visualizamos é a flutuação do preço das ações das empresas, estando claro que as ações da BOVA e da WEGE são as que possuem um maior valor.

Mas para um investidor, o mais interessante não é visualizar qual ação é a mais cara, e sim qual traz mais retorno. Para isso, fazemos uma normalização dos dados, dividindo cada um dos valores pelo valor inicial, e assim vemos o crescimento delas ao longo do tempo.

acoes_df_normalizado = acoes_df.copy()

for i in acoes_df_normalizado.columns[1:]:
acoes_df_normalizado[i] = acoes_df_normalizado[i] / acoes_df_normalizado[i][0]

Ao plotarmos novamente o gráfico, agora com os dados em uma mesma escala poderemos visualizar o crescimento no período.

Se compararmos os dois gráficos antes e depois da normalização, chegaremos à conclusão de que as ações da BOVA e WEGE são as mais caras, mas as ações do MGLU são disparadas as que proporcionaram maior retorno para o investidor no período analisado.

3. Elevando a visualização dos dados

Embora sejam eficientes para uma análise rápida, os gráficos utilizados até aqui são estáticos, o que impede que ao passar o mouse, o usuário descubra qual o valor da ação que ele apresenta. Uma biblioteca que proporciona uma visualização de dados em gráficos dinâmicos, é o plotly, muito utilizado em dados financeiros.

Como já importamos a biblioteca do plotly na primeira etapa da nossa análise, basta chamá-lo passando os parâmetros que podem ser encontrados na documentação da biblioteca.

figure = px.line(title='Histórico do preço das ações')for i in acoes_df_normalizado.columns[1:]:
figure.add_scatter(x=acoes_df_normalizado['Date'], y = acoes_df_normalizado[i], name=i)

figure.show()

Agora ao passar o mouse, é possível descobrir o valor ao qual aquela ação se refere. No canto superior direito do gráfico existem outras opções a serem exploradas, como zoom e comparação paralela de valores.

Muito legal, né?

O notebook com a análise mais completa se escontra no meu Github.

Você também pode entrar em contato comigo pelo Linkedin.

--

--

Hernandes Matias Junior
Jogando os Dados

Engenheiro, Administrador pela PUC Minas e pós-graduando em Data Science e Analytics pela USP.