การแสดงผลขั้นสุดท้ายและการส่งออกรายงาน
สร้างภาพ Matplotlib หลายแผงพร้อมแผนภูมิที่มีคำอธิบายประกอบ ส่งออกเป็น PNG และ PDF และเขียนสรุปแบบมีโครงสร้างลงในไฟล์มาร์กดาวน์
การแสดงผลขั้นสุดท้ายและการส่งออกรายงาน เป็นบทเรียน Pandas & NumPy Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Pandas & NumPy Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Pandas & NumPy Academy มีบทเรียนทั้งหมด 4 บทเรียน
ผลงานส่งมอบฉบับสมบูรณ์
ขั้นตอนสุดท้ายของโครงงานเปลี่ยน KPI ที่คำนวณแล้วให้เป็นผลงานส่งมอบที่เรียบร้อยและพร้อมแบ่งปัน ได้แก่ ภาพ Matplotlib แบบหลายแผงพร้อมแผนภูมิที่มีคำอธิบายประกอบ และรายงานมาร์กดาวน์ที่มีโครงสร้างพร้อมการอ้างอิงภาพประกอบ นี่คือสิ่งที่ผู้มีส่วนได้ส่วนเสียจะได้รับจริง ได้แก่ ภาพที่เข้าใจง่ายและสรุปสาระสำคัญเป็นเรื่องราว การแสดงภาพข้อมูลที่ดีช่วยเปลี่ยนตัวเลขให้เป็นข้อมูลเชิงลึก ส่วนโครงสร้างรายงานที่ดีช่วยทำให้ข้อมูลเชิงลึกเหล่านั้นนำไปปฏิบัติได้ บทเรียนนี้ครอบคลุมสถาปัตยกรรมของภาพ การใส่คำอธิบายประกอบ การส่งออกเป็น PNG/PDF และการสร้างมาร์กดาวน์ที่มีโครงสร้าง
การตั้งค่าภาพแบบหลายแผง
ใช้ plt.subplots() ร่วมกับ figsize และ gridspec_kw เพื่อสร้างภาพที่มีแผงขนาดแตกต่างกัน รูปแบบรายงานสำหรับผู้บริหารที่ใช้กันทั่วไปคือ แผนภูมิแนวโน้มขนาดกว้างอยู่ด้านบน และฮีตแมปการคงอยู่กับแผนภูมิแท่งตามภูมิภาคอยู่ในแถวล่าง กำหนดรูปแบบให้สอดคล้องกันตั้งแต่ต้นด้วย plt.style.use('seaborn-v0_8-whitegrid') เพื่อให้ได้แผนภูมิที่สะอาดและดูเป็นมืออาชีพ โดยไม่ต้องจัดรูปแบบองค์ประกอบแต่ละรายการด้วยตนเอง
import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec
plt.style.use('seaborn-v0_8-whitegrid')
# 2x2 layout with custom row heights
fig = plt.figure(figsize=(16, 12))
gs = gridspec.GridSpec(2, 2,
height_ratios=[1, 1.2],
hspace=0.4, wspace=0.35)
ax_trend = fig.add_subplot(gs[0, :]) # full width top row
ax_heatmap = fig.add_subplot(gs[1, 0]) # bottom left
ax_bar = fig.add_subplot(gs[1, 1]) # bottom right
print('Figure with 3 panels created.')แผงที่ 1: เส้นแนวโน้มรายได้รายเดือน
พล็อตรายได้รวมรายเดือนเป็นเส้นพร้อมจุด ทำค่าเฉลี่ยเคลื่อนที่ 3 เดือนซ้อนทับ และระบายสีพื้นที่ใต้เส้นค่าจริง ใส่คำอธิบายประกอบให้กับเดือนที่มีค่าสูงสุดและต่ำสุดด้วยลูกศรและข้อความโดยใช้ ax.annotate() วิธีนี้ช่วยสื่อเรื่องราวได้ทันทีว่า รายได้แข็งแกร่งที่สุดเมื่อใด ลดลงเมื่อใด และแนวโน้มระยะยาวเป็นบวกหรือไม่ ใช้สีที่แยกค่าจริงออกจากค่าที่ปรับให้ราบเรียบได้อย่างชัดเจนโดยไม่ขัดตา
import pandas as pd
import matplotlib.pyplot as plt
monthly = pd.read_parquet('output/kpi_monthly_category_revenue.parquet')
monthly_total = monthly.sum(axis=1)
ax = plt.gca()
ax.plot(monthly_total.index, monthly_total.values,
marker='o', linewidth=2, color='#2196F3', label='Monthly Revenue')
ax.plot(monthly_total.index,
monthly_total.rolling(3, min_periods=1).mean().values,
linewidth=2, linestyle='--', color='#FF5722', label='3-Month Avg')
ax.fill_between(monthly_total.index, monthly_total.values, alpha=0.1, color='#2196F3')
# Annotate peak
peak_idx = monthly_total.idxmax()
ax.annotate(f'Peak: ${monthly_total[peak_idx]/1e3:.0f}K',
xy=(peak_idx, monthly_total[peak_idx]),
xytext=(0, 20), textcoords='offset points',
arrowprops=dict(arrowstyle='->', color='#E91E63'),
color='#E91E63', fontsize=10)
ax.set_title('Monthly Revenue Trend', fontsize=14, fontweight='bold')
ax.legend()
plt.show()แผงที่ 2: ฮีตแมปการคงอยู่ของกลุ่มลูกค้า
แสดงภาพเมทริกซ์การคงอยู่ของกลุ่มลูกค้าเป็นฮีตแมปที่ใช้รหัสสีด้วยซีบอร์น ปรับสเกลค่าให้ 100% (ช่วงที่ 0) เป็นสีสว่างที่สุด และให้อัตราการคงอยู่ที่ลดลงมีสีเข้มขึ้นตามลำดับ ปิดบังเซลล์ NaN (ช่วงเวลาในอนาคตที่ยังไม่เกิดขึ้น) เพื่อให้แผนภูมิดูสะอาด ใส่คำอธิบายประกอบในแต่ละเซลล์ด้วยค่าเปอร์เซ็นต์เพื่อให้อ่านได้อย่างรวดเร็ว แผนภูมินี้เป็นหนึ่งในเครื่องมือที่มีประโยชน์ที่สุดสำหรับทำความเข้าใจรูปแบบความภักดีของลูกค้า
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
retention = pd.read_parquet('output/kpi_cohort_retention.parquet')
fig, ax = plt.subplots(figsize=(10, 6))
sns.heatmap(
retention,
annot=True,
fmt='.0%',
cmap='YlOrRd_r',
mask=retention.isna(),
linewidths=0.5,
ax=ax,
cbar_kws={'label': 'Retention Rate'}
)
ax.set_title('Cohort Retention Matrix', fontsize=14, fontweight='bold')
ax.set_xlabel('Months After First Purchase')
ax.set_ylabel('Cohort Month')
plt.tight_layout()
plt.show()แผงที่ 3: แผนภูมิแท่งแนวนอนของภูมิภาคชั้นนำ
แผนภูมิแท่งแนวนอนเหมาะอย่างยิ่งสำหรับเปรียบเทียบชื่อภูมิภาค (ป้ายข้อความบนแกน y) ตามรายได้ เรียงแท่งจากมากไปน้อยเพื่อให้ภูมิภาคที่ดีที่สุดอยู่ด้านบน เพิ่มป้ายค่ารายได้ที่ปลายแท่งแต่ละแท่งโดยใช้ ax.text() ใช้ชุดสีแบบไล่ความแตกต่างตามสัดส่วนรายได้ โดยให้ภูมิภาคอันดับหนึ่งมีสีเข้มที่สุด แผนภูมินี้สื่อให้เห็นทันทีถึงการกระจุกตัวทางภูมิศาสตร์และผลการดำเนินงานของแต่ละภูมิภาค
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.cm as cm
import numpy as np
region_kpi = pd.read_parquet('output/kpi_region_summary.parquet')
top5 = region_kpi.head(5).sort_values('total_revenue')
fig, ax = plt.subplots(figsize=(8, 5))
colors = cm.Blues(np.linspace(0.4, 0.9, len(top5)))
bars = ax.barh(top5['region'], top5['total_revenue'], color=colors)
for bar, val in zip(bars, top5['total_revenue']):
ax.text(bar.get_width() * 1.01, bar.get_y() + bar.get_height()/2,
f'${val/1e3:.0f}K', va='center', fontsize=9)
ax.set_title('Top 5 Regions by Revenue', fontsize=13, fontweight='bold')
ax.set_xlabel('Total Revenue ($)')
ax.spines['top'].set_visible(False)
ax.spines['right'].set_visible(False)
plt.tight_layout()
plt.show()การบันทึกภาพแบบหลายแผง
ส่งออกภาพที่เสร็จสมบูรณ์เป็นสองรูปแบบ ได้แก่ PNG สำหรับฝังในงานนำเสนอและรายงานบนเว็บ และ PDF สำหรับการพิมพ์ความละเอียดสูง ใช้ dpi=150 หรือสูงกว่าสำหรับ PNG เพื่อให้ภาพคมชัดบนหน้าจอ ส่ง bbox_inches='tight' เพื่อป้องกันไม่ให้ป้ายถูกตัดที่ขอบภาพ บันทึกไฟล์ไปยังไดเรกทอรีผลลัพธ์ที่กำหนดไว้ในขั้นตอนการตั้งค่าโครงการ
import matplotlib.pyplot as plt
# After assembling all panels in the figure
fig.suptitle('2024 Sales Performance Report', fontsize=16,
fontweight='bold', y=1.02)
# Save as PNG (for web/presentations)
fig.savefig('output/report_figure.png',
dpi=150,
bbox_inches='tight',
facecolor='white')
# Save as PDF (for print)
fig.savefig('output/report_figure.pdf',
bbox_inches='tight',
facecolor='white')
print('Figures saved:')
print(' output/report_figure.png')
print(' output/report_figure.pdf')การเขียนรายงานมาร์กดาวน์ที่มีโครงสร้าง
สร้างรายงานข้อความโดยเขียนไฟล์มาร์กดาวน์ที่มีโครงสร้างด้วยโปรแกรม ใส่ส่วนหัว สรุปสำหรับผู้บริหารที่มี KPI หลัก ข้อค้นพบสำคัญจากแต่ละส่วนการวิเคราะห์ และการอ้างอิงไปยังไฟล์ภาพที่บันทึกไว้ การสร้างรายงานจากโค้ดแทนการเขียนด้วยตนเองทำให้ทุกครั้งที่เรียกใช้ได้รายงานฉบับใหม่ที่ถูกต้องและสะท้อนค่าที่คำนวณจริง ใช้ f-string ของไพธอนเพื่อแทรกตัวเลขที่คำนวณแล้วลงในข้อความโดยตรง
import pandas as pd
from datetime import datetime
df = pd.read_parquet('output/analysis_ready.parquet')
region_kpi = pd.read_parquet('output/kpi_region_summary.parquet')
retention = pd.read_parquet('output/kpi_cohort_retention.parquet')
report = f'''
# 2024 Sales Performance Report
Generated: {datetime.now().strftime('%Y-%m-%d %H:%M')}
## Executive Summary
- **Total Revenue**: ${df['revenue'].sum():,.0f}
- **Total Orders**: {df['order_id'].nunique():,}
- **Unique Customers**: {df['customer_id'].nunique():,}
- **Top Region**: {region_kpi.iloc[0]['region']} (${region_kpi.iloc[0]['total_revenue']:,.0f})
- **Average Month-3 Retention**: {retention.get(3, pd.Series([0])).mean():.1%}
## Key Findings
1. Revenue grew steadily through the year with a peak in October.
2. The top region accounts for {region_kpi.iloc[0]['revenue_share']:.0%} of total revenue.
3. Month-3 cohort retention averages {retention.get(3, pd.Series([0])).mean():.1%}.
## Figures

'''
with open('output/report.md', 'w') as f:
f.write(report)
print('Report written to output/report.md')การเพิ่มคำอธิบายประกอบให้แผนภูมิ
แผนภูมิที่มีประสิทธิภาพจะถ่ายทอดเรื่องราวผ่านคำอธิบายประกอบ ใช้ ax.axvline() เพื่อทำเครื่องหมายเหตุการณ์สำคัญ (การเปิดตัวผลิตภัณฑ์หรือการเปลี่ยนราคา) ใช้ ax.axhspan() เพื่อระบายสีช่วงภาวะเศรษฐกิจถดถอย และใช้ ax.annotate() เพื่อเน้นจุดข้อมูลที่น่าสนใจด้วยข้อความและลูกศร กำกับแกนด้วยหน่วย (ax.set_ylabel('Revenue ($)')) เพิ่มชื่อเรื่องที่สื่อความหมาย ใส่คำอธิบายสัญลักษณ์เมื่อแสดงหลายชุดข้อมูล และจัดรูปแบบป้ายกำกับขีดมาตราส่วนให้อ่านง่ายด้วย ax.yaxis.set_major_formatter(FuncFormatter(...))
import matplotlib.pyplot as plt
import matplotlib.ticker as mticker
import pandas as pd
monthly_total = pd.read_parquet('output/kpi_monthly_category_revenue.parquet').sum(axis=1)
fig, ax = plt.subplots(figsize=(12, 5))
ax.plot(monthly_total.index, monthly_total.values, linewidth=2.5, color='#1565C0')
# Format y-axis as $K
ax.yaxis.set_major_formatter(
mticker.FuncFormatter(lambda x, _: f'${x/1e3:.0f}K')
)
# Mark a hypothetical event
ax.axvline(x='2024-06', color='red', linestyle=':', alpha=0.6)
ax.text('2024-06', monthly_total.max() * 0.95,
' Campaign\n Launch', color='red', fontsize=9)
ax.set_title('Monthly Revenue 2024', fontsize=14, fontweight='bold')
ax.set_xlabel('Month')
ax.set_ylabel('Revenue')
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()การส่งออกตารางข้อมูลไปยังเอ็กเซล
ผู้มีส่วนได้ส่วนเสียบางรายชอบเอ็กเซลมากกว่ารายงานมาร์กดาวน์ ใช้ pd.ExcelWriter เพื่อส่งออก DataFrames หลายรายการไปยังแผ่นงานต่าง ๆ ในสมุดงานเอ็กเซลไฟล์เดียว นี่คือผลงานส่งมอบระดับมืออาชีพสำหรับผู้มีส่วนได้ส่วนเสียทางธุรกิจที่ต้องการสำรวจข้อมูลด้วยตนเอง ใช้ startrow และ startcol เพื่อจัดวางตารางภายในแผ่นงาน และเพิ่มแผ่นงาน 'Summary' ที่มีตัวเลขระดับบนสุดเป็นแท็บแรก
import pandas as pd
region_kpi = pd.read_parquet('output/kpi_region_summary.parquet')
retention = pd.read_parquet('output/kpi_cohort_retention.parquet')
product_rank = pd.read_parquet('output/kpi_product_ranking.parquet')
with pd.ExcelWriter('output/sales_report_2024.xlsx', engine='openpyxl') as writer:
region_kpi.to_excel(writer, sheet_name='Region KPIs', index=False)
retention.to_excel(writer, sheet_name='Cohort Retention')
product_rank.head(50).to_excel(writer, sheet_name='Top 50 Products', index=False)
print('Excel workbook written: output/sales_report_2024.xlsx')การทำให้การสร้างรายงานเป็นอัตโนมัติ
รวม pipeline ทั้งหมด ได้แก่ การนำเข้าข้อมูล การทำความสะอาด การคำนวณ KPI การแสดงภาพข้อมูล และการส่งออกรายงาน ไว้ในฟังก์ชัน main() ที่สามารถเรียกใช้จากบรรทัดคำสั่ง ใช้มอดูล logging ของไพธอนเพื่อบันทึกเวลาเริ่มต้นและสิ้นสุด จำนวนแถวในแต่ละขั้นตอน และความผิดปกติที่ตรวจพบ pipeline ที่ทำงานตั้งแต่ต้นจนจบด้วยคำสั่ง python pipeline.py เพียงคำสั่งเดียว พร้อมสำหรับการทำงานอัตโนมัติตามกำหนดเวลาผ่าน cron, Airflow หรือตัวจัดตารางงานบนคลาวด์
import logging
import time
from datetime import datetime
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s [%(levelname)s] %(message)s'
)
def main():
start = time.time()
logging.info('Pipeline started')
logging.info('Step 1: Data ingestion')
# load_and_merge() # returns df
logging.info('Step 2: Data cleaning')
# clean(df) # returns df_clean
logging.info('Step 3: KPI computation')
# compute_kpis(df_clean) # saves parquet files
logging.info('Step 4: Visualisation and report export')
# build_report() # saves PNG, PDF, markdown, Excel
elapsed = time.time() - start
logging.info(f'Pipeline complete in {elapsed:.1f}s')
if __name__ == '__main__':
main()การจบหลักสูตรและขั้นตอนถัดไป
คุณเรียนจบแทร็กการวิเคราะห์ข้อมูล: แพนด้าและ NumPyแล้ว ขณะนี้คุณสามารถสร้างและแปลงอาร์เรย์ NumPy ด้วยการกระจายค่าและพีชคณิตเชิงเส้น สร้างและจัดการ DataFrames ของแพนด้าจากแหล่งข้อมูลใดก็ได้ ทำความสะอาด ปรับรูปร่าง และรวมชุดข้อมูลจากโลกจริง สร้างภาพข้อมูลคุณภาพระดับเผยแพร่ด้วย Matplotlib และซีบอร์น ใช้การทดสอบทางสถิติด้วย SciPy รองรับชุดข้อมูลขนาดใหญ่ด้วยการแบ่งเป็นส่วนและ Dask เชื่อมต่อแพนด้ากับฐานข้อมูล SQL และออกแบบ pipeline ข้อมูลตั้งแต่ต้นจนจบที่ทำซ้ำได้ ทักษะเหล่านี้เป็นรากฐานของทุกบทบาทที่ขับเคลื่อนด้วยข้อมูลในภาคอุตสาหกรรม
ตรวจสอบความเข้าใจ
ทดสอบความเข้าใจแนวคิดด้านการวิเคราะห์ข้อมูลจากบทเรียนนี้
ทบทวนบทเรียน
ในบทเรียนสุดท้ายนี้ คุณได้เรียนรู้ว่า ภาพ Matplotlib แบบหลายแผงที่ใช้ GridSpec ช่วยให้จัดวางรายงานอย่างมืออาชีพโดยรวมแผนภูมิหลายประเภทเข้าด้วยกัน คำอธิบายประกอบ (axvline, annotate, text) ช่วยเพิ่มบริบทเชิงเรื่องราวให้แผนภูมิ และการสร้างรายงานอัตโนมัติ (มาร์กดาวน์, เอ็กเซล, PNG, PDF) ในฟังก์ชัน main() ทำให้ pipeline ตั้งเวลาทำงานและทำซ้ำได้ ขอแสดงความยินดีที่เรียนจบแทร็กแพนด้าและ NumPy คุณพร้อมรับมือกับโจทย์การวิเคราะห์ข้อมูลจากโลกจริงแล้ว
คำถามที่พบบ่อย
บทเรียน “การแสดงผลขั้นสุดท้ายและการส่งออกรายงาน” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การแสดงผลขั้นสุดท้ายและการส่งออกรายงาน” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Pandas & NumPy Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Pandas & NumPy Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การแสดงผลขั้นสุดท้ายและการส่งออกรายงาน”
สร้างภาพ Matplotlib หลายแผงพร้อมแผนภูมิที่มีคำอธิบายประกอบ ส่งออกเป็น PNG และ PDF และเขียนสรุปแบบมีโครงสร้างลงในไฟล์มาร์กดาวน์ คุณปฏิบัติ 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การตั้งค่าโครงการและการนำเข้าข้อมูล
- การทำความสะอาดข้อมูลและวิศวกรรมคุณลักษณะ
- การวิเคราะห์และการคำนวณ KPI
- การแสดงผลขั้นสุดท้ายและการส่งออกรายงาน