Расширьте возможности структуры данных, улучшите процесс обработки данных

Данные временного ряда представляют собой последовательность точек данных, проиндексированных во временном порядке. Наиболее распространенным примером данных временных рядов является дневная цена закрытия фондового рынка. Помимо фондового рынка, мы сталкиваемся с множеством различных данных временных рядов, например, климатические изменения во времени или доход от продаж компании. Анализ временных рядов помогает организациям понять основные причины тенденций или системных моделей с течением времени.

Сегодня мы хотим погрузиться в причудливый и мощный движок структуры данных временных рядов.

Преобразователь временных рядов

Пакет не только предоставляет функциональные возможности для обработки данных временных рядов, но и помогает нам обрабатывать многомерные данные временных рядов. Более того, подмодуль Stock_Transformer может извлекать биржевые данные и рассчитывать технические индикаторы всего за несколько строк кода.

Монтаж

pip install time-series-transform

Примечание. Убедитесь, что tensorflow и plotly установлены

Данные

В этом примере мы будем использовать данные временных рядов климата в Дели от Kaggle.

https://www.kaggle.com/datasets/sumanthvrao/daily-climate-time-series-data?resource=download

Давайте начнем

Когда мы обрабатываем данные временных рядов, нам всегда нужно уделять особое внимание временному порядку, и это непросто сделать только с помощью numpy или даже pandas. Time_Series_Transform делает задачу проще, чем когда-либо.

В комплекте два основных модуля.

  • Time_Series_Transformer: основной модуль, совместимый с определяемыми пользователем данными временных рядов.
  • Stock_Transformer: помогает нам извлекать биржевые данные и обеспечивает работу для встраивания библиотеки расчета технических индикаторов (pandas-ta).

Ядро трансформатора временных рядов

Time_Series_Transformer может помочь нам форматировать данные временных рядов, и мы можем легко манипулировать данными временных рядов.

Из набора данных мы видим, что есть 4 разных функции, и мы можем загрузить данные в наш пакет из pandas.dataFrame. timeSeriesCol будет столбцом временного индекса, а поле mainCategory позволяет нам обрабатывать многомерные данные, об этом мы поговорим позже.

ime_Series_Transformer data
data column
-----------
date
meantemp
humidity
wind_speed
meanpressure
time length: 1462
category: None


We can slice the data from the time_series_data as below
{'date': array(['2013-01-01', '2013-01-02', '2013-01-03'], dtype=object),
 'meantemp': array([10.        ,  7.4       ,  7.16666667]),
 'humidity': array([84.5, 92. , 87. ]),
 'wind_speed': array([0.        , 2.98      , 4.63333333]),
 'meanpressure': array([1015.66666667, 1017.8, 1018.66666667])}

Манипуляция данными

Большую часть времени нам нужно предварительно обработать данные перед вводом в модель. В анализе временных рядов получение данных о запаздывании или опережении (сдвиг данных) является одним из наиболее распространенных методов. В пакете также предусмотрена функция сдвига данных.

  • make_lead
  • make_lag
  • make_lead_sequence
  • make_lag_sequence

make_lead и make_lag сдвигают данные

make_lead_sequence и make_lag_sequence сдвигают данные и возвращают данные списка окон в качестве функции. Это полезно для создания функции глубокого обучения.

{'date': array(['2013-01-01', '2013-01-02', '2013-01-03'], dtype=object),
 'meantemp': array([10.        ,  7.4       ,  7.16666667]),
 'humidity': array([84.5, 92. , 87. ]),
 'wind_speed': array([0.        , 2.98      , 4.63333333]),
 'meanpressure': array([1015.66666667, 1017.8, 1018.66666667]),
 'meantemp_lead_3': array([8.66666667, 6.        , 7.        ]),
 'wind_speed_lead_3': array([1.23333333, 3.7       , 1.48      ]),
 'meantemp_lead_seq_3': array([[7.4       , 7.16666667, 8.66666667],
        [7.16666667, 8.66666667, 6.        ],
        [8.66666667, 6.        , 7.        ]]),
 'meanpressure_lead_seq_3': array([[1017.8, 1018.6667, 1017.1667],
        [1018.66666667, 1017.16666667, 1016.5       ],
        [1017.16666667, 1016.5       , 1018.        ]])}

Пользовательская функция

Также можно использовать определяемую пользователем функцию. Мы можем использовать функцию transform для настройки обработки данных.

Ограничение функции настройки:

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

Примечание: time_series_transform.transform_core_api.util предоставляет некоторые общие функции, которые мы импортировали в начале.

data column
-----------
date
meantemp
humidity
wind_speed
meanpressure
meantemp_lead_3
wind_speed_lead_3
meantemp_lead_seq_3
meanpressure_lead_seq_3
wind_cust_10
time length: 1462
category: None

Сюжет

Пакет также предоставляет функцию рисования графика и поддерживает несколько функций настройки графика.

  • add_line
  • remove_line
  • update_layout
  • add_marker

Многомерные данные временных рядов

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

Time_Series_Transformer может указать параметр mainCategoryCol, чтобы указать основную категорию. Этот класс предоставляет только один столбец для основной категории, поскольку несколько измерений могут быть объединены в новый столбец в качестве основной категории.

Из документации. С помощью mainCategoryCol мы можем разделить данные по категориям и выполнять те же операции с данными, что и раньше.

Затем мы можем дополнительно применить функциональность для выполнения предварительной обработки. Чтобы продемонстрировать возможности Time_Series_Transformer, мы можем разделить данные по месяцам и исследовать поведение данных.

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

Стоковый трансформатор

Говоря об анализе временных рядов, фондовый рынок должен представлять интерес для большинства людей. Stock_Transformer делает нашу жизнь легкой и простой. Извлечение биржевых данных может быть выполнено всего одной строкой кода, и мы также можем использовать возможности манипулирования данными, как мы это делали ранее.

Методы добычи запасов:

  • from_stock_engine_date
  • from_stock_engine_period
  • from_stock_engine_intraday

Для расчета стандартных технических индикаторов мы можем использовать get_technial_indicator с pandas-ta.

Date       Open       High        Low      Close     Volume  \
25  2019-02-07  41.725962  42.098690  41.227381  41.372601  126966800   
26  2019-02-08  41.076051  41.481974  40.937501  41.421207   95280000   
27  2019-02-11  41.576775  41.615667  41.139252  41.183002   83973600   
28  2019-02-12  41.345854  41.564614  41.248625  41.537876   89134000   
29  2019-02-13  41.659413  41.924356  41.302103  41.365299   89960800   

    Dividends  Stock Splits  MACD_12_26_9  MACDh_12_26_9  MACDs_12_26_9  \
25     0.0000           0.0      1.952193            NaN            NaN   
26     0.1825           0.0      1.915505            NaN            NaN   
27     0.0000           0.0      1.845929            NaN            NaN   
28     0.0000           0.0      1.798691            NaN            NaN   
29     0.0000           0.0      1.727417            NaN            NaN   

       EMA_10        BBL        BBM        BBU  Bandwidth   Percent  
25  40.383502  34.842427  38.655327  42.468227  19.727684  0.856326  
26  40.572176  34.930402  38.865177  42.799952  20.248332  0.824800  
27  40.683235  35.136170  39.081391  43.026611  20.189764  0.766349  
28  40.838624  35.475825  39.343060  43.210295  19.659045  0.783771  
29  40.934383  35.746722  39.558949  43.371175  19.273650  0.736915

Справочник

Преобразователь временных рядов:

https://allen-chiang.github.io/Time-Series-Transformer/introduction.html

https://github.com/allen-chiang/Time-Series-Transformer

Спасибо за прочтение, хорошего дня!!