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
eparse_dates
da funçãoread_csv
para definir a primeira (0ª) coluna como índice doDataFrame
resultante e converter as datas na coluna em objetosTimestamp
, 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étodoplot()
funciona em ambosSeries
eDataFrame
.
-
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çõesplot
. 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