Crie seu próprio mural da tristeza com Python

Há alguns dias o meu twitter ficou vermelho em meio ao colapso do mercado de ações e cripto moedas. Durante uma enxurrada de memes e notícias catastróficas sobre a recessão, havia um gráfico vermelho mostrando o quanto as ações tinham naquele dia. Não consegui encontrar aquela imagem exata novamente, mas pelo que me lembro, parecia com essa.

Esta imagem condensa o sofrimento de Wall Street em 960 pixels por 540 e é conhecida como um gráfico de treemap. Ele frequentemente é mostrado nas notícias na TV, às vezes com cores mais felizes, mas geralmente em um formato semelhante.

Este gráfico é bastante poderoso, pois é capaz de resumir e apresentar dados de muitos ângulos diferentes ao mesmo tempo. Pegue a Microsoft (MSFT) como exemplo e vejamos todas as informações que podemos extrair usando este gráfico.

Podemos ver que a Microsoft pertence à indústria de Software-Infraestrutura que pertence ao setor de Tecnologia. Seu tamanho no gráfico é baseado em seu valor de mercado, que você também pode encontrar duas linhas abaixo de seu símbolo (MSFT). Os -2,11% representam o quanto o preço das ações caiu naquele dia. Cerca de $40 bilhões 😬

Agora que entendemos como funciona o gráfico de treemap e como ele representa os dados, vamos criar o nosso usando Python!

Conjunto de dados

Os dados de origem para este exemplo são o conjunto de dados do Kaggle S&P 500 Stocks (atualizado diariamente). Você pode baixá-lo aqui.

Se você deseja pular a parte de pré-processamento do tutorial, pode encontrar o conjunto de dados pré-processado aqui. Em seguida, você pode usar este notebook resumido para gerar o gráfico.

O conjunto de dados original possui três arquivos, mas usaremos apenas dois para este tutorial: sp500_companies.csv, que contém dados sobre cada empresa, como setor, indústria e valor de mercado; e sp500_stocks.csv, que possui os movimentos diários das ações.

Pré-processamento

Para o pré-processamento, primeiro carregaremos o conjunto de dados sp500_companies.csv e selecionaremos algumas colunas.


Agora encontramos os dias em que as ações tiveram o pior desempenho.


Para encontrar os dias de pior desempenho, agrupamos os registros por Date, subtraímos a coluna Close pela Open e armazenamos o resultado deste cálculo na coluna Net. Em seguida, ordenamos o dataframe com base na coluna Net, para que os dias com piores resultados fiquem no topo.

Com base em nossa métrica, podemos ver que o pior dia foi 2020-03-20 no início da pandemia, e o segundo pior dia foi 7 de março de 2022. Provavelmente por volta de quando vi o gráfico no meu twitter. Vamos usar a primeira data para criar nosso gráfico.


Enriquecendo o conjunto de dados

Para enriquecer nosso conjunto de dados, usaremos o arquivo sp500_companies.csv. As colunas que selecionaremos do conjunto de dados da empresa são Shortname, Sector e Weight (quanto impacto a empresa tem na lista S&P500). Também pegamos a coluna Symbol, que usamos ao mesclar os dois quadros de dados.


No último passo do pré-processamento, criamos uma nova coluna chamada PcChangeDay. Esta coluna armazena a variação percentual entre o preço de abertura e fechamento da ação durante aquele dia.


Vamos salvar este dataframe, para que qualquer um possa executar o código para gerar o gráfico sem ter que baixar os conjuntos de dados de origem e executar as etapas de pré-processamento 😉


Criando o gráfico de treemap

Usaremos o módulo Python Plotly para criar o gráfico de treemap. Você pode encontrar a documentação do gráfico nesta página.

Para a primeira tentativa, vamos limitar o número de parâmetros alterados.


Ah… você também pode passar o mouse e clicar nas células para ver mais informações 😉


O método px.treemap() acima possui cinco parâmetros principais. O dataframe de entrada; path descreve a hierarquia dos dados; values define o tamanho da área das ações no gráfico. Usamos a coluna weight aqui, então as empresas com mais impacto no S&P500 aparecem maiores; color a coluna usada para definir a cor das ações; color_continuous_scale define o mapa de cores. Neste caso, vermelho, vermelho escuro e verde.

Agora vamos melhorar visualmente este gráfico ajustando alguns parâmetros.


Para mim, o gráfico ficou muito melhor. O texto está centralizado e alinhado, ele mostra a variação diária como uma porcentagem e nos livramos da escala de cores.

Você pode encontrar mais informações sobre essas configurações personalizadas aqui e aqui.

Conclusões

Neste tutorial, aprendemos como criar um gráfico de treemap e visualizar o pior dia para o S&P 500. Também aprendemos que o gráfico produzido pelo Plotly é interativo e, clicando nas diferentes regiões, podemos explorar para cima e para baixo.

Até o próximo post! 👋

Caso queira entrar em contato, você pode me encontrar no Twitter ou no LinkedIn.