Расширьте возможности структуры данных, улучшите процесс обработки данных
Данные временного ряда представляют собой последовательность точек данных, проиндексированных во временном порядке. Наиболее распространенным примером данных временных рядов является дневная цена закрытия фондового рынка. Помимо фондового рынка, мы сталкиваемся с множеством различных данных временных рядов, например, климатические изменения во времени или доход от продаж компании. Анализ временных рядов помогает организациям понять основные причины тенденций или системных моделей с течением времени.
Сегодня мы хотим погрузиться в причудливый и мощный движок структуры данных временных рядов.
Преобразователь временных рядов
Пакет не только предоставляет функциональные возможности для обработки данных временных рядов, но и помогает нам обрабатывать многомерные данные временных рядов. Более того, подмодуль 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
Спасибо за прочтение, хорошего дня!!