Séries temporais - processamento e visualização de dados

A série temporal é uma sequência de observações indexadas em intervalos de tempo equidistantes. Portanto, a ordem e a continuidade devem ser mantidas em qualquer série temporal.

O conjunto de dados que usaremos é uma série temporal multivariada com dados horários de aproximadamente um ano, para a qualidade do ar em uma cidade italiana significativamente poluída. O conjunto de dados pode ser baixado do link fornecido abaixo -https://archive.ics.uci.edu/ml/datasets/air+quality.

É necessário ter certeza de que -

  • A série temporal é igualmente espaçada e

  • Não há valores redundantes ou lacunas.

Caso a série temporal não seja contínua, podemos aumentar ou diminuir a resolução.

Mostrando df.head ()

Em [122]:

import pandas

Em [123]:

df = pandas.read_csv("AirQualityUCI.csv", sep = ";", decimal = ",")
df = df.iloc[ : , 0:14]

Em [124]:

len(df)

Fora [124]:

9471

Em [125]:

df.head()

Fora [125]:

Para pré-processar a série temporal, certificamo-nos de que não há valores NaN (NULL) no conjunto de dados; se houver, podemos substituí-los por 0 ou valores médios ou precedentes ou sucessivos. Substituir é uma escolha preferida em vez de descartar para que a continuidade da série temporal seja mantida. No entanto, em nosso conjunto de dados, os últimos valores parecem ser NULL e, portanto, a eliminação não afetará a continuidade.

Eliminando NaN (não é um número)

Em [126]:

df.isna().sum()
Out[126]:
Date             114
Time             114
CO(GT)           114
PT08.S1(CO)      114
NMHC(GT)         114
C6H6(GT)         114
PT08.S2(NMHC)    114
NOx(GT)          114
PT08.S3(NOx)     114
NO2(GT)          114
PT08.S4(NO2)     114
PT08.S5(O3)      114
T                114
RH               114
dtype: int64

Em [127]:

df = df[df['Date'].notnull()]

Em [128]:

df.isna().sum()

Fora [128]:

Date             0
Time             0
CO(GT)           0
PT08.S1(CO)      0
NMHC(GT)         0
C6H6(GT)         0
PT08.S2(NMHC)    0
NOx(GT)          0
PT08.S3(NOx)     0
NO2(GT)          0
PT08.S4(NO2)     0
PT08.S5(O3)      0
T                0
RH               0
dtype: int64

As séries temporais geralmente são plotadas como gráficos de linha em relação ao tempo. Para isso, iremos combinar a coluna de data e hora e convertê-la em um objeto datetime a partir de strings. Isso pode ser feito usando a biblioteca datetime.

Convertendo em objeto datetime

Em [129]:

df['DateTime'] = (df.Date) + ' ' + (df.Time)
print (type(df.DateTime[0]))

<class 'str'>

Em [130]:

import datetime

df.DateTime = df.DateTime.apply(lambda x: datetime.datetime.strptime(x, '%d/%m/%Y %H.%M.%S'))
print (type(df.DateTime[0]))

<classe 'pandas._libs.tslibs.timestamps.Timestamp'>

Vamos ver como algumas variáveis, como a temperatura, mudam com a mudança no tempo.

Mostrando plotagens

Em [131]:

df.index = df.DateTime

Em [132]:

import matplotlib.pyplot as plt
plt.plot(df['T'])

Fora [132]:

[<matplotlib.lines.Line2D at 0x1eaad67f780>]

Em [208]:

plt.plot(df['C6H6(GT)'])

Fora [208]:

[<matplotlib.lines.Line2D at 0x1eaaeedff28>]

Box-plots são outro tipo de gráfico útil que permite condensar muitas informações sobre um conjunto de dados em um único gráfico. Mostra a média, 25% e 75% do quartil e outliers de uma ou múltiplas variáveis. No caso em que o número de outliers é pequeno e muito distante da média, podemos eliminar os outliers configurando-os com o valor médio ou o valor do quartil de 75%.

Mostrando Boxplots

Em [134]:

plt.boxplot(df[['T','C6H6(GT)']].values)

Fora [134]:

{'whiskers': [<matplotlib.lines.Line2D at 0x1eaac16de80>,
   <matplotlib.lines.Line2D at 0x1eaac16d908>,
   <matplotlib.lines.Line2D at 0x1eaac177a58>,
   <matplotlib.lines.Line2D at 0x1eaac177cf8>],
   'caps': [<matplotlib.lines.Line2D at 0x1eaac16d2b0>,
   <matplotlib.lines.Line2D at 0x1eaac16d588>,
   <matplotlib.lines.Line2D at 0x1eaac1a69e8>,
   <matplotlib.lines.Line2D at 0x1eaac1a64a8>],
   'boxes': [<matplotlib.lines.Line2D at 0x1eaac16dc50>,
   <matplotlib.lines.Line2D at 0x1eaac1779b0>],
   'medians': [<matplotlib.lines.Line2D at 0x1eaac16d4a8>,
   <matplotlib.lines.Line2D at 0x1eaac1a6c50>],
   'fliers': [<matplotlib.lines.Line2D at 0x1eaac177dd8>,
   <matplotlib.lines.Line2D at 0x1eaac1a6c18>],'means': []
}