Временные ряды - обработка и визуализация данных
Временной ряд - это последовательность наблюдений, проиндексированных через равные интервалы времени. Следовательно, во всех временных рядах следует сохранять порядок и непрерывность.
Набор данных, который мы будем использовать, представляет собой многомерный временной ряд, содержащий почасовые данные примерно за один год для качества воздуха в значительно загрязненном итальянском городе. Набор данных можно скачать по приведенной ниже ссылке -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 (Not-a-Number)
В [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.
Преобразование в объект datetime
В [129]:
df['DateTime'] = (df.Date) + ' ' + (df.Time)
print (type(df.DateTime[0])) 
    <class '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])) 
    <класс '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% -ное значение квартиля.
Отображение коробчатых диаграмм
В [134]:
plt.boxplot(df[['T','C6H6(GT)']].values) 
    Из [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': []
}