การแสดงแนวโน้มรายเดือน
วาดรายได้รายเดือนเป็นกราฟเส้น ซ้อนค่าเฉลี่ยเคลื่อนที่ 3 เดือน และใส่คำอธิบายเดือนที่มีค่าสูงสุดและต่ำสุด
การแสดงแนวโน้มรายเดือน เป็นบทเรียน Pandas & NumPy Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Pandas & NumPy Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Pandas & NumPy Academy มีบทเรียนทั้งหมด 4 บทเรียน
การคำนวณยอดรายได้รวมรายเดือน
ก่อนสร้างแผนภูมิ ให้รวม DataFrame ยอดขายเป็นยอดรวมรายเดือน จัดกลุ่มตามคอลัมน์ Period year_month แล้วรวมรายได้ แปลง PeriodIndex เป็น DatetimeIndex ด้วย .to_timestamp() เพื่อให้ตัวจัดรูปแบบวันที่ของ Matplotlib แสดงป้ายกำกับบนแกนได้ถูกต้อง การเรียงตามดัชนีช่วยให้แผนภูมิเส้นดำเนินจากซ้ายไปขวาตามลำดับเวลา
import pandas as pd
import matplotlib.pyplot as plt
df = pd.read_parquet('sales_features.parquet')
monthly = df.groupby('year_month')['revenue'].sum().sort_index()
monthly.index = monthly.index.to_timestamp()
print(monthly.head())การสร้างแผนภูมิเส้นรายได้รายเดือน
สร้าง Figure และ Axes ด้วย plt.subplots(figsize=(12, 5)) แล้วเรียก ax.plot() เพื่อวาดแนวโน้มรายได้รายเดือน ใช้ marker='o' เพื่อวางจุดในแต่ละเดือน ทำให้มองเห็นข้อมูลแต่ละจุดได้แม้เส้นจะเรียบ ตั้งค่าสีและความกว้างของเส้นเพื่อให้แนวโน้มหลักโดดเด่นจากเส้นซ้อนที่อาจเพิ่มภายหลัง
fig, ax = plt.subplots(figsize=(12, 5))
ax.plot(monthly.index, monthly.values,
color='steelblue', linewidth=2, marker='o', markersize=5,
label='Monthly Revenue')
ax.set_title('Monthly Revenue Trend')
ax.set_xlabel('Month')
ax.set_ylabel('Revenue (USD)')
plt.tight_layout()
plt.show()การซ้อนค่าเฉลี่ยเคลื่อนที่ 3 เดือน
เส้นรายได้รายเดือนดิบอาจดูขรุขระเนื่องจากความผันผวนตามฤดูกาล ให้ซ้อน ค่าเฉลี่ยเคลื่อนที่ 3 เดือน ที่คำนวณด้วย monthly.rolling(3).mean() เพื่อแสดงแนวโน้มพื้นฐานให้ชัดเจนขึ้น วาดเป็นเส้นประด้วยสีที่ตัดกัน เพื่อให้โดดเด่นจากอนุกรมข้อมูลดิบโดยไม่บดบังข้อมูลนั้น
rolling_avg = monthly.rolling(3).mean()
ax.plot(rolling_avg.index, rolling_avg.values,
color='darkorange', linewidth=2, linestyle='--',
label='3-Month Moving Avg')
ax.legend()
plt.show()การใส่คำอธิบายเดือนที่มียอดสูงสุด
ใช้ ax.annotate() เพื่อทำเครื่องหมายเดือนที่มีรายได้สูงสุด ค้นหาจุดสูงสุดด้วย monthly.idxmax() และค่าของจุดนั้นด้วย monthly.max() ลูกศรคำอธิบายจะชี้จากป้ายข้อความไปยังจุดข้อมูลสูงสุด ทำให้ผู้อ่านแผนภูมิเห็นข้อมูลสำคัญได้ทันที รวมถึงผู้ที่ได้รับแผนภูมิในรูปแบบ PNG หรือ PDF
peak_date = monthly.idxmax()
peak_val = monthly.max()
ax.annotate(f'Peak: ${peak_val:,.0f}',
xy=(peak_date, peak_val),
xytext=(peak_date, peak_val * 1.1),
arrowprops=dict(arrowstyle='->', color='red'),
color='red', fontsize=10)
plt.show()การใส่คำอธิบายเดือนที่มียอดต่ำสุด
ในทำนองเดียวกัน ให้ทำเครื่องหมายเดือนที่มีรายได้ต่ำที่สุดโดยใช้ monthly.idxmin() เพื่อระบุรูปแบบตามฤดูกาลหรือความผิดปกติที่อาจเกิดขึ้น การใส่คำอธิบายประกอบทั้งจุดสูงสุดและจุดต่ำสุดช่วยให้เห็นภาพได้ครบถ้วน ทำให้ผู้มีส่วนได้ส่วนเสียเห็นไม่เพียงแค่เดือนที่ดีที่สุด แต่ยังเห็นด้วยว่ารายได้อาจลดลงได้มากเพียงใด ซึ่งเป็นข้อมูลสำคัญสำหรับการวางแผนกระแสเงินสด
trough_date = monthly.idxmin()
trough_val = monthly.min()
ax.annotate(f'Trough: ${trough_val:,.0f}',
xy=(trough_date, trough_val),
xytext=(trough_date, trough_val * 0.85),
arrowprops=dict(arrowstyle='->', color='navy'),
color='navy', fontsize=10)
plt.show()การจัดรูปแบบป้ายกำกับขีดแบ่งวันที่
ป้ายกำกับขีดแบ่งวันที่เริ่มต้นของ Matplotlib มักซ้อนทับกันหรือใช้รูปแบบที่อ่านได้ยาก ให้นำเข้า mdates จาก matplotlib แล้วกำหนด MonthLocator และ DateFormatter เพื่อควบคุมความถี่ของขีดแบ่งและรูปแบบป้ายกำกับ การหมุนป้ายกำกับขีดแบ่ง 45 องศาจะช่วยป้องกันการซ้อนทับกันบนแกนที่แสดงข้อมูล 12 เดือน
import matplotlib.dates as mdates
ax.xaxis.set_major_locator(mdates.MonthLocator())
ax.xaxis.set_major_formatter(mdates.DateFormatter('%b %Y'))
plt.xticks(rotation=45, ha='right')
plt.tight_layout()
plt.show()การเพิ่มพื้นที่แรเงาสำหรับไตรมาสที่ 4
เน้นช่วงไตรมาสที่ 4 (ตุลาคม–ธันวาคม) ด้วยพื้นหลังแรเงาโดยใช้ ax.axvspan() วิธีนี้ทำให้มองเห็นรูปแบบตามฤดูกาลได้ทันที หากจุดสูงสุดอยู่ในพื้นที่แรเงาอย่างสม่ำเสมอ ไตรมาสที่ 4 ก็เป็นช่วงเวลาสำคัญสำหรับการขายที่ควรทำโปรโมชั่น พารามิเตอร์ alpha ใช้ควบคุมความโปร่งใสของพื้นที่แรเงา
import datetime
q4_start = datetime.datetime(2023, 10, 1)
q4_end = datetime.datetime(2023, 12, 31)
ax.axvspan(q4_start, q4_end, alpha=0.15, color='gold', label='Q4')
ax.legend()
plt.show()การสร้างกราฟรายได้ตามหมวดหมู่เมื่อเวลาผ่านไป
สร้างกราฟหลายเส้น โดยให้แต่ละเส้นแทนหมวดหมู่สินค้า จัดรูปแบบ DataFrame รายเดือนแยกตามหมวดหมู่ใหม่ให้คอลัมน์เป็นหมวดหมู่และดัชนีเป็นเวลา จากนั้นวนซ้ำผ่านคอลัมน์และเรียกใช้ ax.plot() สำหรับแต่ละคอลัมน์ เมื่อเรียกใช้ซ้ำกับ Axes เดียวกัน Matplotlib จะกำหนดสีที่แตกต่างกันให้แต่ละเส้นโดยอัตโนมัติ
monthly_cat = df.groupby(['year_month', 'category'])['revenue'].sum().unstack('category')
monthly_cat.index = monthly_cat.index.to_timestamp()
fig, ax = plt.subplots(figsize=(12, 6))
for col in monthly_cat.columns:
ax.plot(monthly_cat.index, monthly_cat[col], label=col, linewidth=1.5)
ax.legend(loc='upper left', fontsize=8)
ax.set_title('Monthly Revenue by Category')
plt.tight_layout()
plt.show()กราฟแท่งซ้อนสำหรับรายได้รายเดือน
กราฟแท่งซ้อนแสดงรายได้รวมรายเดือน พร้อมทั้งแสดงสัดส่วนรายได้ของแต่ละหมวดหมู่ในแท่งเดียวกัน ใช้ monthly_cat.plot(kind='bar', stacked=True, ax=ax) กับ DataFrame ที่จัดรูปแบบใหม่โดยตรง กราฟแท่งซ้อนเหมาะที่สุดเมื่อมีหมวดหมู่น้อยกว่า 6 หมวดหมู่ มิฉะนั้นสีต่าง ๆ จะจำแนกได้ยาก
fig, ax = plt.subplots(figsize=(12, 5))
monthly_cat.plot(kind='bar', stacked=True, ax=ax, colormap='tab10')
ax.set_title('Monthly Revenue by Category (Stacked)')
ax.set_xlabel('Month')
ax.set_ylabel('Revenue')
ax.legend(loc='upper left', fontsize=8)
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()อัตราการเติบโตเมื่อเทียบกับเดือนก่อน
พล็อตอัตราการเติบโตเป็นเปอร์เซ็นต์เมื่อเทียบกับเดือนก่อนควบคู่กับรายได้เพื่อให้เห็นบริบท ตัวอย่างเช่น แท่งข้อมูลของเดือนมกราคมที่ดูเล็กอาจหมายถึงการเติบโต 20% จากเดือนก่อนหน้า คำนวณการเติบโตด้วย monthly.pct_change() * 100 แล้วพล็อตบนแกน y ที่สองโดยใช้ ax.twinx() เพื่อใช้แกน x ร่วมกันโดยไม่ทำให้หน่วยปะปนกัน
growth = monthly.pct_change() * 100
fig, ax1 = plt.subplots(figsize=(12, 5))
ax2 = ax1.twinx()
ax1.bar(monthly.index, monthly.values, width=20, color='steelblue', alpha=0.6, label='Revenue')
ax2.plot(growth.index, growth.values, color='red', marker='o', label='MoM Growth %')
ax1.set_ylabel('Revenue')
ax2.set_ylabel('MoM Growth %')
plt.title('Revenue and Month-over-Month Growth')
plt.tight_layout()
plt.show()การบันทึกภาพกราฟสำหรับรายงาน
ใช้ fig.savefig('monthly_trend.png', dpi=150, bbox_inches='tight') เพื่อสร้างไฟล์ PNG ความละเอียดสูงที่เหมาะสำหรับงานนำเสนอหรือแดชบอร์ดบนเว็บ อาร์กิวเมนต์ bbox_inches='tight' จะตัดพื้นที่ว่างสีขาวส่วนเกินออก และ dpi=150 ทำให้ภาพคมชัดโดยไม่ทำให้ไฟล์มีขนาดใหญ่เกินไป ควรบันทึกเป็น PDF ด้วยสำหรับรายงานคุณภาพระดับงานพิมพ์
fig.savefig('monthly_trend.png', dpi=150, bbox_inches='tight')
fig.savefig('monthly_trend.pdf', bbox_inches='tight')
print('Figure saved as PNG and PDF')ตรวจสอบความเข้าใจ
ทดสอบความเข้าใจแนวคิดด้านการวิเคราะห์ข้อมูลจากบทเรียนนี้
สรุปบทเรียน
ในบทเรียนนี้ คุณได้เรียนรู้เกี่ยวกับ: การคำนวณยอดรายได้รวมรายเดือนและพล็อตเป็นกราฟเส้น การซ้อนทับค่าเฉลี่ยเคลื่อนที่และใส่คำอธิบายประกอบเดือนที่มีค่าสูงสุดและต่ำสุด และ การบันทึกภาพกราฟคุณภาพระดับงานเผยแพร่เป็น PNG และ PDF บทถัดไปเราจะสำรวจการแบ่งช่วงการใช้งานและลำดับเหตุการณ์ในข้อมูลพฤติกรรมผู้ใช้
เรียนรู้ Python ด้วย AI tutor — ฟรี
เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป
- คอร์ส
- 30
- บทเรียน
- 120
คำถามที่พบบ่อย
บทเรียน “การแสดงแนวโน้มรายเดือน” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การแสดงแนวโน้มรายเดือน” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Pandas & NumPy Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Pandas & NumPy Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การแสดงแนวโน้มรายเดือน”
วาดรายได้รายเดือนเป็นกราฟเส้น ซ้อนค่าเฉลี่ยเคลื่อนที่ 3 เดือน และใส่คำอธิบายเดือนที่มีค่าสูงสุดและต่ำสุด คุณปฏิบัติ Pandas & NumPy Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Pandas & NumPy Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Pandas & NumPy Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน
บทเรียน “การแสดงแนวโน้มรายเดือน” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Pandas & NumPy Academy นี้ได้ไหม
ได้ บทเรียน Pandas & NumPy Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การโหลดและตรวจสอบชุดข้อมูลการขาย
- การคำนวณรายได้และการสร้างคุณลักษณะ
- การวิเคราะห์ GroupBy ตามภูมิภาคและหมวดหมู่
- การแสดงแนวโน้มรายเดือน