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

Para fazer Data Science com Python o Pandas talvez seja uma biblioteca obrigatória 🙂 (eu realmente gosto dessa biblioteca).

Já falamos sobre o Pandas aqui neste blog várias vezes, mas não dedicamos nenhum artigo todo a essa lib.

Neste vamos abordar alguns recursos bem interessantes.

O Pandas é um biblioteca open source amplamente utilizada na comunidade acadêmica.

Esta se tornou extremamente útil pelo seu desempenho e pela sua capacidade de simplificar tarefas complicadas de manipulação de dados (complexo isso hein?)

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 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

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

Essa base de dados é uma base de informações 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 nesse artigo.

Base de dados : hc_house_data

Scripts: Scripts Artigo (Parte1)

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

Mão na massa!

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

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

Pronto!

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

O segundo passo é carregar o dataset em memória. O pandas faz isso de forma muito eficiente, e como esta base está no formato csv basta usar o método read_csv(), veja:

Com o comando acima, mandamos carregar o conteúdo do arquivo para a variável dataset passando o caminho do arquivo e dizendo qual é o separador(sep=’,’) utilizado entre as colunas, que nesse caso é a vírgula.

A variável dataset agora se tornou um dataframe. 

O Dataframe é uma estrutura de dados com duas dimensões onde linhas podem ter colunas de tipos diferentes. Veja o tipo da variável:

Os dataframes são objetos extremamentes flexíveis, podemos armazenar listas, vetores e até outros dataframes.

Para ver se a base de dados foi carregada corretamente, é interessante imprimir algumas linhas, o método head() nos permite isso, veja:

pandas head() 01

Por padrão este exibe as colunas e as 5 primeiras linhas do dataset, caso queira imprimir mais linhas ou menos passe o número como parâmetro.

Vimos que a base foi lida corretamente, as colunas estão destacadas em negrito e as linhas em cor normal.

Se quisermos imprimir todas colunas do nosso dataset, também é fácil, veja:

E se quisermos saber quantas linhas tem a base de dados? Use o método count(), veja:

Esse método exibe a quantidade de linhas da base e de cada coluna, é bem útil.

Para fazer Data Science muitas vezes precisamos de informações estatísticas da base de dados. Informações estas como: desvio padrão, média, valor mínimo e máximo de colunas, entre outras.

Com o pandas isso é fácil de conseguir com o método describe(), veja:

pandas describe()

Veja quanta informação de forma rápida e fácil 🙂

Vamos fazer algumas consultas em nosso dataset.

Consultando o Dataset

Como já visto, esse dataset contém informações de imóveis dos EUA da cidade de Seattle.

Temos 19 colunas, entre elas temos: o preço do imóvel(price), a quantidade de quartos(bedrooms), a quantidade de banheiros(bathrooms), se é beira-mar(waterfront), quantidade de andares(floors), a condição média(condition) entre outras.

Se quisermos saber a quantidade de imóveis por tamanho de quartos, o comando abaixo nos mostra isso:

Perceba que o método value_counts() agrupa as informações e faz a soma por linhas do dataset.

E se quisermos imprimir somente os imóveis que tem 3 quartos ?

pandas loc_01

Para consultar os dados baseado nas condições acima, usei o método loc().

Esse método é usado para visualizar informações do dataset, este recebe uma lista por parâmetro para consulta. Isso é similar ao operador “where” da linguagem SQL

E se quisermos imprimir somente os imóveis que tem 3 quartos e com o número de banheiros maior que 2 ?

pandas loc_02

Bastou apenas adicionar o operador & e colocar as condições desejadas entre parênteses.

Podemos consultas os dados de diversas formas, vejamos agora como ordenar o retorno de uma query

O comando acima utiliza o método sort_values() para ordenar a exibição do dataset pela coluna ‘price’ em ordem decrescente, ou seja, do maior para o menor.

Veja como é fácil e como o pandas é rápido.

Agora se quisermos contar a quantidade de imóveis que tem 4 quartos?

Basta filtrar pela coluna ‘bedrooms’ e utilizar o método count()

Alterando um dataset

É bem comum em projetos de Data Science ter a necessidade de fazer processamento dos dados.

Processamento estes tais como, remover colunas de um dataset, adicionar colunas, fazer cálculos etc.

Imagine que precisamos adicionar uma coluna que seria equivalente ao tamanho de um imóvel em metros quadrados.

Para exemplificar, vou criar uma coluna chamada “size”, esta será o resultado da multiplicação do número de quartos(bedrooms) por 20.

Como podemos fazer isso?

Pronto, nossa coluna “size” foi criada, veja:

pandas coluna_size_01

Outro recurso interessante do pandas é o método apply(). Este é um método permite que passamos uma função que deve ser aplicada em todas as linhas ou colunas de um dataframe.

Vejamos a um exemplo..

Imagine que quero criar uma outra coluna no meu dataframe, nesta coluna quero categorizar os imóveis entre Big(Grande), Medium(Médio) e Small(Pequeno)

Para fazer isso vou criar uma função simples que testa se o tamanho for maior ou igual a 40 este imóvel é pequeno, se for maior ou igual a 60 este é médio, ou se este é maior ou igual a 80 é grande.

Criando a função ‘categoriza’:

Ok, com a função criada, basta passar os dados para a função usando o método apply(), veja:

Pronto, a coluna “cat_size” foi criada a partir da aplicação da função “categoriza” a cada linha da coluna “size”

Veja os valores da coluna nova coluna “cat_size”:

pandas coluna_cat_size_01

Para ver a distribuição dos valores da coluna use o método value_counts(), veja:

pandas distribuição_cat_size

 

Removendo Dados

Caso queira remover uma coluna, use o método drop().

Esse método usamos para apagar colunas ou linhas de um dataset, veja:

Apagando a coluna recem criada “cat_size”:

No comando acima, usamos o parâmetro ‘axis=1’ que significa que queremos apagar uma coluna e não uma linha.

O parâmetro ‘inplace’ é usado para persistir a alteração na variável dataset em memória, ou seja, sem ele por padrão, a alteração não seria efetivada no objeto dataset.

Se quisermos apagar linhas é simples, basta passar por parâmetro para o método drop a condição, veja:

No exemplo acima, removemos as linhas que tem a condição de número de quartos igual a 0, ou seja, imóveis sem quartos.

A diferença aqui é o método “index”, esse método retorna a posição das linhas que o dataframe (dataset.bedrooms===0) retorna. O método drop utiliza essas posições para remover as linhas.

Se quisermos apagar os imóveis que tem mais de 30 quartos é só mudar o operador, veja:

 

Missing Values

pandas missing_values_capa

É muito comum pra quem trabalha com bases de dados, encontrar valores nulos ou faltantes.

Isso pode acontecer por diversas razões como erro em coleta de dados, dados exportados com erros etc.

Como lidar com esses problemas?

O pandas possui funções interessantes para lidar com valores nulos ou faltantes em bases de dados.

O Pandas nos fornece o método isnull() que faz uma verificação em todas as linhas e colunas do dataset em busca de valores faltantes ou nulos. Veja:

pandas isnull_01

Adicionei o método sum pois, este nos retorna a quantidade valores nulos ou faltantes por colunas.

Veja que temos alguns dados faltantes, 4 na coluna “bedrooms” e 1 na coluna “floors”. Como resolver isso?

O pandas te dá algumas formas de resolver isso, uma delas é remover todas as linhas onde tem colunas com valores faltantes.

Essa alternativa pode ser ruim se tivermos muitas linhas faltantes, pois, removê-las iria talvez afetar muito o dataset. Veja como fazer isso:

Ao usar o método dropna() o pandas remove todas as linhas onde tem colunas com valores faltantes, como explicado acima. O parâmetro inplace=True é para as modificações serem persistidas em memória.

Execute novamente o comando para checar os valores faltantes e veja que as linhas foram removidas

pandas isnull()

É possível também remover somente linhas que estejam com valores faltantes em todas as colunas, veja como fazer isso:

Outra recurso seria preencher tais valores faltantes com média das colunas, isso talvez fosse menos radical e afetasse menos dataset em casos onde temos poucos valores faltantes. Veja um exemplo:

No comando acima preenchemos o valor faltante da coluna “floors” com a média dos seus valores. Rode o comando com o método isnull() e veja que agora a coluna floors ficou 0

Outra alternativa é preencher os valores faltantes com uma constante, veja esse exemplo:

O comando acima, preenche os valores faltantes da coluna “bedrooms” com o valor 1.

Visualização de Dados

pandas Visualizacao_de_dados

O pandas utiliza o matplotlib para permitir a plotagem de gráficos usando Dataframes e Séries.

Esse é mais uma jogada sensacional dessa lib 🙂

Veja como podemos plotar gráficos simples que já nos ajudam na visualização dos nossos dados.

pandas matplotlib_price_01

No comando acima plotei a apenas a coluna preço e o pandas colocou no eixo x a quantidade de linhas do dataframe.

Isso aconteceu pois, o dataframe está indexado pela seu número de linhas.

Simples né? Mas já mostra alguns insights interessantes, podemos ver que a maioria dos imóveis ficam na faixa de 100 a 250 mil.

Obs: o comando %matplotlib notebook é usado para permitir que o gráfico seja plotado na célula do notebook, pois, nesse caso estamos usando o Jupyter notebook 🙂

Veja mais um exemplo abaixo:

pandas matplotlib 02

O comando acima plotei no eixo x o número de quartos (bedrooms) e no eixo y o preço dos imóveis(price), no parâmetro “kind” informo que quero um gráfico do tipo scatter.

Por fim informo um título para o gráfico (title) e defino a cor com o parâmetro color = r (red)

Vejamos outro exemplo:

pandas matplotlib 03

O gráfico acima é quase idêntico ao anterior. A diferença aqui são as colunas, onde colocamos no eixo x o número de banheiros (bathrooms) e no eixo y o preço dos imóveis (price)

Bem interessante né?

Com uma linha de código podemos plotar um gráfico simples que mostra uma informação útil do nosso dataset.

Conclusão

Nesse artigo vimos o poder do Pandas.

Vimos que a biblioteca é bem poderosa e que pode nos ajudar muito em projetos de Data Science.

Se você gostou desse artigo compartilhe com seus amigos para que mais pessoas possam aprender e trabalhar com o pandas.

Deixe seu comentário abaixo e nos conte o que achou deste artigo.

Forte Abraço!

  • Gustavo Vzfo

    Parabéns Rodrigo pela iniciativa estou aprendendo muito com seus artigos.

    acho que tem uma errata na parte que você explica sobre o método .apply foi definido uma função como categoriza(s) e foi colocado assim:
    dataset[‘cat_size’] = dataset[‘size’].apply(set_size) o correto seria assim?

    dataset[‘cat_size’] = dataset[‘size’].apply(categoreiza)

    • Rodrigo Santana Ferreira

      Grande Gustavo!

      Que bom que você está gostando do blog 🙂

      Realmente teve uma falha minha nessa linha, corrigir agora 😉

      Obrigado pela observação e comentário, um abraço!