Série chronologique - Traitement et visualisation des données

La série chronologique est une séquence d'observations indexées dans des intervalles de temps équidistants. Par conséquent, l'ordre et la continuité doivent être maintenus dans toute série chronologique.

L'ensemble de données que nous utiliserons est une série chronologique à variables multiples contenant des données horaires pendant environ un an, sur la qualité de l'air dans une ville italienne fortement polluée. L'ensemble de données peut être téléchargé à partir du lien ci-dessous -https://archive.ics.uci.edu/ml/datasets/air+quality.

Il est nécessaire de s'assurer que -

  • La série chronologique est également espacée et

  • Il n'y a pas de valeurs redondantes ou de lacunes.

Si la série chronologique n'est pas continue, nous pouvons la suréchantillonner ou la sous-échantillonner.

Affichage de df.head ()

Dans [122]:

import pandas

Dans [123]:

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

Dans [124]:

len(df)

Sortie [124]:

9471

Dans [125]:

df.head()

Sortie [125]:

Pour le prétraitement de la série chronologique, nous nous assurons qu'il n'y a pas de valeurs NaN (NULL) dans l'ensemble de données; s'il y en a, nous pouvons les remplacer par 0 ou moyenne ou des valeurs précédentes ou suivantes. Le remplacement est un choix préférable à l'abandon afin de maintenir la continuité de la série chronologique. Cependant, dans notre ensemble de données, les dernières valeurs semblent être NULL et, par conséquent, la suppression n'affectera pas la continuité.

Suppression de NaN (Not-a-Number)

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

Dans [127]:

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

Dans [128]:

df.isna().sum()

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

Les séries chronologiques sont généralement représentées sous forme de graphiques linéaires en fonction du temps. Pour cela, nous allons maintenant combiner la colonne date et heure et la convertir en un objet datetime à partir de chaînes. Cela peut être accompli à l'aide de la bibliothèque datetime.

Conversion en objet datetime

Dans [129]:

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

<class 'str'>

Dans [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'>

Voyons comment certaines variables comme la température changent avec le temps.

Affichage des tracés

Dans [131]:

df.index = df.DateTime

Dans [132]:

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

Sortie [132]:

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

Dans [208]:

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

Sortie [208]:

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

Les boîtes à moustaches sont un autre type de graphique utile qui vous permet de condenser de nombreuses informations sur un ensemble de données en un seul graphique. Il montre la moyenne, le quartile de 25% et 75% et les valeurs aberrantes d'une ou de plusieurs variables. Dans le cas où le nombre de valeurs aberrantes est faible et très éloigné de la moyenne, nous pouvons éliminer les valeurs aberrantes en les fixant à la valeur moyenne ou à la valeur du quartile de 75%.

Affichage des boîtes à moustaches

Dans [134]:

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

Sortie [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': []
}