การซ้อนค่าเฉลี่ยเคลื่อนที่บนข้อมูลรายวันช่วยลดความผันผวนระยะสั้นแต่ยังคงแนวโน้มหลักไว้ pandas.Series.rolling ทำให้คำนวณค่าดังกล่าวได้สะดวก
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
rng = pd.date_range("2024-01-01", periods=60, freq="D")
sales = pd.Series(np.random.normal(loc=200, scale=25, size=len(rng))).cumsum() + 500
rolling = sales.rolling(window=7, center=True).mean()
fig, ax = plt.subplots(figsize=(7, 4))
ax.plot(rng, sales, label="ยอดขายรายวัน", color="#9ca3af", linewidth=1.5, alpha=0.7)
ax.plot(rng, rolling, label="ค่าเฉลี่ยเคลื่อนที่ 7 วัน", color="#2563eb", linewidth=2.5)
ax.set_ylabel("ยอดขาย (หมื่นเยน)")
ax.set_title("มองเทรนด์ยอดขายด้วยค่าเฉลี่ยเคลื่อนที่")
ax.legend()
ax.grid(alpha=0.3)
fig.tight_layout()
plt.show()

สิ่งที่ควรจำ #
- กำหนดขนาดหน้าต่างให้ตรงกับโจทย์ เช่น 7 วันสำหรับมุมมองรายสัปดาห์หรือ 30 วันสำหรับรายเดือน
- ควรแสดงข้อมูลดิบควบคู่กัน เพื่อไม่ให้พลาดฤดูกาลหรือเหตุการณ์พิเศษที่เกิดขึ้นฉับพลัน
- ถ้าชุดข้อมูลมีค่าว่าง ให้จัดการเติมก่อน จะได้เส้นค่าเฉลี่ยที่ไม่สะดุด