Čeština

Odemkněte potenciál dat časových řad pomocí okenních funkcí. Tento průvodce pokrývá základní koncepty, praktické příklady a pokročilé techniky pro analýzu dat.

Analýza časových řad: Zvládnutí okenních funkcí pro datové přehledy

Data časových řad, charakterizovaná svou sekvenční a časově závislou povahou, jsou všudypřítomná napříč odvětvími. Od sledování cen akcií a monitorování návštěvnosti webových stránek po analýzu údajů ze senzorů a předpovídání prodejních trendů je schopnost získávat smysluplné poznatky z dat časových řad klíčová pro informované rozhodování. Okenní funkce poskytují výkonnou a flexibilní sadu nástrojů pro provádění výpočtů napříč sadou řádků, které souvisejí s aktuálním řádkem v tabulce nebo datovém rámci, což je činí nepostradatelnými pro analýzu časových řad.

Porozumění datům časových řad

Data časových řad jsou posloupností datových bodů indexovaných v časovém pořadí. Datové body mohou představovat různé metriky, jako jsou:

Analýza dat časových řad zahrnuje identifikaci vzorů, trendů a sezónnosti, které lze použít pro prognózování budoucích hodnot, detekci anomálií a optimalizaci obchodních procesů.

Úvod do okenních funkcí

Okenní funkce, známé také jako okénkové agregace nebo analytické funkce, umožňují provádět výpočty na sadě řádků souvisejících s aktuálním řádkem, aniž by se řádky seskupovaly do jedné výsledné sady jako tradiční agregační funkce (např. SUM, AVG, COUNT). Tato schopnost je zvláště užitečná pro analýzu časových řad, kde často potřebujete vypočítat klouzavé průměry, kumulativní součty a další metriky založené na čase.

Okenní funkce se obvykle skládá z následujících komponent:

  1. Funkce: Výpočet, který se má provést (např. AVG, SUM, RANK, LAG).
  2. Klauzule OVER: Definuje okno řádků použitých pro výpočet.
  3. Klauzule PARTITION BY (volitelná): Rozděluje data na oddíly a okenní funkce se aplikuje na každý oddíl nezávisle.
  4. Klauzule ORDER BY (volitelná): Určuje pořadí řádků v každém oddílu.
  5. Klauzule ROWS/RANGE (volitelná): Definuje rámec okna, což je sada řádků relativní k aktuálnímu řádku použitá pro výpočet.

Klíčové koncepty a syntaxe

1. Klauzule OVER()

Klauzule OVER() je srdcem okenní funkce. Definuje okno řádků, na kterém bude funkce operovat. Jednoduchá klauzule OVER() bez argumentů bude považovat celou výslednou sadu za okno. Například:

Příklad v SQL:

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

Tento dotaz vypočítá průměrný prodej napříč všemi daty v tabulce sales_data.

2. PARTITION BY

Klauzule PARTITION BY rozděluje data na oddíly a okenní funkce se aplikuje na každý oddíl zvlášť. To je užitečné, když chcete vypočítat metriky pro různé skupiny v rámci vašich dat.

Příklad v SQL:

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

Tento dotaz vypočítá průměrný prodej pro každý produkt zvlášť.

3. ORDER BY

Klauzule ORDER BY určuje pořadí řádků v každém oddílu. To je nezbytné pro výpočet průběžných součtů, klouzavých průměrů a dalších metrik založených na čase.

Příklad v SQL:

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

Tento dotaz vypočítá kumulativní součet prodejů v čase.

4. ROWS/RANGE

Klauzule ROWS a RANGE definují rámec okna, což je sada řádků relativní k aktuálnímu řádku použitá pro výpočet. Klauzule ROWS specifikuje rámec okna na základě fyzického čísla řádku, zatímco klauzule RANGE specifikuje rámec okna na základě hodnot sloupce v ORDER BY.

Příklad s ROWS:

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

Tento dotaz vypočítá klouzavý průměr prodejů za poslední 3 dny (včetně aktuálního dne).

Příklad s RANGE:

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

Tento dotaz vypočítá klouzavý průměr prodejů za poslední 2 dny (včetně aktuálního dne). Všimněte si, že RANGE vyžaduje seřazený sloupec, který je číselného nebo datového/časového typu.

Běžné okenní funkce pro analýzu časových řad

1. Klouzavý/pohyblivý průměr

Klouzavý průměr, známý také jako pohyblivý průměr, je široce používaná technika pro vyhlazování krátkodobých fluktuací v datech časových řad a zdůraznění dlouhodobějších trendů. Vypočítává se průměrováním hodnot v určeném časovém okně.

Příklad v 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;

Tento dotaz vypočítá 7denní klouzavý průměr prodejů.

Příklad v Pythonu (s využitím Pandas):

import pandas as pd

# Assuming you have a Pandas DataFrame called 'sales_df' with 'date' and 'sales' columns

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

Příklad globální aplikace: Nadnárodní maloobchodní řetězec by mohl použít 30denní klouzavý průměr k vyhlazení denních výkyvů v prodeji a identifikaci základních prodejních trendů v různých regionech.

2. Kumulativní součet

Kumulativní součet, známý také jako průběžný součet, vypočítává součet hodnot až po aktuální řádek. Je užitečný pro sledování celkové nahromaděné hodnoty v čase.

Příklad v SQL:

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

Tento dotaz vypočítá kumulativní součet prodejů v čase.

Příklad v Pythonu (s využitím Pandas):

import pandas as pd

# Assuming you have a Pandas DataFrame called 'sales_df' with 'date' and 'sales' columns

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

Příklad globální aplikace: Mezinárodní e-commerce společnost může použít kumulativní prodeje ke sledování celkových příjmů generovaných z uvedení nového produktu na různých trzích.

3. Lead a Lag

Funkce LEAD a LAG umožňují přistupovat k datům z následujících, respektive předchozích řádků. Jsou užitečné pro výpočet změn mezi obdobími, identifikaci trendů a porovnávání hodnot v různých časových obdobích.

Příklad v 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;

Tento dotaz vypočítá rozdíl v prodejích oproti předchozímu dni. Funkce LAG(sales, 1, 0) načte hodnotu prodeje z předchozího řádku (posun o 1), a pokud žádný předchozí řádek neexistuje (např. první řádek), vrátí 0 (výchozí hodnota).

Příklad v Pythonu (s využitím Pandas):

import pandas as pd

# Assuming you have a Pandas DataFrame called 'sales_df' with 'date' and 'sales' columns

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

Příklad globální aplikace: Globální letecká společnost může použít funkce lead a lag k porovnání prodeje letenek na stejné trase v různých týdnech a k identifikaci potenciálních výkyvů v poptávce.

4. Rank a Dense Rank

Funkce RANK() a DENSE_RANK() přiřazují každému řádku v oddílu pořadí na základě zadaného řazení. RANK() přiřazuje pořadí s mezerami (např. 1, 2, 2, 4), zatímco DENSE_RANK() přiřazuje pořadí bez mezer (např. 1, 2, 2, 3).

Příklad v 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;

Tento dotaz řadí hodnoty prodejů v sestupném pořadí.

Příklad globální aplikace: Globální online tržiště může použít funkce pro hodnocení k identifikaci nejprodávanějších produktů v každé zemi nebo regionu.

Pokročilé techniky a aplikace

1. Kombinování okenních funkcí

Okenní funkce lze kombinovat pro provádění složitějších výpočtů. Můžete například vypočítat klouzavý průměr kumulativního součtu.

Příklad v 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. Použití okenních funkcí s podmíněnou agregací

Okenní funkce můžete použít ve spojení s podmíněnou agregací (např. pomocí příkazů CASE) k provádění výpočtů na základě specifických podmínek.

Příklad v 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;

Tento dotaz vypočítá klouzavý průměr prodejů pouze pro dny, kdy jsou prodeje vyšší než 100.

3. Dekompozice časových řad

Okenní funkce lze použít k dekompozici časové řady na její trendové, sezónní a reziduální složky. To zahrnuje výpočet klouzavých průměrů k odhadu trendu, identifikaci sezónních vzorů a následné odečtení trendových a sezónních složek pro získání reziduí.

4. Detekce anomálií

Okenní funkce lze použít k detekci anomálií v datech časových řad výpočtem klouzavých průměrů a směrodatných odchylek. Datové body, které spadají mimo určitý rozsah (např. +/- 3 směrodatné odchylky od klouzavého průměru), mohou být označeny jako anomálie.

Praktické příklady napříč odvětvími

1. Finance

2. Maloobchod

3. Výroba

4. Zdravotnictví

Výběr správného nástroje

Okenní funkce jsou k dispozici v různých nástrojích pro zpracování dat a programovacích jazycích, včetně:

Volba nástroje závisí na vašich specifických potřebách a technických znalostech. SQL je vhodný pro data uložená v relačních databázích, zatímco Python a Spark jsou flexibilnější pro zpracování velkých datových sad a provádění složitých analýz.

Osvědčené postupy

Závěr

Okenní funkce jsou mocným nástrojem pro analýzu časových řad, který vám umožňuje vypočítat klouzavé průměry, kumulativní součty, hodnoty lead/lag a další metriky založené na čase. Zvládnutím okenních funkcí můžete odemknout cenné poznatky z vašich dat časových řad a činit informovanější rozhodnutí. Ať už analyzujete finanční data, prodejní data, data ze senzorů nebo data o webovém provozu, okenní funkce vám mohou pomoci identifikovat vzory, trendy a anomálie, které by bylo obtížné odhalit pomocí tradičních agregačních technik. Porozuměním klíčovým konceptům a syntaxi okenních funkcí a dodržováním osvědčených postupů je můžete efektivně využít k řešení široké škály reálných problémů v různých odvětvích.

Analýza časových řad: Zvládnutí okenních funkcí pro datové přehledy | MLOG