Учебники

Временной ряд — обработка данных и визуализация

Временной ряд — это последовательность наблюдений, проиндексированных в равных интервалах времени. Следовательно, порядок и непрерывность должны поддерживаться в любом временном ряду.

Набор данных, который мы будем использовать, представляет собой многовариантный временной ряд, содержащий почасовые данные в течение приблизительно одного года, для качества воздуха в сильно загрязненном итальянском городе. Набор данных можно скачать по приведенной ниже ссылкеhttps://archive.ics.uci.edu/ml/datasets/air+quality .

Необходимо убедиться, что —

  • Временные ряды расположены на одинаковом расстоянии, и

  • В нем нет избыточных значений или пробелов.

Временные ряды расположены на одинаковом расстоянии, и

В нем нет избыточных значений или пробелов.

Если временной ряд не является непрерывным, мы можем увеличить или уменьшить его.

Отображение df.head ()

В [122]:

import pandas

В [123]:

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

В [124]:

len(df)

Из [124]:

9471

В [125]:

df.head()

Из [125]:

Фрагмент кода

Для предварительной обработки временного ряда мы должны убедиться, что в наборе данных нет значений NaN (NULL); если они есть, мы можем заменить их либо на 0, либо на среднее, либо на предшествующее или последующее значение. Замена является предпочтительным выбором по сравнению с отбрасыванием, чтобы сохранить непрерывность временных рядов. Однако в нашем наборе данных последние несколько значений кажутся NULL и, следовательно, отбрасывание не повлияет на непрерывность.

Отбрасывание NaN (не число)

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

В [127]:

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

В [128]:

df.isna().sum()

Из [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

Временные ряды обычно изображаются в виде линейных графиков в зависимости от времени. Для этого мы теперь скомбинируем столбец даты и времени и преобразуем его в объект datetime из строк. Это может быть выполнено с использованием библиотеки datetime.

Преобразование в объект даты и времени

В [129]:

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

<класс ‘str’>

В [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]))

<class ‘pandas._libs.tslibs.timestamps.Timestamp’>

Давайте посмотрим, как некоторые переменные, такие как температура, меняются во времени.

Отображение графиков

В [131]:

df.index = df.DateTime

В [132]:

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

Из [132]:

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

Фрагмент кода 4

В [208]:

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

Из [208]:

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

Боксовые диаграммы — это еще один полезный вид графиков, который позволяет вам собирать много информации о наборе данных в один график. Он показывает среднее значение, 25% и 75% квартиль и выбросы одной или нескольких переменных. В случае, когда число выбросов мало и очень далеко от среднего, мы можем устранить выбросы, установив для них среднее значение или значение квартиля 75%.

Показ Boxplots

В [134]:

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

Из [134]: