Atraskite laiko eilučių duomenų galią su lango funkcijomis. Šiame vadove aptariamos pagrindinės sąvokos, praktiniai pavyzdžiai ir pažangios duomenų analizės technikos.
Laiko eilučių analizė: lango funkcijų įvaldymas duomenų įžvalgoms
Laiko eilučių duomenys, pasižymintys savo nuosekliu ir nuo laiko priklausomu pobūdžiu, yra visur paplitę įvairiose pramonės šakose. Nuo akcijų kainų sekimo ir svetainių srauto stebėjimo iki jutiklių rodmenų analizės ir pardavimų tendencijų prognozavimo, gebėjimas išgauti prasmingas įžvalgas iš laiko eilučių duomenų yra labai svarbus priimant informacija pagrįstus sprendimus. Lango funkcijos suteikia galingą ir lanksčią įrankių rinkinį skaičiavimams atlikti per eilučių rinkinį, susijusį su dabartine eilute lentelėje arba duomenų rėmelyje, todėl jos yra nepakeičiamos laiko eilučių analizei.
Laiko eilučių duomenų supratimas
Laiko eilučių duomenys yra laiko tvarka indeksuotų duomenų taškų seka. Duomenų taškai gali atspindėti įvairius rodiklius, tokius kaip:
- Finansiniai duomenys: Akcijų kainos, valiutų kursai, prekybos apimtys
- Pardavimų duomenys: Dienos, savaitės arba mėnesio pardavimų skaičiai įvairiems produktams
- Jutiklių duomenys: Temperatūros rodmenys, slėgio matavimai, drėgmės lygiai
- Žiniatinklio srauto duomenys: Svetainių apsilankymai, puslapių peržiūros, atmetimo rodikliai
- Energijos suvartojimo duomenys: Valandinis arba dienos elektros energijos naudojimas
Laiko eilučių duomenų analizė apima modelių, tendencijų ir sezoniškumo nustatymą, kurie gali būti naudojami prognozuojant būsimas vertes, aptinkant anomalijas ir optimizuojant verslo procesus.
Įvadas į lango funkcijas
Lango funkcijos, taip pat žinomos kaip languoti agregatai arba analitinės funkcijos, leidžia atlikti skaičiavimus su eilučių rinkiniu, susijusiu su dabartine eilute, negrupuojant eilučių į vieną rezultatų rinkinį, kaip tradicinės agregavimo funkcijos (pvz., SUM, AVG, COUNT). Ši galimybė ypač naudinga laiko eilučių analizei, kai dažnai reikia apskaičiuoti judančius vidurkius, sumines sumas ir kitus laiko pagrindu apskaičiuojamus rodiklius.
Lango funkciją paprastai sudaro šie komponentai:
- Funkcija: Skaičiavimas, kurį reikia atlikti (pvz., AVG, SUM, RANK, LAG).
- OVER sakinys: Apibrėžia eilučių langą, naudojamą skaičiavimui.
- PARTITION BY sakinys (nebūtinas): Padalija duomenis į skaidinius, o lango funkcija taikoma kiekvienam skaidiniui atskirai.
- ORDER BY sakinys (nebūtinas): Nurodo eilučių tvarką kiekviename skaidinyje.
- ROWS/RANGE sakinys (nebūtinas): Apibrėžia lango rėmą, kuris yra eilučių rinkinys, susijęs su dabartine eilute, naudojamas skaičiavimui.
Pagrindinės sąvokos ir sintaksė
1. OVER() sakinys
OVER()
sakinys yra lango funkcijos esmė. Jis apibrėžia eilučių langą, su kuriuo funkcija veiks. Paprastas OVER()
sakinys be argumentų visą rezultatų rinkinį laikys langu. Pavyzdžiui:
SQL pavyzdys:
SELECT
date,
sales,
AVG(sales) OVER()
FROM
sales_data;
Ši užklausa apskaičiuoja vidutinius pardavimus per visas datas lentelėje sales_data
.
2. PARTITION BY
PARTITION BY
sakinys padalija duomenis į skaidinius, o lango funkcija taikoma kiekvienam skaidiniui atskirai. Tai naudinga, kai norite apskaičiuoti rodiklius skirtingoms grupėms savo duomenyse.
SQL pavyzdys:
SELECT
date,
product_id,
sales,
AVG(sales) OVER (PARTITION BY product_id)
FROM
sales_data;
Ši užklausa apskaičiuoja vidutinius kiekvieno produkto pardavimus atskirai.
3. ORDER BY
ORDER BY
sakinys nurodo eilučių tvarką kiekviename skaidinyje. Tai būtina norint apskaičiuoti einamuosius sumas, judančius vidurkius ir kitus laiko pagrindu apskaičiuojamus rodiklius.
SQL pavyzdys:
SELECT
date,
sales,
SUM(sales) OVER (ORDER BY date)
FROM
sales_data;
Ši užklausa apskaičiuoja suminę pardavimų sumą per laiką.
4. ROWS/RANGE
ROWS
ir RANGE
sakiniai apibrėžia lango rėmą, kuris yra eilučių rinkinys, susijęs su dabartine eilute, naudojamas skaičiavimui. ROWS
sakinys nurodo lango rėmą pagal fizinį eilutės numerį, o RANGE
sakinys nurodo lango rėmą pagal ORDER BY
stulpelio reikšmes.
ROWS pavyzdys:
SELECT
date,
sales,
AVG(sales) OVER (ORDER BY date ROWS BETWEEN 2 PRECEDING AND CURRENT ROW)
FROM
sales_data;
Ši užklausa apskaičiuoja judantį pardavimų vidurkį per pastarąsias 3 dienas (įskaitant dabartinę dieną).
RANGE pavyzdys:
SELECT
date,
sales,
AVG(sales) OVER (ORDER BY date RANGE BETWEEN INTERVAL '2' DAY PRECEDING AND CURRENT ROW)
FROM
sales_data;
Ši užklausa apskaičiuoja judantį pardavimų vidurkį per pastarąsias 2 dienas (įskaitant dabartinę dieną). Atminkite, kad `RANGE` reikalauja sutvarkyto stulpelio, kuris yra skaitinio arba datos/laiko duomenų tipo.
Dažnos lango funkcijos laiko eilučių analizei
1. Slenkantis/Judantis vidurkis
Slenkantis vidurkis, taip pat žinomas kaip judantis vidurkis, yra plačiai naudojama technika trumpalaikiams laiko eilučių duomenų svyravimams išlyginti ir ilgesnėms tendencijoms pabrėžti. Jis apskaičiuojamas apskaičiuojant reikšmių vidurkį per nurodytą laiko langą.
SQL pavyzdys:
SELECT
date,
sales,
AVG(sales) OVER (ORDER BY date ROWS BETWEEN 6 PRECEDING AND CURRENT ROW) AS moving_average_7_days
FROM
sales_data;
Ši užklausa apskaičiuoja 7 dienų judantį pardavimų vidurkį.
Python pavyzdys (naudojant Pandas):
import pandas as pd
# Tarkime, kad turite Pandas DataFrame, pavadintą 'sales_df' su stulpeliais 'date' ir 'sales'
sales_df['moving_average_7_days'] = sales_df['sales'].rolling(window=7).mean()
Globalus taikymo pavyzdys: Tarptautinis mažmenininkas galėtų naudoti 30 dienų judantį vidurkį, kad išlygintų dienos pardavimų svyravimus ir nustatytų pagrindines pardavimų tendencijas skirtinguose regionuose.
2. Suminė suma
Suminė suma, taip pat žinoma kaip einamoji suma, apskaičiuoja reikšmių sumą iki dabartinės eilutės. Tai naudinga norint stebėti bendrą sukauptą vertę per laiką.
SQL pavyzdys:
SELECT
date,
sales,
SUM(sales) OVER (ORDER BY date) AS cumulative_sales
FROM
sales_data;
Ši užklausa apskaičiuoja suminę pardavimų sumą per laiką.
Python pavyzdys (naudojant Pandas):
import pandas as pd
# Tarkime, kad turite Pandas DataFrame, pavadintą 'sales_df' su stulpeliais 'date' ir 'sales'
sales_df['cumulative_sales'] = sales_df['sales'].cumsum()
Globalus taikymo pavyzdys: Tarptautinė elektroninės prekybos įmonė gali naudoti suminius pardavimus, kad stebėtų bendras pajamas, gautas iš naujo produkto pristatymo skirtingose rinkose.
3. Pirmavimas ir atsilikimas
LEAD
ir LAG
funkcijos leidžia pasiekti duomenis iš tolesnių arba ankstesnių eilučių atitinkamai. Jie yra naudingi norint apskaičiuoti periodinius pokyčius, nustatyti tendencijas ir palyginti reikšmes per skirtingus laikotarpius.
SQL pavyzdys:
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;
Ši užklausa apskaičiuoja pardavimų skirtumą, palyginti su ankstesne diena. `LAG(sales, 1, 0)` funkcija gauna pardavimų vertę iš ankstesnės eilutės (poslinkis 1), o jei ankstesnės eilutės nėra (pvz., pirmoji eilutė), ji grąžina 0 (numatytoji vertė).
Python pavyzdys (naudojant Pandas):
import pandas as pd
# Tarkime, kad turite Pandas DataFrame, pavadintą 'sales_df' su stulpeliais 'date' ir 'sales'
sales_df['previous_day_sales'] = sales_df['sales'].shift(1)
sales_df['sales_difference'] = sales_df['sales'] - sales_df['previous_day_sales'].fillna(0)
Globalus taikymo pavyzdys: Tarptautinė oro linijų bendrovė gali naudoti pirmavimo ir atsilikimo funkcijas, kad palygintų to paties maršruto bilietų pardavimus per skirtingas savaites ir nustatytų galimus paklausos svyravimus.
4. Reitingas ir tankus reitingas
RANK()
ir DENSE_RANK()
funkcijos priskiria reitingą kiekvienai eilutei skaidinyje pagal nurodytą tvarką. RANK()
priskiria reitingus su tarpais (pvz., 1, 2, 2, 4), o DENSE_RANK()
priskiria reitingus be tarpų (pvz., 1, 2, 2, 3).
SQL pavyzdys:
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;
Ši užklausa reitinguoja pardavimų vertes mažėjimo tvarka.
Globalus taikymo pavyzdys: Tarptautinė internetinė prekyvietė gali naudoti reitingavimo funkcijas, kad nustatytų geriausiai parduodamus produktus kiekvienoje šalyje ar regione.
Pažangios technikos ir taikymai
1. Lango funkcijų derinimas
Lango funkcijos gali būti derinamos norint atlikti sudėtingesnius skaičiavimus. Pavyzdžiui, galite apskaičiuoti suminės sumos judantį vidurkį.
SQL pavyzdys:
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. Lango funkcijų naudojimas su sąlygine agregacija
Galite naudoti lango funkcijas kartu su sąlygine agregacija (pvz., naudojant CASE
sakinius), kad atliktumėte skaičiavimus pagal konkrečias sąlygas.
SQL pavyzdys:
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;
Ši užklausa apskaičiuoja pardavimų judantį vidurkį tik tomis dienomis, kai pardavimai viršija 100.
3. Laiko eilučių skaidymas
Lango funkcijos gali būti naudojamos laiko eilutei suskaidyti į jos tendencijos, sezoniškumo ir likutines dalis. Tai apima judančių vidurkių apskaičiavimą tendencijai įvertinti, sezoninių modelių nustatymą ir tada tendencijos bei sezoninių dalių atėmimą, kad būtų gauti likučiai.
4. Anomalijų aptikimas
Lango funkcijos gali būti naudojamos anomalijoms aptikti laiko eilučių duomenyse, apskaičiuojant judančius vidurkius ir standartinius nuokrypius. Duomenų taškai, kurie patenka už tam tikro diapazono (pvz., +/- 3 standartiniai nuokrypiai nuo judančio vidurkio), gali būti pažymėti kaip anomalijos.
Praktiniai pavyzdžiai įvairiose pramonės šakose
1. Finansai
- Akcijų kainų analizė: Apskaičiuokite akcijų kainų judančius vidurkius, kad nustatytumėte tendencijas ir galimus pirkimo/pardavimo signalus.
- Rizikos valdymas: Apskaičiuokite portfelio grąžos slenkančius standartinius nuokrypius, kad įvertintumėte nepastovumą ir riziką.
- Sukčiavimo aptikimas: Nustatykite neįprastus operacijų modelius, palygindami dabartines operacijų sumas su istoriniais vidurkiais.
2. Mažmeninė prekyba
- Pardavimų prognozavimas: Naudokite judančius vidurkius ir suminius pardavimų duomenis, kad prognozuotumėte būsimas pardavimų tendencijas.
- Atsargų valdymas: Optimizuokite atsargų lygius analizuodami ankstesnius pardavimų duomenis ir nustatydami sezoninius modelius.
- Klientų segmentavimas: Segmentuokite klientus pagal jų pirkimo elgseną per laiką.
3. Gamyba
- Prognozuojama priežiūra: Naudokite jutiklių duomenis iš įrangos, kad numatytumėte galimus gedimus ir aktyviai suplanuotumėte priežiūrą.
- Kokybės kontrolė: Stebėkite gamybos procesus ir nustatykite nukrypimus nuo numatomo veikimo.
- Procesų optimizavimas: Analizuokite gamybos duomenis, kad nustatytumėte kliūtis ir optimizuotumėte gamybos procesus.
4. Sveikatos priežiūra
- Pacientų stebėjimas: Stebėkite pacientų gyvybinius požymius per laiką ir aptikite anomalijas, kurios gali rodyti sveikatos problemą.
- Ligų protrūkių aptikimas: Stebėkite ligų plitimą ir nustatykite galimus protrūkius.
- Sveikatos priežiūros išteklių paskirstymas: Paskirstykite išteklius atsižvelgdami į pacientų poreikius ir istorinius paklausos modelius.
Tinkamo įrankio pasirinkimas
Lango funkcijos yra prieinamos įvairiose duomenų apdorojimo priemonėse ir programavimo kalbose, įskaitant:
- SQL: Dauguma šiuolaikinių santykinių duomenų bazių valdymo sistemų (RDBMS) palaiko lango funkcijas, įskaitant PostgreSQL, MySQL (8.0+ versija), SQL Server, Oracle ir Amazon Redshift.
- Python: Pandas biblioteka suteikia puikų lango funkcijų palaikymą per
rolling()
irexpanding()
metodus. - Spark: Apache Spark SQL ir DataFrame API taip pat palaiko lango funkcijas.
Įrankio pasirinkimas priklauso nuo jūsų konkrečių poreikių ir techninės patirties. SQL puikiai tinka duomenims, saugomiems santykinėse duomenų bazėse, o Python ir Spark yra lankstesni apdorojant didelius duomenų rinkinius ir atliekant sudėtingą analizę.
Geriausia praktika
- Supraskite duomenis: Prieš taikydami lango funkcijas, kruopščiai supraskite savo laiko eilučių duomenų charakteristikas, įskaitant jo dažnumą, sezoniškumą ir galimus nuokrypius.
- Pasirinkite tinkamą lango dydį: Lango dydžio pasirinkimas priklauso nuo konkrečios analizės, kurią atliekate. Mažesnis lango dydis bus jautresnis trumpalaikiams svyravimams, o didesnis lango dydis išlygins duomenis ir pabrėš ilgesnes tendencijas.
- Apsvarstykite kraštutinius atvejus: Žinokite, kaip lango funkcijos tvarko kraštutinius atvejus, tokius kaip trūkstami duomenys arba laiko eilutės pradžia ir pabaiga. Norėdami tvarkyti šiuos atvejus, naudokite atitinkamas numatytąsias vertes arba filtravimo technikas.
- Optimizuokite našumą: Lango funkcijos gali būti skaičiuojamai brangios, ypač dideliems duomenų rinkiniams. Optimizuokite savo užklausas ir kodą, kad pagerintumėte našumą, pvz., naudodami atitinkamus indeksus ir skaidymo strategijas.
- Dokumentuokite savo kodą: Aiškiai dokumentuokite savo kodą ir užklausas, kad paaiškintumėte lango funkcijų paskirtį ir logiką. Tai palengvins kitiems suprasti ir prižiūrėti jūsų kodą.
Išvada
Lango funkcijos yra galingas įrankis laiko eilučių analizei, leidžiantis apskaičiuoti judančius vidurkius, sumines sumas, pirmavimo/atsilikimo vertes ir kitus laiko pagrindu apskaičiuojamus rodiklius. Įvaldę lango funkcijas, galite atskleisti vertingas įžvalgas iš savo laiko eilučių duomenų ir priimti labiau informacija pagrįstus sprendimus. Nesvarbu, ar analizuojate finansinius duomenis, pardavimų duomenis, jutiklių duomenis ar žiniatinklio srauto duomenis, lango funkcijos gali padėti nustatyti modelius, tendencijas ir anomalijas, kurias būtų sunku aptikti naudojant tradicines agregavimo technikas. Suprasdami pagrindines lango funkcijų sąvokas ir sintaksę bei laikydamiesi geriausios praktikos, galite efektyviai jas panaudoti norėdami išspręsti daugybę realaus pasaulio problemų įvairiose pramonės šakose.