Aula 8 - Análise e visualização de dados com Python - biblioteca pandas (Parte 4)

Aula 8 - Análise e visualização de dados com Python - biblioteca pandas (Parte 4)

As primeiras linhas de código para plotar gráficos e visualizar seus dados

Nas aulas anteriores, avançamos na parte mais prática da biblioteca pandas, observando os recursos referentes à importação e manipulação de dados, além de algumas análises iniciais. Desta vez, voltemos o olhar a um aspecto distinto do pandas e do Python que também é muito importante na hora de analisar e, principalmente, apresentar os dados que foram coletados. Essa aula, portanto, é uma introdução básica à visualização de dados em pandas.

O que veremos aqui:

  • Como a visualização de dados é encarada no pandas;
  • Principais linhas de código para você começar a criar seus próprios gráficos em Python usando o pandas.

Então, como podemos visualizar os dados com o pandas?

A biblioteca pandas baseia sua parte de visualização usando uma API de outra biblioteca, o Matplotlib. Por isso mesmo, quando planejamos plotar algum gráfico em um relatório ou notebook usando o pandas, podemos utilizar recursos do Matplotlib para fazer isso.

import pandas as pd #Importa o pandas
import matplotlib.pyplot as plt #Importa a API do Matplotlib
%matplotlib inline #Define que os resultados/plots obtidos com o Matplotlib sejam apresentados e armazenados junto do notebook com o qual estamos trabalhando

A API do Matplotlib, nesse caso, é a pyplot: esta é uma coleção de funções que permitem fazer gráficos simples, mas apresentáveis, e que já ajudam muito na visualização dos dados que importamos e manipulamos com o pandas. Você pode explorar mais as possibilidades de plotagem de gráficos com o pandas que serão apresentadas aqui dando uma olhada no Guia do Usuário do pandas, além do Cookbook e o 10 minutes to pandas, projetos do próprio site do pandas para compreender melhor a bibiloteca.

Sem mais delongas, vamos à apresentação dos tipos de gráficos que podem ser produzidos usando as bibliotecas pandas e Matpotlib.

O básico do básico: função plot()

Essa é a função que servirá de base para fazer as plotagens de gráficos ao usarmos o pandas (e o Matplotlib) em nossos projetos. Por padrão, a função plot() tem como output um gráfico de linhas; é interessante usar esse gráfico ao lidarmos, por exemplo, com conjuntos de dados que possuam amostragens ocorrentes em um período de tempo contínuo.

Para lidarmos com a parte prática da aula, utilizaremos o mesmo conjunto de dados com o qual estamos trabalhando nas últimas semanas (surveys.csv). A partir dele, faremos algumas alterações conforme necessário.

df = pd.read_csv("https://github.com/mhalmenschlager/python-biologia/raw/main/archives/surveys.csv")
df.head()

image-20210915181223246.png

Gráfico de linha

Como foi já referenciado no título dessa seção, começemos com o básico do básico, usando a função plot() puramente. O retorno será de um gráfico de linha, considerando linhas e colunas da tabela que importamos, conforme visto em df.head():

df.plot()

image-20210915181449017.png

Mesmo que o gráfico não faça o menor sentido nesse momento, já podemos perceber aqui que tipo de resultado teremos quando usarmos a função plot(). Essa função também nos dá possibilidades de plotar gráficos com variáveis específicas, de outros tipos, até mesmo com diferentes títulos e legendas; nesses casos, é necessário apenas adicionar alguns outros argumentos a essa linha, indicando quais variáveis serão consideradas para fazer o gráfico, que tipo de gráfico queremos, e assim por diante. Esses argumentos são colocados dentro dos parênteses da função plot(), conforme o exemplo abaixo:

df.plot(x='year', y='record_id') #Especifica os valores dos eixos 'x' e 'y'

Neste caso, queremos especificar que tipos de variáveis queremos que apareçam nos eixos x e y; usemos as variáveis de ano e ID de registro como exemplo. O resultado dessa linha de código possui um pouco mais de sentido pois, a partir do gráfico, podemos avaliar a evolução das quantidades de amostragem conforme os anos considerados no dataframe.

image-20210915183741265.png

Outro exemplo que podemos utilizar para explorar o gráfico de linhas, e que também envolve os anos de amostragem, tem a ver com agrupamentos. Nessa situação, veremos a contagem total de amostras feitas por cada ano, e a partir disso plotar um gráfico para acompanhar visualmente a evolução dessa amostragem. Para tanto, utilizaremos as funções groupbye count na mesma linha de código antes de plotarmos o gráfico, para organização do frame que será a base do gráfico.

year = df.groupby('year')['record_id'].count() #Contagem de amostragens, com base em seus IDs, por ano
year.head() #Cinco primeiras entradas do frame

image-20210915200426972.png

A partir disso, usaremos o objeto criado year para plotar um gráfico de linha:

year.plot() #Gráfico de linha do objeto 'year'

image-20210915200811721.png

Uma dica: Por n+1 razões, haverá momentos em que a figura parecerá pequena para a quantidade de informação que está dentro dela. Quando ocorrer isso, podemos sempre lançar mão do argumento figsize para ajustar o tamanho da figura até que ela fique em um tamanho que se possa considerar razoável.

year.plot(figsize=(17,3)) #Gráfico de linha do objeto 'year', com tamanho de figura (17,3)

image-20210915200935736.png

Avançando na função plot(): outros tipos de gráficos disponíveis

Como dito anteriormente, a função plot(), além dos gráficos de linha, possibilita ao usuário plotar uma série de gráficos. A documentação do pandas expõe, em detalhes, as capacidades de visualização de dados do pandas; aqui, serão expostos alguns baseados no dataframe que estamos utilizando como exemplo.

Gráfico de barras

Enquanto um gráfico de linhas é mais utilizado para acompanhar a evolução de uma amostragem usando uma série contínua, geralmente temporal, o gráfico de barras é largamente recomendado para avaliar as amostragens de um conjunto de dados categóricos. Usando o df ainda como exemplo, em vez de avaliarmos as amostragens de acordo com os anos de coleta, podemos observar a quantidade de coletas feitas de acordo com as espécies consideradas. Em vez de utilizarmos a variável year, dessa vez nos valeremos da variável species_id, e a partir da quantidade de IDs feitos, poderemos observar as diferenças entre espécies.

count = df.groupby('species_id')['record_id'].count() #Contagem dos IDs das amostragens de acordo com os IDs de espécies
count.head() #As cinco primeiras entradas do objeto 'count'

image-20210916110116609.png

count.plot(kind='bar', figsize=(18,3)) #Plotagem de um gráfico de barras do objeto 'count', com tamanho (18, 3)

image-20210916110245761.png

O resultado do plot é a amostragem de espécies em ordem alfabética. Aqui, já vemos a representatividade de algumas espécies, como 'DM', 'DO', 'OT', e 'PP' no número total de coletas. Se quisermos organizar os dados de forma ordenada, do maior para o menor, por exemplo, antes de usarmos a função plot() é preciso apenas usar a função sorting.values(). Assim, criaremos um novo objeto, count2, adicionando esse argumento.

count2 = df.groupby('species_id')['record_id'].count().sort_values(ascending = False) #Contagem dos IDs das amostragens de acordo com os IDs de espécies, de forma ordenada. O (ascending = False) indica que a organização será feita de forma decrescente, do maior para o menor.
count2.head() #As cinco primeiras entradas do objeto 'count2'

image-20210916123737876.png

count2.plot(kind='bar', figsize=(18,3)); #Plotagem de um gráfico de barras do objeto 'count2', com tamanho (18, 3)

image-20210916144219939.png

Aqui já vemos um gráfico mais bem organizado, com uma ordenação decrescente da amostragem das espécies. Lembre-se que cada ID de espécies é associado com o nome desta; você pode ver isso com mais detalhes nas aulas anteriores, com o dicionário de variáveis, bem como no repositório da série no GitHub.

Gráfico de pizza

O gráfico de pizza é, sem dúvidas, um dos mais utilizados por qualquer profissional, independente da área. E, infelizmente, é um dos gráficos mais mal utilizados; embora a proposta seja a exibição de dados de uma forma fácil de ler, muitas vezes os resultados são horrendos (em uma outra postagem envolvendo visualização de dados, escreverei mais sobre).

Esse gráfico é muito usado para apresentar proporções entre os dados amostrados, mais frequentemente na forma de porcentagens. Plotá-lo com o pandas também é muito simples, ainda usando a função plot(). Comecemos separando os dados que utilizaremos aqui: observaremos a contagem total de três espécies, 'DM', 'DO', e PP, utilizando a função count(), e separando-as por um groupby().

dmXdoXpp = df.groupby('species_id')['record_id'].count()[['DO', 'DM', 'PP']] #Contagem da amostragem das espécies 'DM', 'DO', e 'PP', considerando seus IDs de registro
dmXdoXpp #Chamamento do objeto 'dmXdoXpp'

image-20210916145641879.png

dmXdoXpp.plot(kind='pie') #Plotagem de um gráfico de pizza do objeto 'dmXdoXpp'

image-20210916182302293.png

Gráfico de caixa (boxplot)

Gráficos de caixa, ou boxplots, são largamente utilizados para avaliar a variação de um conjunto de dados através de um sistema de máximos, mínimos, e quartis ou percentis. São ótimos para ver como se comportam as amostragens de um determinado grupo ou variável, propiciando inclusive a verificação de dados que são muito discrepantes, os chamados outliers. Esse tipo de plotagem é muito conhecido por estar presente em Análises Exploratórias de Dados (AEDs), que são as primeiras análises a serem feitas após a coleta de dados. No caso do boxplot, destacamos aqui uma função levemente distinta do simples plot()para fazê-lo, embora seja possível ir por esse caminho também.

Para mostrar como se faz um boxplot com o pandas, criaremos um novo objeto, MxF, uma vez que avaliaremos a variação do comprimento do retropé conforme o sexo de cada animal amostrado. Para isso, faremos uma nova tabela, com a função pivot_table():

MxF = df.pivot_table('hindfoot_length', 'record_id', 'sex') #Tabela com a variação do comprimento do retropé de acordo com o sexo das amostras consideradas no conjunto de dados
MxF

image-20210916183825589.png

Para fazer a plotagem do gráfico de caixas, usaremos aqui a função boxplot() a partir do novo objeto:

MxF.boxplot(); #Gráfico de caixa do objeto 'MxF'

image-20210916184010123.png

Neste gráfico, já podemos ter uma ideia da variação do comprimento em centímetros do retropé de cada amostragem considerada, com a separação por sexo. Repare que, quando chamada a função boxplot(), o gráfico aparece com um gradeamento. Há uma linha de código alternativa para criar um gráfico de caixas que usa a função plot(), só que essa sem gradeamento:

MxF.plot(kind = 'box') #Gráfico de caixa do objeto 'MxF'

image-20210916184320434.png

Outros tipos de gráfico suportados pelo pandas

Além desses, há outros tipos de gráfico (área, scatter plot, etc.) que são suportados pela biblioteca pandas, que não são mencionados aqui; isso permite que o usuário possa fazer gráficos apresentáveis para seus relatórios, apresentações ou outras exposições usando uma só biblioteca. Para conhecer e praticar mais exaustivamente, é recomendada uma leitura atenta à documentação do pandas, onde se expõe, com exemplos práticos, todas as possibilidades que a biblioteca oferece para visualização de dados.

Outras bibliotecas, como o Matplotlib e o Seaborn, fazem parte do ecossistema do pandas e são especializados em visualização de dados. Em outro momento da série, esses recursos serão apresentados com mais detalhes, e haverá uma discussão mais extensa sobre a visualização de dados em Python, e como você pode utilizar essas ferramentas da melhor forma possível com seus dados.


Por aqui, encerramos uma outra aula de apresentação da biblioteca pandas. Com o que já foi exposto aqui, você já tem conhecimento e referências para começar a fazer suas próprias análises de dados. Não esqueça de fazer duas coisas importantes: ler de forma exaustiva as documentações e referências expostas nas aulas, e praticar muito, com o dataset de exemplo e tantos outros. Com isso, você aprenderá a usar a linguagem Python para alçar posições de destaque na sua área profissional e/ou acadêmica, seja na Ecologia, em outras áreas da Biologia, ou com outros projetos de seu interesse. Aproveite para deixar um feedback das aulas e, caso surjam dúvidas ou curiosidades acerca dos temas expostos por aqui, estarei sempre à disposição para auxílio ou, até mesmo, uma motivação a mais. Siga buscando conhecimento!

Um grande abraço, até a próxima aula e, sobretudo, divirta-se com os gráficos!


Para ler mais