Как передискретизировать данные временных рядов в Python (с примерами)

Как передискретизировать данные временных рядов в Python (с примерами)

Повторная выборка данных временных рядов означает суммирование или агрегирование данных за новый период времени.

Мы можем использовать следующий базовый синтаксис для повторной выборки данных временных рядов в Python:

#find sum of values in column1 by month
weekly_df['column1'] = df['column1']. resample('M'). sum ()

#find mean of values in column1 by week
weekly_df['column1'] = df['column1']. resample('W').mean()

Обратите внимание, что мы можем выполнить повторную выборку данных временных рядов по различным периодам времени, в том числе:

  • С : секунды
  • мин : Минуты
  • Ч : Часы
  • Д : день
  • Вт : неделя
  • М : Месяц
  • Вопрос : Квартал
  • А : год

В следующем примере показано, как выполнить передискретизацию данных временных рядов на практике.

Пример: повторная выборка данных временных рядов в Python

Предположим, у нас есть следующий кадр данных pandas, который показывает общий объем продаж, совершаемых какой-либо компанией каждый час в течение одного года:

import pandas as pd
import numpy as np

#make this example reproducible
np.random.seed (0)

#create DataFrame with hourly index
df = pd.DataFrame(index=pd.date_range('2020-01-06', '2020-12-27', freq='h'))

#add column to show sales by hour
df['sales'] = np.random.randint (low=0, high=20, size= len(df.index ))

#view first five rows of DataFrame
df.head ()

 sales
2020-01-06 00:00:00 12
2020-01-06 01:00:00 15
2020-01-06 02:00:00 0
2020-01-06 03:00:00 3
2020-01-06 04:00:00 3

Если мы создадим линейный график для визуализации данных о продажах, он будет выглядеть так:

import matplotlib.pyplot as plt

#plot time series data
plt.plot (df.index , df.sales , linewidth= 3 ) 

Этот график трудно интерпретировать, поэтому вместо этого мы можем суммировать данные о продажах по неделям:

#create new DataFrame
weekly_df = pd.DataFrame()

#create 'sales' column that summarizes total sales by week
weekly_df['sales'] = df['sales']. resample('W'). sum ()

#view first five rows of DataFrame
weekly_df.head ()

 sales
2020-01-12 1519
2020-01-19 1589
2020-01-26 1540
2020-02-02 1562
2020-02-09 1614

Этот новый DataFrame показывает сумму продаж по неделям.

Затем мы можем создать график временных рядов, используя эти еженедельные данные:

import matplotlib.pyplot as plt

#plot weekly sales data
plt.plot (weekly_df.index , weekly_df.sales , linewidth= 3 ) 

Этот график намного легче читать, потому что мы отображаем данные о продажах только за 51 отдельную неделю, в отличие от данных о продажах за 8 545 отдельных часов в первом примере.

Примечание.В этом примере мы суммировали данные о продажах по неделям, но мы также можем суммировать данные по месяцам или кварталам, если хотим нанести еще меньше точек данных.

Дополнительные ресурсы

В следующих руководствах объясняется, как выполнять другие распространенные операции в Python:

Как построить временной ряд в Matplotlib
Как построить временной ряд в Seaborn
Как рассчитать MAPE временных рядов в Python

Замечательно! Вы успешно подписались.
Добро пожаловать обратно! Вы успешно вошли
Вы успешно подписались на кодкамп.
Срок действия вашей ссылки истек.
Ура! Проверьте свою электронную почту на наличие волшебной ссылки для входа.
Успех! Ваша платежная информация обновлена.
Ваша платежная информация не была обновлена.