Обновление визуализации данных овладение временной ресемплированием в Pandas

Освоение техники временной ресемплирования данных с помощью библиотеки Pandas

В этой обширной статье будет рассмотрена визуализация данных на основе времени с использованием языка Python и библиотеки Pandas. Как вы знаете, временной ряд данных является кладезем понимания, и с помощью искусной техники ресемплинга вы можете превратить сырые временные данные в наглядные повествования. Будь вы энтузиастом данных, ученым, аналитиком или просто любопытным о раскрытии историй, скрытых во временных данных, эта статья поможет вам с знаниями и инструментами для обновления ваших навыков визуализации данных. Итак, давайте начнем обсуждение техник ресемплинга в Pandas и превратим данные в информативные и увлекательные временные шедевры.

Зачем ресемплинг данных?

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

В основном, две основные цели ресемплинга данных указаны ниже:

  1. Регулировка гранулярности: Сбор больших данных позволяет изменять интервалы времени, в которых собираются или агрегируются точки данных. Вы можете получить только важную информацию, а не шум. Это может помочь вам удалить шумные данные, что позволит визуализировать данные более управляемым образом.
  1. Выравнивание: Это также помогает выровнять данные из нескольких источников с разными временными интервалами, обеспечивая согласованность при создании визуализаций или проведении анализа.

Например,

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

  Импорт панд как pd # Пример ежедневных данных о цене акций данных = {'Date': pd.date_range(start='2023-01-01', periods=365, freq='D'), 'StockPrice': [100 + i + 10 * (i% 7) для i в диапазоне(365)]} df = pd.DataFrame(data) # Ресемплирование с месячной частотой monthly_data = df.resample('M', on='Date').mean() print(monthly_data.head())  

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

Выбор правильной частоты ресемплинга

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

Например,

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

  # Пример данных о температуре на уровне минут данных = {'Timestamp': pd.date_range(start='2023-01-01', periods=525600, freq='T'), 'Temperature': [20 + 10 * (i% 1440) / 1440 для i в диапазоне(525600)]} df = pd.DataFrame(data) # Ресемплирование на разные частоты daily_avg = df.resample('D', on='Timestamp').mean() monthly_avg = df.resample('M', on='Timestamp').mean() yearly_avg = df.resample('Y', on='Timestamp').mean() print(daily_avg.head()) print(monthly_avg.head()) print(yearly_avg.head())  

 

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

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

 

Методы агрегации и техники

 

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

Например, 

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

# Пример ежедневных данных о продажахdata = {'Date': pd.date_range(start='2023-01-01', periods=365, freq='D'),'Sales': [1000 + i * 10 + 5 * (i % 30) for i in range(365)]}df = pd.DataFrame(data)# Рассчитать ежемесячные и ежегодные продажи с помощью метода агрегацииmonthly_totals = df.resample('M', on='Date').sum()yearly_totals = df.resample('Y', on='Date').sum()print(monthly_totals.head())print(yearly_totals.head())

 

В этом примере мы пересчитываем ежедневные данные о продажах в ежемесячные и ежегодные общие значения с использованием метода агрегации sum(). При этом вы можете анализировать тенденцию продаж на разных уровнях детализации. Ежемесячные значения предоставляют информацию о сезонных изменениях, а ежегодные значения дает общий обзор годовой деятельности.

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

 

Обработка отсутствующих данных 

 

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

Например, 

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

# Пример данных о температуре с отсутствующими значениямиdata = {    'Date': pd.date_range(start='2023-01-01', periods=365, freq='D'),    'Temperature': [25 + np.random.randn() * 5 if np.random.rand() > 0.2 else np.nan for _ in range(365)]}df = pd.DataFrame(data)# Заполнить отсутствующие значения (заполнить температурой предыдущего дня)df['Temperature'].fillna(method='ffill', inplace=True)# Визуализировать данные о температуреimport matplotlib.pyplot as pltplt.figure(figsize=(12, 6))plt.plot(df['Date'], df['Temperature'], label='Temperature', color='blue')plt.title('Ежедневная температура со временем')plt.xlabel('Дата')plt.ylabel('Температура (°C)')plt.grid(True)plt.show()

 

Результат:  

В приведенном выше примере вы можете увидеть, что сначала мы смоделировали отсутствующие значения температуры (около 20% данных), а затем использовали метод прямого заполнения (ffill) для заполнения пробелов, что означает, что отсутствующие значения заменяются температурой предыдущего дня.

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

 

Визуализация тенденций и паттернов

 

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

Например,

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

# Пример данных о ежедневной посещаемости веб-сайта
data = {'Дата': pd.date_range(start='2019-01-01', periods=1095, freq='D'),'Посетители': [500 + 10 * ((i % 365) - 180) + 50 * (i % 30) for i in range(1095)]}
df = pd.DataFrame(data)
# Создаем график для визуализации тенденции
plt.figure(figsize=(12, 6))
plt.plot(df['Дата'], df['Посетители'], label='Ежедневные посетители', color='blue')
plt.title('Посещаемость веб-сайта со временем')
plt.xlabel('Дата')
plt.ylabel('Посетители')
plt.grid(True)
# Добавляем сезонное разложение
from statsmodels.tsa.seasonal import seasonal_decompose
result = seasonal_decompose(df['Посетители'], model='additive', freq=365)
result.plot()
plt.show()

 

Результат:  

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

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

 

В заключение

 

Ссылка на Colab-тетрадку: https://colab.research.google.com/drive/19oM7NMdzRgQrEDfRsGhMavSvcHx79VDK#scrollTo=nHg3oSjPfS-Y

В этой статье мы обсудили ресэмплинг данных, связанных со временем, в Python. Чтобы закончить нашу сессию, давайте суммируем основные моменты, рассмотренные в этой статье:

  1. Ресэмплинг данных, связанного со временем, является мощной техникой для преобразования и суммирования временных рядов с целью получения лучших идей для принятия решений.
  2. Тщательный выбор частоты ресэмплинга важен для балансировки детализации и ясности визуализации данных.
  3. Методы агрегации, такие как сумма, среднее и пользовательские функции, помогают раскрывать различные аспекты временных данных.
  4. Эффективные методы визуализации помогают выявлять тенденции, сезонность и нерегулярные паттерны, обеспечивая четкую коммуникацию результатов.
  5. Прикладные сценарии, связанные с финансами, прогнозированием погоды и анализом социальных медиа, демонстрируют широкий спектр влияния ресэмплинга данных, связанных со временем.

  Арьян Гарг – студент B.Tech. по электротехнике, находящийся в последнем году учебы. Его интересы лежат в области веб-разработки и машинного обучения. Он развивает свои интересы и жаждет работать еще больше в этих направлениях.