Visualização e Análise de Dados
Nesse artigo vamos falar sobre exploração de dados, pegaremos duas bases de dados (dataset) e veremos como gerar alguns gráficos com o objetivo de entender a estrutura dos dados e achar padrões.
As bibliotecas utilizadas para visualizar os dados serão:
Matplotlib: é uma biblioteca utilizada para plotar os mais variados tipos de gráficos.
Seaborn: utiliza o Matplotlib como base e fornece funções simples de usar para criação de gráficos que seriam complexos apenas com o Matplotlib.
Instalação:
Mercado financeiro
Podemos facilmente plotar gráficos de ações de empresas na bolsa de valores.
Vamos utilizar a biblioteca pandas-datareader para pegar informações sobre ações e preencher nosso dataset. Essa biblioteca não pega dados da Bovespa.
Vamos instalá-la:
Uma vez instalada, vamos ao nosso código Python.
A linha logo abaixo faz os gráficos aparecerem no Jupyter notebook, não é necessária caso não esteja utilizando ele.
Vamos pegar os valores das ações do Google da API do Google Finances de hoje até um ano atrás. A documentação do DataReader pode ser vista aqui.
Uma vez que estamos com as informações em mãos, vamos aos gráficos. Exibiremos os valores máximos e mínimos de cada dia de todo o período.
Criaremos algumas novas colunas com base nos dados. Média móvel e retorno diário são métricas comumentes analisadas em ações.
Vamos plotar o valor de fechamento e suas médias móveis para compararmos.
Caso queira salvar o gráfico em arquivo, basta guardar o retorno em uma variável como no exemplo anterior e chamar o método savefig do figure.
Vamos ver como ficou o retorno diário das ações no decorrer do ano.
Ao plotar a distribuição desses dados, analisaremos mais facilmente se é uma ação com um bom retorno diário.
Quando já temos o figure, como é o caso acima, basta chamar o método savefig para salvar em disco.
Com uma coluna que mostra somente ano e mês podemos agrupar os dados e gerar um boxplot para ver a distribuição dos dados em cada mês.
Transformaremos a data que é o index de nosso DataFrame em uma coluna normal para facilitar a criação de alguns gráficos, também criaremos uma coluna com a data em formato numérico.
Com o Matplotlib conseguimos plotar um gráfico do tipo candlestick, que é muito comum na analise de ações. Usaremos os últimos 15 dias para o gráfico ficar com um tamanho legível.
Com uma curva de tendência para o valor de fechamento das ações, podemos ter uma projeção para os próximos valores. Uma regressão linear será usada para criar essa curva.
Os gráficos do Seaborn retornam um objeto onde tem o figure que usamos para salvar em disco:
Múltiplas ações
Podemos plotar gráficos de múltiplas ações simultaneamente, o que é muito útil para fins comparativos. Vamos pegar um período de 5 anos.
No código acima usamos o Set1 no colormap, é a paleta de cor que usamos para colorir o gráfico. No caso do Seaborn a paleta pode ser passada pelas variáveis cmap ou palette. As diversas paletas existentes podem ser vistas aqui. Quando o parâmetro for apenas color, usamos cores puras (red, blue, black etc) ao invés de paletas.
Geraremos um gráfico que mostra a correlação entre as ações.
Vemos no exemplo que empresas de tecnologia (GOOG, MSFT, AMZN, AAPL e TSLA) possuem alta correlação entre sim, enquanto empresas de outros ramos, como energia (GE) e petróleo (XOM) possuem correlação baixa com essas empresas de tecnologia. Totalmente azul (1) é correlação máxima, totalmente vermelho (-1) é correlação inversa e branco (0) é sem qualquer correlação. Vemos que as ações possuem correlação máxima com elas mesmas e estão azul.
Titanic
É um famoso problema do site de competições Kaggle. É uma base de dados que contém diversas informações sobre os passageiros do Titanic, baseado nessas informações devemos criar um modelo capaz de dizer se determinada pessoa morreu ou não no naufrágio. Mais informações e a base de dados para download podem ser encontradas aqui.
Temos diversas informações nesse dataset, como idade, sexo, cabine, cidade de embarque, número de acompanhantes, valor pago, classe e se a pessoa morreu ou não no acidente. Para uma parte dessas pessoas o site não fornece essa última informação, dessa forma o site consegue validar se o seu modelo é capaz de prever corretamente algo que ele não conhece. Nesse primeiro artigo vamos apenas visualizar e analisar os dados, em um próximo treinaremos um modelo com ele.
Criaremos um gráfico mostrando a distribuição do sexo masculino e feminino, podemos usar a função plot do próprio Pandas ou o factorplot do Seaborn.
Faremos o mesmo para a classe onde o passageiro se encontra.
Vejamos como ficou a distribuição entre sobreviventes e não sobreviventes.
Podemos usar o campo hue para dividir as barras por categorias.
Geraremos uma coluna dizendo se é adulto ou não para vermos a distribuição de adultos e crianças em cada sexo.
Com um histograma, podemos ver a distribuição da idade dos passageiros. Vemos que a maioria está por volta dos 20, 30 anos.
Olhando a cidade de embarque dos passageiros, vemos que a maioria embarcou em Southampton.
Criaremos uma nova coluna agrupando as pessoas em homem, mulher, criança e idoso baseado no sexo e na idade.
A taxa de sobrevivência desses novos grupos ficam assim:
O gráfico mostra que a taxa de mortalidade é muito maior entre os homens. Isso provavelmente é devido à política de “mulheres e crianças na frente”.
Com as novas colunas abaixo veremos quem viaja acompanhado e com quantos membros da familía está.
Vemos que a maior parte das pessoas viajavam sozinhas.
Também vemos que a taxa de mortalidade foi bem maior entre os que viajavam sozinhos.
Entre as classes, vemos que a primeira teve mais sobreviventes do que mortos, a segunda foi equilibrada e a terceira teve um número bem maior de morto. Isso provavelmente é devido à posição das cabines com relação ao ponto de impacto do icerberg.
Cruzaremos alguns dados com à cidade de embarque.
A cidade de Southampton é na sua maioria composta de pessoas da terceira classe, sozinhas e homens. Pelo perfil é bem provável que tenha alguma indústria nessa cidade e sejam pessoas voltando do trabalho.
Vamos ver quem viajou sozinho.
A maioria dos viajantes sozinhos são homens e quase não temos crianças sozinhas. Já nas pessoas com família, temos uma incidência maior de mulheres e muitas crianças. Temos poucos idosos no navio, tanto sozinhos, quanto acompanhados.
Com um gráfico de linha veremos a distribuição dos dados.
Distribuindo o valor das taxas de embarque de acordo com a classe, vemos que as maiores são as da primeira classe.
Plotando as idades de acordo com o sexo, vemos que a distribuição de idade entre homens e mulheres é bem próxima.
Por último, criaremos gráficos que mostram a taxa de sobrevivência baseado em algumas das características que temos.
O grupo que mais sobreviveu possui as seguintes características: está na primeira classe, é mulher, embarcou em Cherbourg e não viajava sozinha.
Diversos outros gráficos podem ser encontrados na documentação de Matplotlib e Seaborn, além de existirem dezenas de outras bibliotecas para esse fim.
O objetivo desse artigo foi mostrar como plotar os dados para melhor entendê-los e através disso criar melhores modelos de Machine Learning.
O Jupyter notebook com todo o código pode ser visto aqui.
Voltar para página inicial: Carlos Baia