Purata Bergerak Merentas Tetingkap Gelongsor
Purata bergulir untuk N tempoh dengan BETWEEN PRECEDING AND CURRENT ROW
Purata Bergerak Merentas Tetingkap Gelongsor ialah pelajaran Persediaan Temu Duga Pengaturcaraan percuma di CoddyKit. Ini ialah pelajaran 3 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Persediaan Temu Duga Pengaturcaraan, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Persediaan Temu Duga Pengaturcaraan merangkumi sejumlah 4 pelajaran.
Soalan Purata Bergerak
Penganalisis sering ditanya soalan ini: "Kira purata bergerak 7 hari bagi hasil." Purata bergerak (atau purata gelongsor) melicinkan data harian yang bising dengan mempuratakan setiap titik bersama titik berdekatan yang terkini.
Jawapan bertaraf temu duga ialah AVG bertetingkap dengan bingkai gelongsor yang dinyatakan secara jelas. Kemahiran utama ialah memilih sempadan bingkai supaya tetingkap bergerak dengan betul mengikut susunan.
Corak Teras
Purata bergerak ialah AVG(value) OVER (ORDER BY ... ROWS BETWEEN n PRECEDING AND CURRENT ROW). Bingkai itu bergerak: pada setiap baris, bingkai merangkumi baris semasa dan n baris sebelumnya.
Untuk tetingkap 7 hari pada baris harian, undur 6 baris dan sertakan baris semasa, menjadikan jumlahnya 7 baris. Kesilapan satu per satu di sini ialah kesilapan paling biasa yang dikesan oleh penemu duga.
SELECT
sale_date,
amount,
AVG(amount) OVER (
ORDER BY sale_date
ROWS BETWEEN 6 PRECEDING AND CURRENT ROW
) AS moving_avg_7d
FROM daily_sales;Mengira Saiz Tetingkap Dengan Betul
Saiz tetingkap sama dengan preceding + 1 (+1 ialah baris semasa). Jadi:
- Tetingkap 3 baris:
ROWS BETWEEN 2 PRECEDING AND CURRENT ROW - Tetingkap 7 baris:
ROWS BETWEEN 6 PRECEDING AND CURRENT ROW - Tetingkap 30 baris:
ROWS BETWEEN 29 PRECEDING AND CURRENT ROW
Ucapkan aritmetik ini dengan jelas dalam temu duga supaya panel melihat bahawa Anda membuat keputusan dengan teliti, bukan meneka.
Tetingkap Berpusat berbanding Tetingkap Ke Belakang
Contoh di atas ialah purata ke belakang: purata itu hanya melihat ke belakang, jadi ia bersifat sebab-akibat dan selamat untuk papan pemuka ramalan.
Purata berpusat melihat ke kedua-dua arah, contohnya ROWS BETWEEN 3 PRECEDING AND 3 FOLLOWING untuk tetingkap berpusat 7 baris. Tetingkap berpusat melicinkan data dengan lebih simetri tetapi tidak boleh dikira untuk baris paling terkini dalam masa nyata. Nyatakan pilihan yang diperlukan oleh kes penggunaan tersebut.
SELECT
sale_date,
AVG(amount) OVER (
ORDER BY sale_date
ROWS BETWEEN 3 PRECEDING AND 3 FOLLOWING
) AS centered_avg_7
FROM daily_sales;Kesan Pada Tepi Tetingkap
Pada permulaan data, bingkai penuh masih belum tersedia. Untuk baris 1 bagi purata bergerak ke belakang 7 hari, hanya 1 baris tersedia, jadi AVG hanya mempuratakan nilai itu.
Ini bermakna baris awal menunjukkan purata "pemanasan awal" berdasarkan baris yang lebih sedikit. Penemu duga mungkin bertanya cara menanganinya. Terdapat dua pilihan: terima tetingkap separa, atau jangan paparkan baris awal dengan mewajibkan bilangan penuh.
Menyembunyikan Tetingkap Separa
Jika pihak perniagaan mahukan NULL sehingga bingkai penuh tersedia, gunakan COUNT(*) pada bingkai yang sama dan kosongkan tetingkap pendek dengan ungkapan CASE.
Ini ialah sentuhan kemas yang menunjukkan Anda memikirkan ketepatan pada sempadan, iaitu perincian yang sering terlepas daripada ramai calon.
SELECT
sale_date,
CASE WHEN COUNT(*) OVER w = 7
THEN AVG(amount) OVER w
END AS moving_avg_7d
FROM daily_sales
WINDOW w AS (
ORDER BY sale_date
ROWS BETWEEN 6 PRECEDING AND CURRENT ROW
);Menggunakan Semula Bingkai Dengan WINDOW
Pertanyaan sebelumnya menggunakan klausa WINDOW bernama. Apabila bingkai yang sama muncul beberapa kali, mentakrifkannya sekali sebagai WINDOW w AS (...) dan merujuk kepadanya dengan OVER w menjadikan pertanyaan mematuhi DRY dan mudah dibaca.
PostgreSQL, MySQL 8 dan Pelayan SQL menyokong tetingkap bernama. Menggunakannya dalam temu duga menunjukkan kefasihan yang melebihi sekadar menyalin dan menampal fungsi tetingkap.
SELECT
sale_date,
AVG(amount) OVER w AS avg_7d,
SUM(amount) OVER w AS sum_7d
FROM daily_sales
WINDOW w AS (
ORDER BY sale_date
ROWS BETWEEN 6 PRECEDING AND CURRENT ROW
);Perangkap Hari Kalendar berbanding Baris
Perangkap yang halus: jika jadual mempunyai hari yang tiada, ROWS 6 PRECEDING merangkumi 7 baris direkodkan terakhir, yang mungkin meliputi lebih daripada 7 hari kalendar.
Untuk purata 7 hari berasaskan kalendar yang sebenar dan mengambil kira jurang, gunakan RANGE dengan ofset selang, atau cantumkan dahulu dengan siri tarikh lengkap supaya setiap hari mempunyai baris. Menyebut perbezaan ini ialah tepatnya pemahaman ROWS-berbanding-RANGE daripada pelajaran sebelumnya.
SELECT
sale_date,
AVG(amount) OVER (
ORDER BY sale_date
RANGE BETWEEN INTERVAL '6 days' PRECEDING AND CURRENT ROW
) AS calendar_avg_7d
FROM daily_sales;Purata Bergerak Mengikut Kumpulan
Sama seperti jumlah berjalan, purata bergerak biasanya perlu ditetapkan semula bagi setiap entiti. Tambahkan PARTITION BY supaya setiap produk atau kedai mendapat tetingkap bergerak sendiri yang tidak tertumpah merentas kumpulan.
Bingkai dan susunan beroperasi secara berasingan dalam setiap partisi, jadi baris pertama bagi setiap kumpulan memulakan pemanasan awalnya sendiri dengan betul.
SELECT
product_id,
sale_date,
AVG(amount) OVER (
PARTITION BY product_id
ORDER BY sale_date
ROWS BETWEEN 6 PRECEDING AND CURRENT ROW
) AS product_ma_7d
FROM daily_sales;Pelicinan Dalam Tindakan
Mengapa perlu berbuat demikian? Hasil harian mempunyai turun naik yang mendadak; purata bergerak mendedahkan arah aliran. Jawapan penganalisis yang lazim memadankan nilai mentah dengan garis yang dilicinkan supaya papan pemuka menunjukkan kedua-dua isyarat dan hingar.
Anda juga boleh membandingkan purata bergerak pendek dan panjang (contohnya 7 hari berbanding 30 hari) untuk mengesan momentum, iaitu padanan SQL bagi persilangan purata bergerak.
SELECT
sale_date,
amount,
AVG(amount) OVER (ORDER BY sale_date
ROWS BETWEEN 6 PRECEDING AND CURRENT ROW) AS ma_7,
AVG(amount) OVER (ORDER BY sale_date
ROWS BETWEEN 29 PRECEDING AND CURRENT ROW) AS ma_30
FROM daily_sales;Senarai Semak Temu Duga
Untuk menjawab soalan purata bergerak dengan baik, sertakan:
AVG OVER (ORDER BY ... ROWS BETWEEN n-1 PRECEDING AND CURRENT ROW).- Saiz tetingkap = baris sebelumnya + 1.
- Pilihan antara tetingkap ke belakang dan berpusat.
- Pemanasan awal tetingkap separa dan cara menyembunyikannya.
ROWSberbandingRANGEapabila terdapat hari yang tiada.PARTITION BYuntuk menetapkan semula bagi setiap entiti.
Semakan Pantas
Pilih bingkai untuk purata bergerak ke belakang 7 hari pada baris harian.
Ringkasan: Purata Bergerak
Purata bergerak ialah AVG(value) OVER (ORDER BY ... ROWS BETWEEN n-1 PRECEDING AND CURRENT ROW), dengan saiz tetingkap bersamaan baris sebelumnya ditambah satu. Pilih tetingkap ke belakang atau berpusat mengikut kes penggunaan, kendalikan baris pemanasan awal dengan pengawal COUNT, dan tukar kepada selang RANGE apabila jurang kalendar penting.
Tetapkan semula bagi setiap entiti dengan PARTITION BY dan gunakan semula bingkai dengan WINDOW bernama. Seterusnya, kita menukarkan jumlah terkumpul kepada peratusan dengan bahagian jumlah berjalan.
Pelajari Persediaan Temu Duga Pengaturcaraan dengan tutor kecerdasan buatan — percuma
Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.
- Kursus
- 90
- Pelajaran
- 360
Soalan Lazim
Adakah pelajaran “Purata Bergerak Merentas Tetingkap Gelongsor” percuma?
Ya — teks penuh “Purata Bergerak Merentas Tetingkap Gelongsor” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus Persediaan Temu Duga Pengaturcaraan, tingkat taraf kepada CoddyKit PRO. Kursus Persediaan Temu Duga Pengaturcaraan merangkumi sejumlah 4 pelajaran.
Apakah yang akan saya pelajari dalam “Purata Bergerak Merentas Tetingkap Gelongsor”?
Purata bergulir untuk N tempoh dengan BETWEEN PRECEDING AND CURRENT ROW Anda berlatih Persediaan Temu Duga Pengaturcaraan menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.
Adakah saya memerlukan pengalaman untuk memulakan Persediaan Temu Duga Pengaturcaraan?
Tiada pengalaman terdahulu diperlukan. Pembelajaran Persediaan Temu Duga Pengaturcaraan di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 3 daripada 4.
Berapa lamakah pelajaran “Purata Bergerak Merentas Tetingkap Gelongsor” diambil?
Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.
Bolehkah saya menulis dan menjalankan kod dalam pelajaran Persediaan Temu Duga Pengaturcaraan ini?
Ya. Setiap pelajaran Persediaan Temu Duga Pengaturcaraan menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.
Semua pelajaran dalam kursus ini
- Jumlah Terkumpul Dengan Bingkai Tetingkap
- Pembingkaian ROWS berbanding RANGE
- Purata Bergerak Merentas Tetingkap Gelongsor
- Taburan Kumulatif dan Peratusan Jumlah