Отключете силата на данните във времеви серии с прозоръчни функции. Това ръководство обхваща основни концепции, практически примери и напреднали техники за анализ на данни.
Анализ на времеви серии: Овладяване на прозоръчните функции за прозрения от данни
Данните във времеви серии, характеризиращи се със своята последователност и зависимост от времето, са навсякъде в индустриите. От проследяване на цени на акции и наблюдение на трафик на уебсайтове до анализиране на показания на сензори и прогнозиране на тенденции в продажбите, способността за извличане на смислени прозрения от данни във времеви серии е от решаващо значение за информирано вземане на решения. Прозоръчните функции предоставят мощен и гъвкав набор от инструменти за извършване на изчисления върху набор от редове, които са свързани с текущия ред в таблица или рамка от данни, което ги прави незаменими за анализ на времеви серии.
Разбиране на данните във времеви серии
Данните във времеви серии са последователност от точки от данни, индексирани във времева последователност. Точките от данни могат да представляват различни показатели, като:
- Финансови данни: Цени на акции, обменни курсове, обеми на търговия
- Данни за продажби: Дневни, седмични или месечни данни за продажби за различни продукти
- Данни от сензори: Показания за температура, измервания на налягане, нива на влажност
- Данни за трафик на уебсайтове: Посещения на уебсайтове, разгледани страници, проценти на отпадане
- Данни за потребление на енергия: Часови или дневни данни за потребление на електроенергия
Анализът на данни във времеви серии включва идентифициране на модели, тенденции и сезонност, които могат да бъдат използвани за прогнозиране на бъдещи стойности, откриване на аномалии и оптимизиране на бизнес процеси.
Въведение в прозоръчните функции
Прозоръчните функции, известни още като прозоръчни агрегати или аналитични функции, ви позволяват да извършвате изчисления върху набор от редове, свързани с текущия ред, без да групирате редовете в един резултатен набор като традиционните агрегатни функции (напр. SUM, AVG, COUNT). Тази възможност е особено полезна за анализ на времеви серии, където често трябва да изчислявате подвижни средни, кумулативни суми и други базирани на времето показатели.
Прозоръчната функция обикновено се състои от следните компоненти:
- Функция: Изчислението, което трябва да бъде извършено (напр. AVG, SUM, RANK, LAG).
- Клауза OVER: Дефинира прозореца от редове, използвани за изчислението.
- Клауза PARTITION BY (по избор): Разделя данните на дялове и прозоръчната функция се прилага към всеки дял независимо.
- Клауза ORDER BY (по избор): Посочва реда на редовете в рамките на всеки дял.
- Клауза 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: Повечето модерни системи за управление на релационни бази данни (RDBMS) поддържат прозоръчни функции, включително PostgreSQL, MySQL (версия 8.0+), SQL Server, Oracle и Amazon Redshift.
- Python: Библиотеката Pandas предоставя отлична поддръжка за прозоръчни функции чрез методите
rolling()
иexpanding()
. - Spark: API-тата SQL и DataFrame на Apache Spark също поддържат прозоръчни функции.
Изборът на инструмент зависи от вашите специфични нужди и техническа експертиза. SQL е подходящ за данни, съхранявани в релационни бази данни, докато Python и Spark са по-гъвкави за обработка на големи набори от данни и извършване на сложен анализ.
Най-добри практики
- Разберете данните: Преди да приложите прозоръчни функции, разбирайте задълбочено характеристиките на вашите данни във времеви серии, включително тяхната честота, сезонност и потенциални отклонения.
- Изберете подходящ размер на прозореца: Изборът на размер на прозореца зависи от конкретния анализ, който извършвате. По-малък размер на прозореца ще бъде по-чувствителен към краткосрочни колебания, докато по-голям размер на прозореца ще изглади данните и ще подчертае по-дългосрочни тенденции.
- Обмислете крайните случаи: Бъдете наясно как прозоръчните функции обработват крайни случаи, като липсващи данни или началото и края на времевата серия. Използвайте подходящи стойности по подразбиране или техники за филтриране, за да се справите с тези случаи.
- Оптимизирайте производителността: Прозоръчните функции могат да бъдат изчислително скъпи, особено за големи набори от данни. Оптимизирайте вашите заявки и код, за да подобрите производителността, като например използване на подходящи индекси и стратегии за разделяне.
- Документирайте кода си: Ясно документирайте вашия код и заявки, за да обясните целта и логиката на прозоръчните функции. Това ще улесни другите да разбират и поддържат вашия код.
Заключение
Прозоръчните функции са мощен инструмент за анализ на времеви серии, който ви позволява да изчислявате подвижни средни, кумулативни суми, предходни/последващи стойности и други базирани на времето показатели. Като овладеете прозоръчните функции, можете да отключите ценни прозрения от вашите данни във времеви серии и да вземате по-информирани решения. Независимо дали анализирате финансови данни, данни за продажби, данни от сензори или данни за трафик на уебсайтове, прозоръчните функции могат да ви помогнат да идентифицирате модели, тенденции и аномалии, които биха били трудни за откриване с помощта на традиционни агрегатни техники. Като разбирате ключовите концепции и синтаксис на прозоръчните функции и следвате най-добрите практики, можете ефективно да ги използвате, за да решавате широк спектър от реални проблеми в различни индустрии.