Dominando o Pandas: A Biblioteca para Análise de Dados preferida entre os Cientistas de Dados (Parte 2)

Neste artigo daremos sequência na série Dominando o Pandas

Falar do Pandas nunca é demais, aliás daria um livro se fôssemos mostrar todo o potencial dessa biblioteca.

Mais interessante que mostrar diversas funcionalidades é mostrar suas aplicações.

Assim além do leitor aprender sobre a biblioteca, também aprende sobre como aplicar seus recursos.

Na artigo anterior exploramos uma base de dados e vimos como o Pandas é útil para análise de dados.

Vamos continuar explorando essa base usando os recursos que o Pandas nos oferece.

Sempre de forma que seja útil para o leitor, nada de copiar a documentação e colar aqui 🙂

Resumo da ópera:

Se você já gostou do assunto desse artigo, não deixe de compartilhar com seus amigos para que cada vez mais pessoas aprendam sobre como usar o Pandas 🙂

Aproveite e assine nossa lista para ficar sempre atualizado com novas postagens.

Coloque o seu e-mail abaixo para receber gratuitamente as atualizações do blog!


Scripts e Dataset

databases_Dominando o Pandas

Para este artigo escolhi um dataset bem interessante que pode ser baixado gratuitamente no site do KaggleDominando o Pandas

Essa base de dados é uma base de dados de preço e diversos outros atributos sobre imóveis nos EUA.

Para ficar fácil, disponibilizo a base aqui juntamente com os Scripts (notebook) utilizados neste artigo.

Base de dados : hc_house_data

Scripts: Scripts Artigo (Parte2)

É só baixar a base de dados e os scripts para acompanhar tudo que foi feito neste artigo.

Se não conhece essa biblioteca, ou não tem instalada, aqui ensinamos como instalar.

São 2 minutos, coisa rápida..:)

Análise de Dados

data-analysis-pandas Dominando o Pandas

Com a biblioteca instalada, o primeiro a ser feito é a importação:

import pandas as pd

Agora vamos carregar a base de dados na memória. Para isso use o método read_csv() do Pandas, veja:

No comando acima criamos uma variável chamada “dataset”, esta recebe o caminho do arquivo e em seguida usamos o parâmetro sep=’,’ para dizer que o separador de colunas da nossa base é a vírgula.

A variável dataset agora é um objeto do tipo dataframe.

A base de dados contém dados de imóveis, seria interessante ver a distribuição dos preços.

Vamos plotar um histograma da coluna ‘price’. Veja:

histograma_01_pandas Dominando o Pandas

A primeira linha do comando acima, configura o jupyter notebook para exibir o gráfico na célula do notebook.

Na segunda linha plotamos um histograma da coluna ‘price’ passando como parâmetro o número de bins e parâmetro color=’red’ para colocar o gráfico em vermelho.

O número de bins é a quantidade de caixas que quero agrupar os dados.

Vimos no gráfico que a grande maioria dos preços são entre 1 e 2 milhões, poucos casos de 3 milhões.

Vamos plotar também um histograma com 2 colunas, e usar alguns parâmetros para customizar o gráfico, veja:

histograma 2 Dominando o Pandas

Acima plotamos um histograma para a coluna bathrooms(banheiros) e outro para a coluna bedrooms(quartos).

Nesse gráfico podemos ver a distribuição dos números de banheiros dos imóveis (bathrooms).

Fica claro no gráfico que a maioria dos imóveis possuem de 1 a 3 banheiros.

O parâmetro alpha permite controlar a opacidade da cor.

Pode ser interessante diminuir esse valor, caso queira que as linhas do fundo do gráfico se sobressaem.

O parâmetro color define a cor das barras do gráfico para verde (Green).

Coloque o seu e-mail abaixo para receber gratuitamente as atualizações do blog!

Estatística Descritiva

estatistica_descritiva_pandas Dominando o Pandas

Na tarefa de análise de dados, algo essencial é obter informações estatísticas dos dados.

O pandas facilita muito esse trabalho veja alguns exemplos:

E se quisermos saber qual o número médio de quartos têm os imóveis da base?

mean_bedrooms_pandas Dominando o Pandas

O método mean() (média) nos dá essa informação.

E no caso do número máximo e mínimo de quartos? Ou seja, qual o maior valor da coluna bedrooms?

Use o método max() e min()

max_min_bedrooms_pandas Dominando o Pandas

O método std() calcula o desvio padrão da coluna.

O desvio padrão é uma medida interessante para ver a variabilidade dos dados.

O exemplo abaixo calcula o desvio padrão para a coluna bedrooms:

desviopadrao_bedrooms_pandas Dominando o Pandas

Com o desvio padrão de 0.93 podemos dizer que nossos dados estão com uma variação de 0.93 para cima e para abaixo da média.

É interessante avaliar como está a distribuição dos nossos dados.

Para isso, existem métodos que medem se os dados estão simétricos.

O Pandas possui métodos para calcular a simetria dos dados veja o método skew():

skew_pandas Dominando o Pandas

Esse método retorna o valor de simetria de cada coluna do dataset.

Um valor zero indica uma distribuição simétrica, um valor maior que zero ou menor indica uma distribuição assimétrica.

Podemos ver algumas informações interessantes, vejam que algumas colunas tem um valor muito acima de 0 e outras um pouco abaixo.

Valores acima de zero podemos dizer que existe uma assimetria positiva e valores abaixo de zero uma assimetria negativa.

Isso quer dizer que valores muito acima de zero indicam que existem mais valores acima da média e valores abaixo de zero significa que contém mais valores abaixo da média.

Se quiser várias medidas juntas use o comando describe().

Já falei desse método antes, mas nunca é demais, ele é extremamente útil.

Nesse exemplo usamos o describe em uma coluna:

describe_bedrooms_pandas Dominando o Pandas

 Extraindo Insights

insights_pandas Dominando o Pandas

Uma forma de explorar os dados em busca de obter conhecimento é investir na visualização de dados. Dominando o Pandas

Nesse artigo mostramos como plotar os gráficos certos visando obter insights.

O Pandas nos permite de forma rápida e fácil plotar um gráfico do tipo BoxPlot.

Esse gráfico nos mostra diversas informações relevantes, veja:

Boxplot01_pandas Dominando o Pandas

No código acima plotamos o gráfico de Box para a coluna ‘bedrooms’.

O que esse gráfico nos mostra?           Dominando o Pandas

Esse gráfico mostra várias informações relevantes, como: o valor médio dos dados, o valor máximo e mínimo do conjunto de dados e os outliers.

As linhas superior e inferior extra ao retângulo representam o valor máximo e mínimo dos dados.

Os pontos fora das linhas superior e inferior são chamados de outliers, pois, se distanciam da média dos valores.

Podemos ver um ponto que se distancia bastante, este seria um outlier, veja:

boxplot_pandas02 Dominando o Pandas

Com o BoxPlot conseguimos visualizar de forma rápida a distribuição dos dados através da dimensão do retângulo e visualizar os outliers representadas pelos valores pontos distantes.

Obs: A linha matplotlib.style.use(‘ggplot’) usei para mudar o estilo do gráfico. Isso apenas muda o layout do gráfico, mudando as cores e o fundo.

Se quiser conhecer os estilos disponíveis use o comando: matplotlib.style.available.

Podemos também plotar um gráfico do tipo Box de uma coluna agrupado por outra coluna, veja:

boxplot02_bedrooms Dominando o Pandas

No comando acima plotamos a coluna ‘bedrooms’ agrupada pela coluna ‘price’.

Dessa forma podemos ver os imóveis pela quantidade de quartos e seus preços.

Bem interessante né?

Coloque o seu e-mail abaixo para receber gratuitamente as atualizações do blog!

Correlação de Variáveis

Outro recurso interessante para fazer análise de dados é visualizar a correlação entre as variáveis. Dominando o Pandas

Será que existe uma correlação entre o número de banheiros do imóvel e o seu preço?

Ou, o número de quartos e o preço? Dominando o Pandas

Veja que com o método corr() do pandas podemos calcular a correlação entre todas as colunas do dataset.

correlacao_01 Dominando o Pandas

A correlação que o pandas implementa por padrão é a correlação de Pearson.

Este coeficiente assume valores entre -1 e 1, onde um valor 1 significa uma correlação positiva perfeita entre as variáveis e um valor -1 uma correlação negativa perfeita entre as variáveis.

Os valores 0 significa que não há uma correlação entre as variáveis. Dominando o Pandas

Podemos implementar também a correlação de Spearman. A diferença aqui é que essa calcula a correlação não linear entre as variáveis.

Para usar passe o parâmetro para o método corr():

correlacao_02 Dominando o Pandas

Vamos investigar melhor a correlação das colunas com o preço.

Veja que algumas colunas tem uma alta correlação com preço.

Isso quer dizer que essas colunas impactam muito no preço dos imóveis, veja:

correlacao_colunas_ Dominando o Pandas

Repare que as colunas ‘sqft_living’ , e ‘grade’ tiveram uma correlação positiva com a variável ‘price’.

Já a coluna ‘waterfront’ teve uma baixa correlação. Dominando o Pandas

O que essas colunas significam?

  • sqft_living : Quantidade de metros quadrados do interior do imóvel.
  • waterfront: Imóvel tem vista para o mar ou não.
  • grade: Um índice de qualidade do design e construção do imóvel, onde valores mais altos significam imóveis com qualidade de construção superior.

Interessante aqui é que se o imóvel tem uma vista para o mar, isso não tem tanta correlação com o preço. 🙂

Me dê imagens..

Uma imagem vale mais que mil palavras. Vamos plotar essas correlações.

correlacao_pandas Dominando o Pandas

É possível ver a relação das linhas com a variável ‘price’.

Veja que a linha verde (grade) e azul (sqft_living) quando próximas a variável ‘price’ se mantém acima de 0.6 enquanto a linha laranja (waterfront) se mantém bem abaixo.

Para plotar correlação existem outras bibliotecas que nos dão uma visão bem melhor, como a seaborn.  Porém, para uma rápida visualização o pandas já atende bem.

Coloque o seu e-mail abaixo para receber gratuitamente as atualizações do blog!

Tabelas Pivot

As tabelas pivot são úteis para fazer agrupamentos nos dados. Dominando o Pandas

Essa funcionalidade é bastante eficiente e nos dar uma enorme vantagem em termos de tempo e desempenho computacional.

Imagine fazer agrupamento de bases de dados muito grande na mão?

Por exemplo, se quisermos contar a quantidade de imóveis agrupados pelos que têm e não tem visão para o mar e ainda pelo número de andares?

Veja como isso pode ser fácil:

pivot_table Dominando o Pandas

Com esse sumário dos dados ficou claro que a grande maioria dos imóveis não tem visão para o mar e são imóveis de 1 e 2 andares. 😉

O método pivot_table() recebe o primeiro parâmetro “id” que a coluna será o resultado da contagem dos dados agrupados.

O parâmetro “index” são as colunas que quero agrupar.

O parâmetro “aggfunc” uso para definir a função de agregação, no meu caso fiz a contagem dos dados, mas é possível fazer soma, calcular a média entre outras operações.

E por fim, o último parâmetro “margins” definido como “true” para imprimir o total de registros na última linha.

Crosstab, Wtf??

Na tradução livre essa funcionalidade seria chamada Tabulação Cruzada. Dominando o Pandas

Esse recurso é bem interessante, principalmente quando temos uma variável resposta ou classe.

Basicamente o que essa funcionalidade faz é cruzar os valores das variáveis.

Veja como o Pandas implementa:

Queremos cruzar as colunas ‘bedrooms’ e ‘condition’ veja:

crosstab Dominando o Pandas

O código acima é bem simples, apenas passei as colunas ‘bedrooms’ e ‘condition’ como parâmetros para o método crosstab()

A coluna ‘condition’ significa um índice entre 1 a 5 da condição do imóvel.

Com o cruzamento dessas colunas, podemos ver por exemplo, qual a distribuição dos imóveis por número de quartos (bedrooms) com relação suas condições (condition).

Analisando a tabela acima vemos que o maior número de imóveis na condição 5 são os imóveis que possuem 3 quartos.

Simples e útil hein?

Agora vamos visualizar esses dados em um gráfico:

crosstab_pandas Dominando o Pandas

Pronto! Agora ficou bem mais elegante 🙂

O código acima é bem simples, para simplificar coloquei dentro do objeto ‘table’ a tabulação cruzada.

Em seguida, chamei o método plot passando o parâmetro “kind” com o valor ‘bar’ para informar que é um gráfico de barras.

O parâmetro ‘width’ define a largura das barras, o parâmetro ‘color’ recebe uma lista com as legendas e cores dos valores do eixo x (barras).

Em seguida usei o parâmetro ‘title’ para definir um título superior para o gráfico e por fim o parâmetro ‘grid’ igual a False para remover as linhas do fundo do gráfico.

Coloque o seu e-mail abaixo para receber gratuitamente as atualizações do blog!

Trabalhando com Excel

pandas-excel Dominando o Pandas

Não poderíamos deixar de falar do nosso queridíssimo Excel.

Mas o que isso tem haver com Pandas ?

O fato é que o Pandas interage muito bem com esse cara e isso para nós é ótimo, concorda?

Veja o quanto isso pode ser interessante, existem muitas organizações que trabalham ativamente com Excel, então não se assuste se um dia ter que importar dados das planilhas mágicas 🙂

Chega de conversinha, vamos ao que importa.

Como ler uma carregar uma planilha do Excel ? simples, use o método read_excel().

Esse método permite ler uma planilha do disco, dessa forma criamos um Dataframe do pandas, veja:

Se você quiser fazer download da planilha que usei aqui está.

O método read_excel recebe no primeiro parâmetro o nome do arquivo, o parâmetro “sheetname” informo que quero carregar a primeira aba da planilha. Doinando o Pandas

O parâmetro header recebe o número da linha na qual será o cabeçalho da planilha, ou seja, aqui informamos em qual linha o pandas deve encontrar nossas colunas.

Como na primeira linha da planilha temos um título, disse ao pandas que o cabeçalho está na segunda linha, linha 1, pois, o número de linhas inicia com 0.

Veja a planilha:

planilha_pandas Dominando o Pandas

Vejamos o dataframe gerado:

dataframe_excel Dominando o Pandas

O pandas carregou a planilha corretamente, apenas a linha 0 após o cabeçalho está vazia.

Isso aconteceu pois, as linhas do cabeçalho são duplas (estão mescladas).

Essa é uma planilha simples, mas já dá pra mostrar o poder desse método.

Indexando o Dataset

Outro parâmetro interessante é o index_col().

Com esse parâmetro podemos informar qual a coluna que será usada para indexar o Dataframe, veja um exemplo:

Vou indexar o Dataframe pela coluna “Estado Atual”, assim posso ordenar os resultados pelo estado atual de cada tarefa:

dataframe_indexcol Dominando o Pandas

O parâmetro index_col recebe o número da coluna que queremos indexar, nesse caso quero a coluna “Estado Atual” na posição 3 (as posições das colunas iniciam com 0).

Com o Dataframe indexado pela coluna “Estado Atual” vou ordená-lo:

dataframe_excel_sort_index Dominando o Pandas

 

Gerando planilhas

Além de ler uma planilha do Excel o Pandas tem o método to_excel() responsável por gerar um arquivo do tipo xlsx. Dominando o Pandas

Vamos gerar um arquivo a partir do Dataframe que já estávamos trabalhando.

Vou selecionar algumas colunas para ficar mais simples a visualização e gerar uma planilha menor, veja.

Dataframe_to_excel Dominando o Pandas

Ok, agora é só chamar o método to_excel para escrever para o disco o arquivo:

Veja uma imagem do arquivo gerado:

planilha_gerada_to_excel Dominando o Pandas

Como não passei a localização do arquivo, o pandas gerou no diretório padrão onde se encontra os notebooks.

Pronto a planilha foi criada com sucesso 🙂

Consegue perceber o poder dessa funcionalidade?

Sem dúvidas são recursos de extrema importância e que nos da muita produtividade em nossos projetos de Data Science.

Conclusão

Neste artigo vimos como aplicar funcionalidades interessantes do Pandas em uma base de dados real.

Além disso, vimos como extrair insights interessantes dos dados.

Conhecer bem essa biblioteca e saber aplicar seus recursos pode ser um diferencial em projetos de Data Science. Dominando o Pandas Dominando o Pandas

Se você gostou desse artigo compartilhe com seus amigos e assine nossa lista de e-mail para ficar sempre atualizado sobre novas publicações.

Deixe seu comentário e nos conte o que achou. 😉

Um abraço!

Coloque o seu e-mail abaixo para receber gratuitamente as atualizações do blog!

 

  • robson ts

    Só uma dúvida:
    Quando você executa a pivot_table de floor e waterfront, como seria possível ter valores “quebrados” de andares(floors) como 1.5, 2.5…?

    • Rodrigo Santana Ferreira

      Olá Robson tudo bem?

      Esses valores são valores que já contem na base, são valores da própria coluna ‘floors’. Pelo que andei pesquisando é algo os valores quebrados também são usados para quantificar o número de andares de um imóvel nos EUA.
      Na documentação da base tem apenas a descrição: “Total floors (levels) in house”. Você pode consultar aqui: https://www.kaggle.com/harlfoxem/house-price-prediction-part-2/data

      Obrigado pelo comentário, um abraço.