Български

Отключете силата на данните във времеви серии с прозоръчни функции. Това ръководство обхваща основни концепции, практически примери и напреднали техники за анализ на данни.

Анализ на времеви серии: Овладяване на прозоръчните функции за прозрения от данни

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

Разбиране на данните във времеви серии

Данните във времеви серии са последователност от точки от данни, индексирани във времева последователност. Точките от данни могат да представляват различни показатели, като:

Анализът на данни във времеви серии включва идентифициране на модели, тенденции и сезонност, които могат да бъдат използвани за прогнозиране на бъдещи стойности, откриване на аномалии и оптимизиране на бизнес процеси.

Въведение в прозоръчните функции

Прозоръчните функции, известни още като прозоръчни агрегати или аналитични функции, ви позволяват да извършвате изчисления върху набор от редове, свързани с текущия ред, без да групирате редовете в един резултатен набор като традиционните агрегатни функции (напр. SUM, AVG, COUNT). Тази възможност е особено полезна за анализ на времеви серии, където често трябва да изчислявате подвижни средни, кумулативни суми и други базирани на времето показатели.

Прозоръчната функция обикновено се състои от следните компоненти:

  1. Функция: Изчислението, което трябва да бъде извършено (напр. AVG, SUM, RANK, LAG).
  2. Клауза OVER: Дефинира прозореца от редове, използвани за изчислението.
  3. Клауза PARTITION BY (по избор): Разделя данните на дялове и прозоръчната функция се прилага към всеки дял независимо.
  4. Клауза ORDER BY (по избор): Посочва реда на редовете в рамките на всеки дял.
  5. Клауза ROWS/RANGE (по избор): Дефинира рамката на прозореца, която е наборът от редове, свързани с текущия ред, използвани за изчислението.

Ключови концепции и синтаксис

1. Клаузата OVER()

Клаузата OVER() е сърцето на прозоръчната функция. Тя дефинира прозореца от редове, върху които функцията ще работи. Проста клауза OVER() без аргументи ще разглежда целия резултатен набор като прозорец. Например:

SQL Пример:

SELECT
  date, 
  sales,
  AVG(sales) OVER()
FROM
  sales_data;

Тази заявка изчислява средните продажби за всички дати в таблицата sales_data.

2. PARTITION BY

Клаузата PARTITION BY разделя данните на дялове и прозоръчната функция се прилага отделно към всеки дял. Това е полезно, когато искате да изчислите показатели за различни групи във вашите данни.

SQL Пример:

SELECT
  date,
  product_id,
  sales,
  AVG(sales) OVER (PARTITION BY product_id)
FROM
  sales_data;

Тази заявка изчислява средните продажби за всеки продукт поотделно.

3. ORDER BY

Клаузата ORDER BY посочва реда на редовете в рамките на всеки дял. Това е от съществено значение за изчисляване на текущи суми, подвижни средни и други базирани на времето показатели.

SQL Пример:

SELECT
  date,
  sales,
  SUM(sales) OVER (ORDER BY date)
FROM
  sales_data;

Тази заявка изчислява кумулативната сума на продажбите във времето.

4. ROWS/RANGE

Клаузите ROWS и RANGE дефинират рамката на прозореца, която е наборът от редове, свързани с текущия ред, използвани за изчислението. Клаузата ROWS посочва рамката на прозореца въз основа на физическия номер на реда, докато клаузата RANGE посочва рамката на прозореца въз основа на стойностите на колоната ORDER BY.

Пример с ROWS:

SELECT
  date,
  sales,
  AVG(sales) OVER (ORDER BY date ROWS BETWEEN 2 PRECEDING AND CURRENT ROW)
FROM
  sales_data;

Тази заявка изчислява подвижната средна на продажбите през последните 3 дни (включително текущия ден).

Пример с RANGE:

SELECT
  date,
  sales,
  AVG(sales) OVER (ORDER BY date RANGE BETWEEN INTERVAL '2' DAY PRECEDING AND CURRENT ROW)
FROM
  sales_data;

Тази заявка изчислява подвижната средна на продажбите през последните 2 дни (включително текущия ден). Имайте предвид, че RANGE изисква подредена колона, която е от числов или дата/час тип данни.

Чести прозоръчни функции за анализ на времеви серии

1. Пълзяща/Подвижна средна

Пълзящата средна, известна още като подвижна средна, е широко използвана техника за изглаждане на краткосрочни флуктуации в данните във времеви серии и подчертаване на по-дългосрочни тенденции. Изчислява се чрез осредняване на стойностите в определен времеви прозорец.

SQL Пример:

SELECT
  date,
  sales,
  AVG(sales) OVER (ORDER BY date ROWS BETWEEN 6 PRECEDING AND CURRENT ROW) AS moving_average_7_days
FROM
  sales_data;

Тази заявка изчислява 7-дневната подвижна средна на продажбите.

Python Пример (с помощта на Pandas):

import pandas as pd

# Предполагайки, че имате Pandas DataFrame, наречен 'sales_df' с колони 'date' и 'sales'

sales_df['moving_average_7_days'] = sales_df['sales'].rolling(window=7).mean()

Пример за глобално приложение: Международна търговска компания може да използва 30-дневна подвижна средна, за да изглади ежедневните колебания в продажбите и да идентифицира основните тенденции в продажбите в различни региони.

2. Кумулативна сума

Кумулативната сума, известна още като текуща сума, изчислява сумата на стойностите до текущия ред. Полезна е за проследяване на общата натрупана стойност във времето.

SQL Пример:

SELECT
  date,
  sales,
  SUM(sales) OVER (ORDER BY date) AS cumulative_sales
FROM
  sales_data;

Тази заявка изчислява кумулативната сума на продажбите във времето.

Python Пример (с помощта на Pandas):

import pandas as pd

# Предполагайки, че имате Pandas DataFrame, наречен 'sales_df' с колони 'date' и 'sales'

sales_df['cumulative_sales'] = sales_df['sales'].cumsum()

Пример за глобално приложение: Международна електронна търговска компания може да използва кумулативни продажби, за да проследи общите приходи, генерирани от стартирането на нов продукт в различни пазари.

3. Предходен и последващ

Функциите LEAD и LAG ви позволяват да осъществявате достъп до данни от последващи или предходни редове, съответно. Те са полезни за изчисляване на промени период спрямо период, идентифициране на тенденции и сравняване на стойности в различни времеви периоди.

SQL Пример:

SELECT
  date,
  sales,
  LAG(sales, 1, 0) OVER (ORDER BY date) AS previous_day_sales,
  sales - LAG(sales, 1, 0) OVER (ORDER BY date) AS sales_difference
FROM
  sales_data;

Тази заявка изчислява разликата в продажбите в сравнение с предишния ден. Функцията LAG(sales, 1, 0) извлича стойността на продажбите от предходния ред (отместване 1) и ако няма предходен ред (напр. първият ред), тя връща 0 (стойността по подразбиране).

Python Пример (с помощта на Pandas):

import pandas as pd

# Предполагайки, че имате Pandas DataFrame, наречен 'sales_df' с колони 'date' и 'sales'

sales_df['previous_day_sales'] = sales_df['sales'].shift(1)
sales_df['sales_difference'] = sales_df['previous_day_sales'].fillna(0)

Пример за глобално приложение: Глобална авиокомпания може да използва функции за предходен и последващ, за да сравни продажбите на билети за един и същ маршрут през различни седмици и да идентифицира потенциални колебания в търсенето.

4. Ранкиране и плътно ранкиране

Функциите RANK() и DENSE_RANK() присвояват ранг на всеки ред в рамките на дял въз основа на посоченото подреждане. RANK() присвоява рангове с празнини (напр. 1, 2, 2, 4), докато DENSE_RANK() присвоява рангове без празнини (напр. 1, 2, 2, 3).

SQL Пример:

SELECT
  date,
  sales,
  RANK() OVER (ORDER BY sales DESC) AS sales_rank,
  DENSE_RANK() OVER (ORDER BY sales DESC) AS sales_dense_rank
FROM
  sales_data;

Тази заявка класира стойностите на продажбите в низходящ ред.

Пример за глобално приложение: Глобален онлайн пазар може да използва функции за класиране, за да идентифицира най-продаваните продукти във всяка държава или регион.

Напреднали техники и приложения

1. Комбиниране на прозоръчни функции

Прозоръчните функции могат да бъдат комбинирани за извършване на по-сложни изчисления. Например, можете да изчислите подвижната средна на кумулативната сума.

SQL Пример:

SELECT
  date,
  sales,
  AVG(cumulative_sales) OVER (ORDER BY date ROWS BETWEEN 6 PRECEDING AND CURRENT ROW) AS moving_average_cumulative_sales
FROM
  (
    SELECT
      date,
      sales,
      SUM(sales) OVER (ORDER BY date) AS cumulative_sales
    FROM
      sales_data
  ) AS subquery;

2. Използване на прозоръчни функции с условно агрегиране

Можете да използвате прозоръчни функции във връзка с условно агрегиране (напр. с помощта на CASE изрази), за да извършвате изчисления въз основа на специфични условия.

SQL Пример:

SELECT
  date,
  sales,
  AVG(CASE WHEN sales > 100 THEN sales ELSE NULL END) OVER (ORDER BY date ROWS BETWEEN 6 PRECEDING AND CURRENT ROW) AS moving_average_high_sales
FROM
  sales_data;

Тази заявка изчислява подвижната средна на продажбите само за дни, когато продажбите са по-големи от 100.

3. Разлагане на времеви серии

Прозоръчните функции могат да се използват за разлагане на времеви серии на нейните компоненти на тренд, сезонност и остатък. Това включва изчисляване на подвижни средни за оценка на тренда, идентифициране на сезонни модели и след това изваждане на компонентите на тренда и сезонността, за да се получат остатъците.

4. Откриване на аномалии

Прозоръчните функции могат да се използват за откриване на аномалии в данните във времеви серии чрез изчисляване на подвижни средни и стандартни отклонения. Точките от данни, които попадат извън определен диапазон (напр. +/- 3 стандартни отклонения от подвижната средна), могат да бъдат маркирани като аномалии.

Практически примери в индустриите

1. Финанси

2. Търговия на дребно

3. Производство

4. Здравеопазване

Избор на правилния инструмент

Прозоръчните функции са налични в различни инструменти за обработка на данни и програмни езици, включително:

Изборът на инструмент зависи от вашите специфични нужди и техническа експертиза. SQL е подходящ за данни, съхранявани в релационни бази данни, докато Python и Spark са по-гъвкави за обработка на големи набори от данни и извършване на сложен анализ.

Най-добри практики

Заключение

Прозоръчните функции са мощен инструмент за анализ на времеви серии, който ви позволява да изчислявате подвижни средни, кумулативни суми, предходни/последващи стойности и други базирани на времето показатели. Като овладеете прозоръчните функции, можете да отключите ценни прозрения от вашите данни във времеви серии и да вземате по-информирани решения. Независимо дали анализирате финансови данни, данни за продажби, данни от сензори или данни за трафик на уебсайтове, прозоръчните функции могат да ви помогнат да идентифицирате модели, тенденции и аномалии, които биха били трудни за откриване с помощта на традиционни агрегатни техники. Като разбирате ключовите концепции и синтаксис на прозоръчните функции и следвате най-добрите практики, можете ефективно да ги използвате, за да решавате широк спектър от реални проблеми в различни индустрии.