segunda-feira, 5 de abril de 2021

Como criar gráficos com pandas?

In [1]: import pandas as pd

In [2]: import matplotlib.pyplot as plt
  • Dados de qualidade do ar

    Para este tutorial, são usados dados de qualidade do ar sobre o NO2, disponibilizados pela openaq e usando o pacote py-openaq. O conjunto de dados air_quality_no2.csv fornece valores de NO2 para as estações de medição FR04014, BETR801 e London Westminster em Paris, Antuérpia e Londres, respectivamente.

    O arquivo csv usado nesse post pode ser baixado aqui.

    In [3]: air_quality = pd.read_csv("data/air_quality_no2.csv", index_col=0, parse_dates=True)
    
    In [4]: air_quality.head()
    Out[4]: 
                         station_antwerp  station_paris  station_london
    datetime                                                           
    2019-05-07 02:00:00              NaN            NaN            23.0
    2019-05-07 03:00:00             50.5           25.0            19.0
    2019-05-07 04:00:00             45.0           27.7            19.0
    2019-05-07 05:00:00              NaN           50.4            16.0
    2019-05-07 06:00:00              NaN           61.9             NaN
    

    Observação

    Usamos os parâmetros index_col e parse_dates da função read_csv para definir a primeira (0ª) coluna como índice do DataFrame resultante e converter as datas na coluna em objetos Timestamp, respectivamente.

  • Quero uma verificação visual rápida dos dados.

    In [5]: air_quality.plot()
    Out[5]: <AxesSubplot:xlabel='datetime'>
    

    Com o DataFrame, o pandas cria por padrão um gráfico de linha para cada uma das colunas com dados numéricos.

  • Quero mostrar apenas as colunas da tabela de dados com os dados de Paris.

    In [6]: air_quality["station_paris"].plot()
    Out[6]: <AxesSubplot:xlabel='datetime'>
    

    Para mostrar uma coluna específica, use o método de seleção do tutorial de dados de subconjunto em combinação com método plot(). Portanto, o método plot() funciona em ambos Series e DataFrame.

  • Eu quero comparar visualmente os valores NO2 medidos em Londres versus Paris.

    In [7]: air_quality.plot.scatter(x="station_london", y="station_paris", alpha=0.5)
    Out[7]: <AxesSubplot:xlabel='station_london', ylabel='station_paris'>
    

Além do gráfico de linha padrão ao usar a função plot(), várias alternativas estão disponíveis para mostrar os dados. Vamos usar algum Python padrão para obter uma visão geral dos métodos de plot disponíveis:

In [8]: [
   ...:     method_name
   ...:     for method_name in dir(air_quality.plot)
   ...:     if not method_name.startswith("_")
   ...: ]
   ...: 
Out[8]: 
['area',
 'bar',
 'barh',
 'box',
 'density',
 'hexbin',
 'hist',
 'kde',
 'line',
 'pie',
 'scatter']

Observação

Em muitos ambientes de desenvolvimento, bem como IPython e Jupyter Notebook, use o botão TAB para obter uma visão geral dos métodos disponíveis, por exemplo air_quality.plot.+ TAB.

Uma das opções é DataFrame.plot.box(), que se refere a um boxplot. O método box é aplicável nos dados de exemplo de qualidade do ar:

In [9]: air_quality.plot.box()
Out[9]: <AxesSubplot:>
  • Eu quero cada uma das colunas em uma subtrama separada.

    In [10]: axs = air_quality.plot.area(figsize=(12, 4), subplots=True)
    

    Subplots separados para cada uma das colunas de dados são suportados pelo argumento subplots das funções plot. As opções integradas disponíveis em cada uma das funções do pandas representam que vale a pena dar uma olhada.

  • Eu quero personalizar ainda mais, estender ou salvar o enredo resultante.

    In [11]: fig, axs = plt.subplots(figsize=(12, 4))
    
    In [12]: air_quality.plot.area(ax=axs)
    Out[12]: <AxesSubplot:xlabel='datetime'>
    
    In [13]: axs.set_ylabel("NO$_2$ concentration")
    Out[13]: Text(0, 0.5, 'NO$_2$ concentration')
    
    In [14]: fig.savefig("no2_concentrations.png")
    

Cada um dos objetos de trama criados por pandas é um objeto matplotlib. Como o Matplotlib oferece muitas opções para personalizar os gráficos, tornar explícito o link entre o pandas e o Matplotlib permite todo o poder do matplotlib no gráfico. Essa estratégia é aplicada no exemplo anterior:

fig, axs = plt.subplots(figsize=(12, 4))        # Create an empty matplotlib Figure and Axes
air_quality.plot.area(ax=axs)                   # Use pandas to put the area plot on the prepared Figure/Axes
axs.set_ylabel("NO$_2$ concentration")          # Do any matplotlib customization you like
fig.savefig("no2_concentrations.png")           # Save the Figure/Axes using the existing matplotlib method.

LEMBRAR

  • Os métodos .plot.* são aplicáveis em Series e DataFrames

  • Por padrão, cada uma das colunas é plotada como um elemento diferente (linha, boxplot, ...)

  • Qualquer plotagem criada por pandas é um objeto Matplotlib.

Traduzido por Acervo Lima. O original pode ser acessado aqui.

0 comentários:

Postar um comentário