Изменение частоты данных

Последнее обновление: 23.01.2026

Изменение частоты данных или resampling представляет процесс изменения количества данных временного ряда. Можно понижать или повышать частоту в зависимости от потребностей анализа. Для выполнения повтрной выборки библиотека Pandas предоставляет метод resample():

DataFrame.resample(rule, closed=None, label=None, convention="start", on=None, level=None, origin="start_day", offset=None, group_keys=False)

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

Уменьшение частоты

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

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

import pandas as pd

# Генерируем индекс даты и времени для месяца, начиная с 1 по 15 января 2026 года
start_date = "2026-01-01"
end_date = "2026-01-15"

date_index = pd.date_range(start=start_date, end=end_date, freq="D")

# данные о температуре для каждого дня
data = {
    "Max Temp": [-4, -4, -4, -4, -5, -5, -6, -6, -6, -5, -5, -5, -4, -4, -4],
    "Min Temp": [-8, -9, -9, -10, -10, -12, -11, -10, -10, -10, -10, -10, -9, -8, -9]
}

# Создаем DataFrame с индексом даты и времени
df = pd.DataFrame(data, index=date_index)
print("Оригинальный DataFrame:")
print(df)

# Уменьшение выборки до еженедельных данных с агрегированием средних значений
weekly_mean = df.resample("W").mean()
print("\nDataFrame со средними по неделям:")
print(weekly_mean)

Итак, здесь начальный набор данных содержит минимальные и максимальные температуры с 1 по 15 января 2026 года. Для уменьшения размера выборки этих данных до еженедельных средних значений мы используем метод resample("W"), где "W" представляет собой еженедельную частоту. Затем применяем метод mean() для вычисления средней температуры для каждой недели. Результат программы:

Оригинальный DataFrame:
            Max Temp  Min Temp
2026-01-01        -4        -8
2026-01-02        -4        -9
2026-01-03        -4        -9
2026-01-04        -4       -10
2026-01-05        -5       -10
2026-01-06        -5       -12
2026-01-07        -6       -11
2026-01-08        -6       -10
2026-01-09        -6       -10
2026-01-10        -5       -10
2026-01-11        -5       -10
2026-01-12        -5       -10
2026-01-13        -4        -9
2026-01-14        -4        -8
2026-01-15        -4        -9

DataFrame со средними по неделям:
            Max Temp   Min Temp
2026-01-04 -4.000000  -9.000000
2026-01-11 -5.428571 -10.428571
2026-01-18 -4.250000  -9.000000

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

Повышение частоты

Повышение частоты представляет увеличение частоты данных временных точек, которое обычно происходит путем интерполяции или генерации новых точек данных между существующими временными точками. Основная цель повышения частоты дискретизации - обеспечить более детальное или мелкозернистое представление данных с более высоким временным разрешением. Увеличение выборки полезно, когда необходимо повысить детализацию данных временного ряда или выровнять их с данными более высокой частоты для дальнейшего анализа или моделирования.

Например, у нас есть объект DataFrame с ежемесячными данными о температуре за январь, февраль и март 2025 года, и нам надо из них получить ежедвневные температуры:

import pandas as pd

data = {
    "Date": ["2025-01-01", "2025-02-01", "2025-03-01"],
    "Temp": [-10, -4, 2]
}
df = pd.DataFrame(data)

# Преопбразование данных столбца "Date" в Timestamp
df["Date"] = pd.to_datetime(df["Date"])
# Установка столбца "Date" в качестве индекса
df.set_index("Date", inplace=True)
print("Оригинальный DataFrame:")
print(df)


# Увеличение выборки до ежедневных данных с помощью линейной интерполяции
df_dayly = df.resample("D").asfreq().interpolate(method="linear")
print("\nDataFrame с ежедневными данными:")
print(df_dayly)

Для увеличения частоты дискретизации ежемесячных данных до ежедневных мы используем метод resample("D"), далее для обеспечения включения индекса всех ежедневных данных применяем метод asfreq(), а затем используем interpolate(method="linear") для выполнения линейной интерполяции между доступными ежемесячными значениями, чтобы заполнить пропущенные ежедневные значения температуры. В итоге на консольном выводе мы видим ежедневные значения температуры, интерполированные из доступных ежемесячных значений:

Оригинальный DataFrame:
            Temp
Date            
2025-01-01   -10
2025-02-01    -4
2025-03-01     2

DataFrame с ежедневными данными:
                 Temp
Date                 
2025-01-01 -10.000000
2025-01-02  -9.806452
2025-01-03  -9.612903
2025-01-04  -9.419355
2025-01-05  -9.225806
2025-01-06  -9.032258
2025-01-07  -8.838710
2025-01-08  -8.645161
2025-01-09  -8.451613
2025-01-10  -8.258065
2025-01-11  -8.064516
2025-01-12  -7.870968
2025-01-13  -7.677419
2025-01-14  -7.483871
2025-01-15  -7.290323
2025-01-16  -7.096774
2025-01-17  -6.903226
...........................
2025-02-25   1.142857
2025-02-26   1.357143
2025-02-27   1.571429
2025-02-28   1.785714
2025-03-01   2.000000

Подобное повышение частоты выборки позволяет работать с данными более высокой частоты для более детального анализа и визуализации, заполняя пропущенные значения с помощью методов интерполяции.

Помощь сайту
Юмани:
410011174743222
Номер карты:
4048415020898850