Временной ряд — это последовательность наблюдений, проиндексированных в равных интервалах времени. Следовательно, порядок и непрерывность должны поддерживаться в любом временном ряду.
Набор данных, который мы будем использовать, представляет собой многовариантный временной ряд, содержащий почасовые данные в течение приблизительно одного года, для качества воздуха в сильно загрязненном итальянском городе. Набор данных можно скачать по приведенной ниже ссылке — 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>]
В [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]: