Серийное преобразование времени в Python

Вопрос или проблема

У меня есть массив данных “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. Конвертировать значения времени в абсолютные временные метки.
  2. Агрегировать данные по часовым, суточным, недельным и месячным интервалам.

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()

Заключение

Теперь у вас есть данные, агрегированные в различных временных интервалах. Этот подход позволяет гибко работать с временными временными метками, обеспечивая возможность дальнейшего анализа.

Рекомендации

  1. Оптимизация производительности: Если объем данных велик, следует рассмотреть использование генераторов или более эффективных структур данных.
  2. Визуализация: Используйте библиотеки визуализации, такие как Matplotlib или Seaborn, чтобы наглядно представить агрегированные данные.
  3. Тестирование: Обязательно протестируйте свой код на небольших объемах данных, чтобы убедиться в корректности работы.

Этот метод предоставит вам всю необходимую информацию для работы с последовательным временем в Python и его агрегации.

Оцените материал
Добавить комментарий

Капча загружается...