0Pricing
Pandas & NumPy Academy · Pelajaran

Visualisasi Akhir dan Ekspor Laporan

Buat figur Matplotlib multi-panel dengan grafik beranotasi, ekspor ke PNG dan PDF, lalu tulis ringkasan terstruktur ke file markdown.

Visualisasi Akhir dan Ekspor Laporan adalah pelajaran Pandas & NumPy Academy gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Pandas & NumPy Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Pandas & NumPy Academy mencakup 4 pelajaran total.

Hasil Akhir

Tahap terakhir proyek akhir mengubah KPI yang telah dihitung menjadi hasil kerja yang rapi dan mudah dibagikan: gambar Matplotlib multi-panel dengan grafik beranotasi serta laporan markdown terstruktur dengan referensi visualisasi yang disematkan. Inilah yang benar-benar diterima para pemangku kepentingan — visual yang jelas dan ringkasan naratif. Visualisasi yang baik mengubah angka menjadi wawasan; struktur laporan yang baik membuat wawasan tersebut dapat ditindaklanjuti. Pelajaran ini membahas arsitektur gambar, anotasi, ekspor ke PNG/PDF, dan pembuatan markdown terstruktur.

Menyiapkan Gambar Multi-Panel

Gunakan plt.subplots() dengan figsize dan gridspec_kw untuk membuat gambar dengan panel-panel berukuran berbeda. Tata letak laporan eksekutif yang umum: grafik tren yang lebar di bagian atas, lalu heatmap retensi dan grafik batang wilayah di baris bawah. Tetapkan gaya yang konsisten sejak awal dengan plt.style.use('seaborn-v0_8-whitegrid') agar mendapatkan grafik yang bersih dan terlihat profesional tanpa memformat setiap elemen 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 Tren Pendapatan Bulanan

Gambarkan total pendapatan bulanan sebagai garis dengan penanda, tampilkan rata-rata bergulir 3 bulan di atasnya, dan beri arsiran pada area di bawah garis aktual. Anotasikan bulan dengan nilai tertinggi dan terendah menggunakan panah dan teks melalui ax.annotate(). Dengan demikian, ceritanya dapat dipahami seketika: kapan pendapatan paling kuat, kapan menurun, dan apakah tren jangka panjangnya positif. Gunakan warna yang membedakan data aktual dari data yang diperhalus tanpa terlihat saling bertabrakan.

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: Heatmap Retensi Cohort

Visualisasikan matriks retensi cohort sebagai heatmap berkode warna menggunakan Seaborn. Normalisasikan nilai sehingga 100% (periode 0) menjadi warna paling cerah dan retensi yang menurun menjadi semakin gelap. Sembunyikan sel NaN (periode mendatang yang belum terjadi) agar grafik tetap rapi. Anotasikan setiap sel dengan nilai persentasenya agar mudah dibaca. Grafik ini merupakan salah satu alat paling berharga untuk memahami pola loyalitas 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: Grafik Batang Horizontal Wilayah Teratas

Grafik batang horizontal ideal untuk membandingkan nama wilayah (label teks pada sumbu-y) berdasarkan pendapatan. Urutkan batang secara menurun agar wilayah terbaik berada di bagian atas. Tambahkan label nilai pendapatan di ujung setiap batang menggunakan ax.text(). Gunakan palet warna divergen berdasarkan proporsi pendapatan — wilayah teratas mendapatkan warna paling pekat. Grafik ini langsung menunjukkan konsentrasi geografis dan kinerja setiap 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 Gambar Multi-Panel

Ekspor gambar yang telah selesai dalam dua format: PNG untuk disematkan dalam presentasi dan laporan web, serta PDF untuk pencetakan beresolusi tinggi. Gunakan dpi=150 atau lebih tinggi untuk PNG agar gambar tetap tajam pada resolusi layar. Berikan bbox_inches='tight' untuk mencegah label terpotong di tepi gambar. Simpan ke direktori keluaran yang telah ditetapkan pada tahap penyiapan proyek.

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 Terstruktur

Buat laporan teks dengan menulis file markdown terstruktur secara terprogram. Sertakan tajuk, ringkasan eksekutif dengan KPI utama, temuan penting dari setiap bagian analisis, serta referensi ke file gambar yang telah disimpan. Dengan membuat laporan dari kode, bukan menulisnya secara manual, setiap eksekusi menghasilkan laporan baru yang akurat dan mencerminkan nilai yang benar-benar dihitung. Gunakan f-string Python untuk menyisipkan angka hasil perhitungan langsung 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 ke Grafik

Grafik yang efektif menyampaikan cerita melalui anotasi. Gunakan ax.axvline() untuk menandai peristiwa penting (peluncuran produk, perubahan harga), ax.axhspan() untuk memberi arsiran pada periode resesi, dan ax.annotate() untuk menyoroti titik data penting dengan teks dan panah. Beri label pada sumbu dengan satuannya (ax.set_ylabel('Revenue ($)')), tambahkan judul yang deskriptif, sertakan legenda ketika beberapa Series ditampilkan, dan format label tanda skala agar 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()

Mengekspor Tabel Data ke Excel

Sebagian pemangku kepentingan lebih menyukai Excel daripada laporan markdown. Gunakan pd.ExcelWriter untuk mengekspor beberapa DataFrames ke lembar berbeda dalam satu buku kerja Excel. Ini merupakan hasil kerja profesional bagi pemangku kepentingan bisnis yang ingin mengeksplorasi data sendiri. Gunakan startrow dan startcol untuk mengatur posisi tabel dalam lembar, lalu tambahkan lembar 'Summary' yang berisi angka-angka tingkat teratas 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')

Mengotomatiskan Pembuatan Laporan

Bungkus seluruh pipeline — pengambilan data, pembersihan, penghitungan KPI, visualisasi, dan ekspor laporan — dalam fungsi main() yang dapat dijalankan dari baris perintah. Gunakan modul logging Python untuk mencatat waktu mulai dan selesai, jumlah baris pada setiap tahap, serta anomali yang terdeteksi. Pipeline yang berjalan menyeluruh dengan satu perintah python pipeline.py siap digunakan untuk otomatisasi terjadwal melalui cron, Airflow, atau penjadwal cloud.

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

Penyelesaian Kursus dan Langkah Berikutnya

Anda telah menyelesaikan jalur Analisis Data: Pandas & NumPy. Kini Anda dapat: membuat dan mengubah array NumPy dengan broadcasting dan aljabar linear, membuat serta memanipulasi DataFrames Pandas dari sumber data apa pun, membersihkan, mengubah bentuk, dan mengagregasi kumpulan data dunia nyata, membuat visualisasi berkualitas publikasi dengan Matplotlib dan Seaborn, menerapkan uji statistik dengan SciPy, menangani kumpulan data besar menggunakan pemrosesan dalam potongan dan Dask, mengintegrasikan Pandas dengan basis data SQL, serta merancang pipeline data menyeluruh yang dapat direproduksi. Keterampilan ini merupakan fondasi bagi setiap peran yang berhubungan dengan data di industri.

Pemeriksaan Singkat

Uji pemahaman Anda tentang konsep Analisis Data dari pelajaran ini.

Rangkuman Pelajaran

Dalam pelajaran terakhir ini Anda mempelajari bahwa: gambar Matplotlib multi-panel dengan GridSpec memungkinkan tata letak laporan profesional yang menggabungkan berbagai jenis grafik, anotasi (axvline, annotate, text) menambahkan konteks naratif pada grafik, dan pembuatan laporan otomatis (markdown, Excel, PNG, PDF) dalam fungsi main() membuat pipeline dapat dijadwalkan dan direproduksi. Selamat telah menyelesaikan jalur Pandas dan NumPy — Anda siap menghadapi tantangan analisis data dunia nyata!

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Visualisasi Akhir dan Ekspor Laporan” gratis?

Ya — teks lengkap “Visualisasi Akhir dan Ekspor Laporan” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Pandas & NumPy Academy, upgrade ke CoddyKit PRO. Kursus Pandas & NumPy Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Visualisasi Akhir dan Ekspor Laporan”?

Buat figur Matplotlib multi-panel dengan grafik beranotasi, ekspor ke PNG dan PDF, lalu tulis ringkasan terstruktur ke file markdown. Kamu berlatih Pandas & NumPy Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Pandas & NumPy Academy?

Tidak diperlukan pengalaman sebelumnya. Pandas & NumPy Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.

Berapa lama pelajaran “Visualisasi Akhir dan Ekspor Laporan” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Pandas & NumPy Academy ini?

Ya. Setiap pelajaran Pandas & NumPy Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Penyiapan Proyek dan Pengambilan Data
  2. Pembersihan Data dan Rekayasa Fitur
  3. Analisis dan Penghitungan KPI
  4. Visualisasi Akhir dan Ekspor Laporan
← Kembali ke Pandas & NumPy Academy