Вопрос или проблема
У меня есть массив данных “SerTime”, который представляет собой последовательное время в днях, начиная с начала серии (2016-2018). Я не уверен, является ли это серийным временем или нет. Я хочу агрегировать данные, связанные с этими временными данными, в почасовые, ежедневные,weekly и месячные данные, и я не знаю, как это сделать.
SerTime = array([[4.16666666e-02, 8.33333333e-02, 1.25000000e-01, ...,
1.09591667e+03, 1.09595833e+03, 1.09600000e+03]])
```
Если вы не знаете, каким должен быть правильный результат, будет трудно определить, верна ли конверсия, но попробуйте умножить значения на количество секунд в дне (86400) и работайте оттуда, чтобы конвертировать их в что угодно, что вам нужно (например, кажется, что первое значение – это 3600 секунд, что ровно 1 час). Поскольку у вас, похоже, нет начальной даты(времени), все времена будут относительными (т.е. t+3 секунды), а не абсолютными.
Ответ или решение
Преобразование последовательного времени в Python: Подробное руководство
Проблема, с которой вы столкнулись, касается работы с массивом последовательного времени, который представлен в виде дробных значений. Эти значения, предположительно, обозначают дни, начиная с определенной даты, и вы хотите агрегировать данные по этим временным меткам в hourly, daily, weekly и monthly форматах. В данной статье мы детально рассмотрим, как выполнить такую задачу с использованием Python.
Понимание входных данных
Ваш массив SerTime
выглядит следующим образом:
SerTime = array([[4.16666666e-02, 8.33333333e-02, 1.25000000e-01, ...,
1.09591667e+03, 1.09595833e+03, 1.09600000e+03]])
Значения представляют собой дроби, вероятно, указывающие на количество дней, начиная с 2016 года, в формате дробного времени.
Первое значение 4.16666666e-02
, например, эквивалентно 0.041666666, что соответствует 1 часу (1/24) от суток, подтверждающее, что ваши значения действительно представляют собой дробные часть дня.
Шаги для преобразования времени
Чтобы преобразовать последовательные временные метрики и агрегировать ваши данные, нам нужно выполнить несколько шагов:
- Конвертировать значения времени в абсолютные временные метки.
- Агрегировать данные по часовым, суточным, недельным и месячным интервалам.
1. Конвертация значений времени
Для начала нам следует преобразовать значения из массива в временные метки. Вы можете использовать встроенный модуль datetime
для этого.
import numpy as np
import pandas as pd
from datetime import datetime, timedelta
# Данные
SerTime = np.array([[4.16666666e-02, 8.33333333e-02, 1.25000000e-01, 1.09591667e+03,
1.09595833e+03, 1.09600000e+03]])
# Начальная дата
start_date = datetime(2016, 1, 1)
# Преобразование в даты
time_series = [start_date + timedelta(days=float(day)) for day in SerTime.flatten()]
2. Создание DataFrame и агрегирование данных
Теперь, когда у вас есть временной ряд, мы можем поместить его в DataFrame
от библиотеки pandas и агрегировать.
# Создание DataFrame
df = pd.DataFrame({'Datetime': time_series})
# Установим индекс
df.set_index('Datetime', inplace=True)
# Если у вас есть какие-либо данные, добавим их
# Например, создадим случайные данные для агрегации
df['Values'] = np.random.random(len(df))
# Агрегация
# Суммирование для Hourly
hourly_data = df.resample('H').sum()
# Суммирование для Daily
daily_data = df.resample('D').sum()
# Суммирование для Weekly
weekly_data = df.resample('W').sum()
# Суммирование для Monthly
monthly_data = df.resample('M').sum()
Заключение
Теперь у вас есть данные, агрегированные в различных временных интервалах. Этот подход позволяет гибко работать с временными временными метками, обеспечивая возможность дальнейшего анализа.
Рекомендации
- Оптимизация производительности: Если объем данных велик, следует рассмотреть использование генераторов или более эффективных структур данных.
- Визуализация: Используйте библиотеки визуализации, такие как Matplotlib или Seaborn, чтобы наглядно представить агрегированные данные.
- Тестирование: Обязательно протестируйте свой код на небольших объемах данных, чтобы убедиться в корректности работы.
Этот метод предоставит вам всю необходимую информацию для работы с последовательным временем в Python и его агрегации.