Polski

Uwolnij moc danych szeregów czasowych dzięki funkcjom okienkowym. Ten przewodnik obejmuje kluczowe koncepcje, praktyczne przykłady i zaawansowane techniki analizy danych.

Analiza szeregów czasowych: Opanowanie funkcji okienkowych dla wglądu w dane

Dane szeregów czasowych, charakteryzujące się sekwencyjną naturą i zależnością od czasu, są wszechobecne w różnych branżach. Od śledzenia cen akcji i monitorowania ruchu na stronach internetowych, po analizę odczytów z czujników i prognozowanie trendów sprzedaży, zdolność do wydobywania znaczących wniosków z danych szeregów czasowych jest kluczowa dla podejmowania świadomych decyzji. Funkcje okienkowe zapewniają potężny i elastyczny zestaw narzędzi do wykonywania obliczeń na zbiorze wierszy powiązanych z bieżącym wierszem w tabeli lub ramce danych, co czyni je nieodzownymi w analizie szeregów czasowych.

Zrozumienie danych szeregów czasowych

Dane szeregów czasowych to sekwencja punktów danych indeksowanych w porządku chronologicznym. Punkty danych mogą reprezentować różne metryki, takie jak:

Analiza danych szeregów czasowych obejmuje identyfikację wzorców, trendów i sezonowości, które mogą być wykorzystane do prognozowania przyszłych wartości, wykrywania anomalii i optymalizacji procesów biznesowych.

Wprowadzenie do funkcji okienkowych

Funkcje okienkowe, znane również jako agregaty okienkowe lub funkcje analityczne, pozwalają na wykonywanie obliczeń na zbiorze wierszy powiązanych z bieżącym wierszem, bez grupowania wierszy w pojedynczy zestaw wyników, jak tradycyjne funkcje agregujące (np. SUM, AVG, COUNT). Ta możliwość jest szczególnie przydatna w analizie szeregów czasowych, gdzie często trzeba obliczać średnie kroczące, sumy skumulowane i inne metryki oparte na czasie.

Funkcja okienkowa zazwyczaj składa się z następujących elementów:

  1. Funkcja: Obliczenie do wykonania (np. AVG, SUM, RANK, LAG).
  2. Klauzula OVER: Definiuje okno wierszy używane do obliczeń.
  3. Klauzula PARTITION BY (opcjonalnie): Dzieli dane na partycje, a funkcja okienkowa jest stosowana do każdej partycji niezależnie.
  4. Klauzula ORDER BY (opcjonalnie): Określa kolejność wierszy w każdej partycji.
  5. Klauzula ROWS/RANGE (opcjonalnie): Definiuje ramę okna, czyli zestaw wierszy względem bieżącego wiersza używany do obliczeń.

Kluczowe koncepcje i składnia

1. Klauzula OVER()

Klauzula OVER() jest sercem funkcji okienkowej. Definiuje ona okno wierszy, na których funkcja będzie działać. Prosta klauzula OVER() bez argumentów uzna cały zestaw wyników za okno. Na przykład:

Przykład SQL:

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

To zapytanie oblicza średnią sprzedaż dla wszystkich dat w tabeli sales_data.

2. PARTITION BY

Klauzula PARTITION BY dzieli dane na partycje, a funkcja okienkowa jest stosowana do każdej partycji osobno. Jest to przydatne, gdy chcesz obliczyć metryki dla różnych grup w ramach swoich danych.

Przykład SQL:

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

To zapytanie oblicza średnią sprzedaż dla każdego produktu osobno.

3. ORDER BY

Klauzula ORDER BY określa kolejność wierszy w każdej partycji. Jest to niezbędne do obliczania sum skumulowanych, średnich kroczących i innych metryk opartych na czasie.

Przykład SQL:

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

To zapytanie oblicza sumę skumulowaną sprzedaży w czasie.

4. ROWS/RANGE

Klauzule ROWS i RANGE definiują ramę okna, czyli zestaw wierszy względem bieżącego wiersza używany do obliczeń. Klauzula ROWS określa ramę okna na podstawie fizycznego numeru wiersza, podczas gdy klauzula RANGE określa ramę okna na podstawie wartości kolumny ORDER BY.

Przykład ROWS:

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

To zapytanie oblicza średnią kroczącą sprzedaży z ostatnich 3 dni (łącznie z bieżącym dniem).

Przykład RANGE:

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

To zapytanie oblicza średnią kroczącą sprzedaży z ostatnich 2 dni (łącznie z bieżącym dniem). Należy zauważyć, że `RANGE` wymaga uporządkowanej kolumny typu numerycznego lub daty/czasu.

Częste funkcje okienkowe dla analizy szeregów czasowych

1. Średnia krocząca

Średnia krocząca, znana również jako średnia ruchoma, jest szeroko stosowaną techniką wygładzania krótkoterminowych fluktuacji w danych szeregów czasowych i podkreślania długoterminowych trendów. Oblicza się ją poprzez uśrednianie wartości w określonym oknie czasowym.

Przykład 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;

To zapytanie oblicza 7-dniową średnią kroczącą sprzedaży.

Przykład w języku Python (z użyciem Pandas):

import pandas as pd

# Zakładając, że masz ramkę danych Pandas o nazwie 'sales_df' z kolumnami 'date' i 'sales'

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

Przykład zastosowania globalnego: Wielonarodowy sprzedawca detaliczny może wykorzystać 30-dniową średnią kroczącą do wygładzenia codziennych fluktuacji sprzedaży i identyfikacji podstawowych trendów sprzedaży w różnych regionach.

2. Suma skumulowana

Suma skumulowana, znana również jako suma narastająca, oblicza sumę wartości do bieżącego wiersza. Jest przydatna do śledzenia całkowitej zgromadzonej wartości w czasie.

Przykład SQL:

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

To zapytanie oblicza sumę skumulowaną sprzedaży w czasie.

Przykład w języku Python (z użyciem Pandas):

import pandas as pd

# Zakładając, że masz ramkę danych Pandas o nazwie 'sales_df' z kolumnami 'date' i 'sales'

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

Przykład zastosowania globalnego: Międzynarodowa firma e-commerce może wykorzystać sumę skumulowaną sprzedaży do śledzenia całkowitego przychodu wygenerowanego z wprowadzenia nowego produktu na rynek w różnych regionach.

3. LEAD i LAG

Funkcje LEAD i LAG pozwalają na dostęp do danych z kolejnych lub poprzednich wierszy, odpowiednio. Są one przydatne do obliczania zmian okres do okresu, identyfikowania trendów i porównywania wartości w różnych okresach.

Przykład 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;

To zapytanie oblicza różnicę sprzedaży w porównaniu do poprzedniego dnia. Funkcja `LAG(sales, 1, 0)` pobiera wartość sprzedaży z poprzedniego wiersza (przesunięcie 1), a jeśli nie ma poprzedniego wiersza (np. pierwszy wiersz), zwraca 0 (wartość domyślną).

Przykład w języku Python (z użyciem Pandas):

import pandas as pd

# Zakładając, że masz ramkę danych Pandas o nazwie 'sales_df' z kolumnami 'date' i 'sales'

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

Przykład zastosowania globalnego: Globalna linia lotnicza może wykorzystywać funkcje lead i lag do porównywania sprzedaży biletów na tę samą trasę w różnych tygodniach i identyfikowania potencjalnych wahań popytu.

4. RANK i DENSE RANK

Funkcje RANK() i DENSE_RANK() przypisują rangę każdemu wierszowi w partycji na podstawie określonej kolejności. RANK() przypisuje rangi z lukami (np. 1, 2, 2, 4), podczas gdy DENSE_RANK() przypisuje rangi bez luk (np. 1, 2, 2, 3).

Przykład 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;

To zapytanie szereguje wartości sprzedaży w kolejności malejącej.

Przykład zastosowania globalnego: Globalny rynek internetowy może używać funkcji rangowania do identyfikowania najlepiej sprzedających się produktów w każdym kraju lub regionie.

Zaawansowane techniki i zastosowania

1. Łączenie funkcji okienkowych

Funkcje okienkowe można łączyć w celu wykonywania bardziej złożonych obliczeń. Na przykład, można obliczyć średnią kroczącą sumy skumulowanej.

Przykład 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. Używanie funkcji okienkowych z agregacją warunkową

Można używać funkcji okienkowych w połączeniu z agregacją warunkową (np. za pomocą instrukcji CASE) do wykonywania obliczeń na podstawie określonych warunków.

Przykład 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;

To zapytanie oblicza średnią kroczącą sprzedaży tylko dla dni, w których sprzedaż była większa niż 100.

3. Dekompozycja szeregów czasowych

Funkcje okienkowe mogą być używane do dekompozycji szeregu czasowego na jego składowe: trend, sezonowość i resztę. Obejmuje to obliczanie średnich kroczących w celu oszacowania trendu, identyfikację wzorców sezonowych, a następnie odjęcie składowych trendu i sezonowości w celu uzyskania reszt.

4. Wykrywanie anomalii

Funkcje okienkowe mogą być używane do wykrywania anomalii w danych szeregów czasowych poprzez obliczanie średnich kroczących i odchyleń standardowych. Punkty danych, które mieszczą się poza określonym zakresem (np. +/- 3 odchylenia standardowe od średniej kroczącej), mogą być oznaczone jako anomalie.

Praktyczne przykłady w różnych branżach

1. Finanse

2. Handel detaliczny

3. Produkcja

4. Opieka zdrowotna

Wybór odpowiedniego narzędzia

Funkcje okienkowe są dostępne w różnych narzędziach do przetwarzania danych i językach programowania, w tym:

Wybór narzędzia zależy od Twoich specyficznych potrzeb i wiedzy technicznej. SQL jest dobrze przystosowany do danych przechowywanych w bazach danych relacyjnych, podczas gdy Python i Spark są bardziej elastyczne w przetwarzaniu dużych zbiorów danych i przeprowadzaniu złożonych analiz.

Najlepsze praktyki

Wniosek

Funkcje okienkowe to potężne narzędzie do analizy szeregów czasowych, umożliwiające obliczanie średnich kroczących, sum skumulowanych, wartości przesuniętych i innych metryk opartych na czasie. Opanowując funkcje okienkowe, możesz uzyskać cenne wnioski z danych szeregów czasowych i podejmować bardziej świadome decyzje. Niezależnie od tego, czy analizujesz dane finansowe, dane sprzedażowe, dane z czujników, czy dane o ruchu na stronie internetowej, funkcje okienkowe mogą pomóc Ci zidentyfikować wzorce, trendy i anomalie, które byłyby trudne do wykrycia za pomocą tradycyjnych technik agregacji. Rozumiejąc kluczowe koncepcje i składnię funkcji okienkowych oraz przestrzegając najlepszych praktyk, możesz efektywnie wykorzystywać je do rozwiązywania szerokiego zakresu rzeczywistych problemów w różnych branżach.