Pandas & NumPy Academy · Pelajaran

Visualisasi Akhir dan Pengeksportan Laporan

Bina rajah Matplotlib berbilang panel dengan carta beranotasi, eksport ke PNG dan PDF, serta tulis ringkasan berstruktur ke dalam fail markdown.

Pelajaran 4 daripada 413 langkah

Visualisasi Akhir dan Pengeksportan Laporan ialah pelajaran Pandas & NumPy Academy percuma di CoddyKit. Ini ialah pelajaran 4 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 Pandas & NumPy Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Pandas & NumPy Academy merangkumi sejumlah 4 pelajaran.

Hasil Akhir

Peringkat terakhir projek kemuncak menukarkan KPI yang dikira kepada hasil kerja yang kemas dan mudah dikongsi: rajah Matplotlib berbilang panel dengan carta beranotasi serta laporan markdown berstruktur dengan rujukan visualisasi terbenam. Inilah yang sebenarnya diterima oleh pihak berkepentingan — visual yang jelas dan ringkasan berbentuk naratif. Visualisasi yang baik menukarkan nombor kepada cerapan; struktur laporan yang baik menjadikan cerapan tersebut boleh diambil tindakan. Pelajaran ini merangkumi seni bina rajah, anotasi, pengeksportan ke PNG/PDF, dan penjanaan markdown berstruktur.

Menyediakan Rajah Berbilang Panel

Gunakan plt.subplots() dengan figsize dan gridspec_kw untuk mencipta rajah dengan panel yang berlainan saiz. Susun atur laporan eksekutif yang biasa ialah carta trend lebar di bahagian atas, serta peta haba pengekalan dan carta bar wilayah pada baris bawah. Tetapkan gaya yang konsisten dari awal dengan plt.style.use('seaborn-v0_8-whitegrid') untuk mendapatkan carta yang kemas dan kelihatan profesional tanpa memformat setiap unsur secara manual.

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.')

Panel 1: Garis Trend Hasil Bulanan

Plotkan jumlah hasil bulanan sebagai garis dengan penanda, tindihkan purata bergerak 3 bulan, dan lorekkan kawasan di bawah garis sebenar. Anotasikan bulan puncak dan bulan terendah dengan anak panah serta teks menggunakan ax.annotate(). Ini menyampaikan cerita dengan serta-merta: bila hasil paling kukuh, bila hasil merosot, dan sama ada trend jangka panjang adalah positif. Gunakan warna yang membezakan data sebenar daripada data yang dilicinkan tanpa kelihatan bercanggah.

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()

Panel 2: Peta Haba Pengekalan Kohort

Visualisasikan matriks pengekalan kohort sebagai peta haba berkod warna menggunakan Seaborn. Normalkan nilai supaya 100% (tempoh 0) mempunyai warna paling terang dan pengekalan yang semakin menurun mempunyai warna yang semakin gelap. Samarkan sel NaN (tempoh masa hadapan yang belum berlaku) supaya carta kekal kemas. Anotasikan setiap sel dengan nilai peratusan untuk bacaan pantas. Carta ini ialah salah satu alat paling bernilai untuk memahami corak kesetiaan pelanggan.

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()

Panel 3: Carta Bar Mendatar Wilayah Teratas

Carta bar mendatar sesuai untuk membandingkan nama wilayah (label teks pada paksi-y) berdasarkan hasil. Isih bar mengikut susunan menurun supaya wilayah terbaik berada di bahagian atas. Tambahkan label nilai hasil di hujung setiap bar menggunakan ax.text(). Gunakan palet warna berbeza berdasarkan bahagian hasil — wilayah teratas mendapat warna paling gelap. Carta ini terus menyampaikan tumpuan geografi dan prestasi wilayah.

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()

Menyimpan Rajah Berbilang Panel

Eksportkan rajah yang telah siap dalam dua format: PNG untuk dibenamkan dalam pembentangan dan laporan web, serta PDF untuk cetakan beresolusi tinggi. Gunakan dpi=150 atau lebih tinggi untuk PNG bagi memastikan rajah kelihatan tajam pada resolusi skrin. Hantar bbox_inches='tight' untuk mengelakkan label terpotong di tepi rajah. Simpan ke direktori output yang ditetapkan pada peringkat penyediaan projek.

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')

Menulis Laporan Markdown Berstruktur

Jana laporan teks dengan menulis fail markdown berstruktur secara terprogram. Sertakan pengepala, ringkasan eksekutif dengan KPI utama, penemuan penting daripada setiap bahagian analisis, dan rujukan kepada fail rajah yang disimpan. Dengan menjana laporan daripada kod dan bukannya menulisnya secara manual, setiap pelaksanaan menghasilkan laporan baharu yang tepat serta mencerminkan nilai sebenar yang dikira. Gunakan f-string Python untuk menyisipkan nombor yang dikira terus ke dalam teks.

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

![Revenue Trends](report_figure.png)
'''
with open('output/report.md', 'w') as f:
    f.write(report)
print('Report written to output/report.md')

Menambahkan Anotasi pada Carta

Carta yang berkesan menyampaikan cerita melalui anotasi. Gunakan ax.axvline() untuk menandakan peristiwa penting (pelancaran produk atau perubahan harga), ax.axhspan() untuk melorekkan tempoh kemelesetan, dan ax.annotate() untuk menyerlahkan titik data yang penting dengan teks serta anak panah. Labelkan paksi dengan unit (ax.set_ylabel('Revenue ($)')), tambahkan tajuk yang menerangkan kandungan, sertakan petunjuk apabila berbilang siri dipaparkan, dan formatkan label tanda senggatan supaya mudah dibaca menggunakan 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()

Mengeksport Jadual Data ke Excel

Sesetengah pihak berkepentingan lebih menggemari Excel berbanding laporan markdown. Gunakan pd.ExcelWriter untuk mengeksport berbilang DataFrames ke helaian yang berbeza dalam satu buku kerja Excel. Ini ialah hasil kerja profesional untuk pihak berkepentingan perniagaan yang ingin meneroka data sendiri. Gunakan startrow dan startcol untuk menyusun jadual dalam helaian, dan tambahkan helaian 'Summary' dengan nombor peringkat tertinggi sebagai tab pertama.

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')

Mengautomatikkan Penjanaan Laporan

Bungkus keseluruhan pipeline — pengambilan data, pembersihan, pengiraan KPI, visualisasi, dan pengeksportan laporan — dalam fungsi main() yang boleh dilaksanakan daripada baris perintah. Gunakan modul logging Python untuk merekod masa mula dan tamat, bilangan baris pada setiap peringkat, serta sebarang anomali yang dikesan. Pipeline yang berjalan dari hujung ke hujung dengan satu perintah python pipeline.py bersedia untuk automasi berjadual melalui cron, Airflow, atau penjadual awan.

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()

Penamatan Kursus dan Langkah Seterusnya

Anda telah menamatkan trek Analisis Data: Pandas & NumPy. Kini Anda boleh: mencipta dan mengubah tatasusunan NumPy dengan penyiaran dan algebra linear, membina serta memanipulasi DataFrames Pandas daripada mana-mana sumber data, membersihkan, membentuk semula, dan mengagregat set data dunia sebenar, mencipta visualisasi berkualiti penerbitan dengan Matplotlib dan Seaborn, menggunakan ujian statistik dengan SciPy, menskalakan set data besar dengan pembahagian kelompok dan Dask, mengintegrasikan Pandas dengan pangkalan data SQL, serta mereka bentuk pipeline data hujung ke hujung yang boleh dihasilkan semula. Kemahiran ini ialah asas bagi setiap peranan berasaskan data dalam industri.

Semakan Pantas

Uji pemahaman Anda tentang konsep Analisis Data daripada pelajaran ini.

Imbas Kembali Pelajaran

Dalam pelajaran terakhir ini, Anda telah mempelajari bahawa: rajah Matplotlib berbilang panel dengan GridSpec membolehkan susun atur laporan profesional yang menggabungkan pelbagai jenis carta, anotasi (axvline, annotate, text) menambahkan konteks naratif pada carta, dan penjanaan laporan automatik (markdown, Excel, PNG, PDF) dalam fungsi main() menjadikan pipeline boleh dijadualkan serta boleh dihasilkan semula. Tahniah kerana menamatkan trek Pandas dan NumPy — Anda kini bersedia menangani cabaran analisis data dunia sebenar!

Percuma untuk bermula

Pelajari Python 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
30
Pelajaran
120

Soalan Lazim

Adakah pelajaran “Visualisasi Akhir dan Pengeksportan Laporan” percuma?

Ya — teks penuh “Visualisasi Akhir dan Pengeksportan Laporan” 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 Pandas & NumPy Academy, tingkat taraf kepada CoddyKit PRO. Kursus Pandas & NumPy Academy merangkumi sejumlah 4 pelajaran.

Apakah yang akan saya pelajari dalam “Visualisasi Akhir dan Pengeksportan Laporan”?

Bina rajah Matplotlib berbilang panel dengan carta beranotasi, eksport ke PNG dan PDF, serta tulis ringkasan berstruktur ke dalam fail markdown. Anda berlatih Pandas & NumPy Academy 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 Pandas & NumPy Academy?

Tiada pengalaman terdahulu diperlukan. Pembelajaran Pandas & NumPy Academy 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 4 daripada 4.

Berapa lamakah pelajaran “Visualisasi Akhir dan Pengeksportan Laporan” 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 Pandas & NumPy Academy ini?

Ya. Setiap pelajaran Pandas & NumPy Academy 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

  1. Persediaan Projek dan Pengambilan Data
  2. Pembersihan Data dan Kejuruteraan Ciri
  3. Analisis dan Pengiraan KPI
  4. Visualisasi Akhir dan Pengeksportan Laporan
← Kembali ke Pandas & NumPy Academy