Endelig visualisering og eksport av rapport
Bygg en Matplotlib-figur med flere paneler og annoterte diagrammer, eksporter den til PNG og PDF, og skriv et strukturert sammendrag til en markdown-fil.
Endelig visualisering og eksport av rapport er en gratis leksjon i Pandas & NumPy Academy på CoddyKit. Dette er leksjon 4 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Pandas & NumPy Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Pandas & NumPy Academy inneholder totalt 4 leksjoner.
Det endelige leveranseproduktet
Det siste trinnet i capstone-prosjektet gjør beregnede KPI-er om til et profesjonelt leveranseprodukt som er enkelt å dele: en Matplotlib-figur med flere paneler, med påførte merknader i diagrammene, og en strukturert markdown-rapport med innebygde referanser til visualiseringene. Dette er det interessentene faktisk mottar — tydelige visualiseringer og et sammendrag i fortellende form. God visualisering gjør tall om til innsikt, mens god rapportstruktur gjør denne innsikten handlingsrettet. Denne leksjonen dekker figurarkitektur, merknader, eksport til PNG/PDF og strukturert generering av markdown.
Konfigurere figuren med flere paneler
Bruk plt.subplots() sammen med figsize og gridspec_kw for å opprette en figur med paneler i ulike størrelser. Et vanlig oppsett for en rapport til ledelsen er et bredt trenddiagram øverst, med et varmekart for retensjon og et stolpediagram for regioner på nederste rad. Angi en konsekvent stil fra starten med plt.style.use('seaborn-v0_8-whitegrid') for å få rene, profesjonelle diagrammer uten manuell formatering av hvert element.
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: Linjediagram for månedlig inntektstrend
Plott den totale månedlige inntekten som en linje med markører, legg et glidende gjennomsnitt over 3 måneder oppå, og skraver området under den faktiske linjen. Sett merknader på månedene med høyest og lavest verdi med piler og tekst ved hjelp av ax.annotate(). Da blir historien tydelig med én gang: når inntektene var høyest, når de falt, og om den langsiktige trenden er positiv. Bruk farger som skiller faktiske verdier fra utjevnede verdier uten å virke forstyrrende.
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: Varmekart for kohortretensjon
Visualiser matrisen for kohortretensjon som et fargekodet varmekart ved hjelp av Seaborn. Normaliser verdiene slik at 100 % (periode 0) får den lyseste fargen, mens synkende retensjon blir gradvis mørkere. Masker NaN-celler (fremtidige perioder som ennå ikke har inntruffet) for å holde diagrammet ryddig. Påfør prosentverdien i hver celle for å gjøre diagrammet lett å lese. Dette diagrammet er et av de mest verdifulle verktøyene for å forstå mønstre i kundelojalitet.
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: Horisontalt stolpediagram over de beste regionene
Et horisontalt stolpediagram egner seg godt til å sammenligne regionnavn (tekstetiketter på y-aksen) etter inntekt. Sorter stolpene i synkende rekkefølge slik at den beste regionen kommer øverst. Legg til etiketter med inntektsverdier på slutten av hver stolpe ved hjelp av ax.text(). Bruk en divergerende fargepalett basert på inntektsandel — den beste regionen får den dypeste fargen. Dette diagrammet viser umiddelbart geografisk konsentrasjon og regionale resultater.
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()Lagre figuren med flere paneler
Eksporter den ferdige figuren i to formater: PNG for innbygging i presentasjoner og nettbaserte rapporter, og PDF for utskrift med høy oppløsning. Bruk dpi=150 eller høyere for PNG for å sikre at figuren er skarp på skjermen. Angi bbox_inches='tight' for å unngå at etiketter blir beskåret ved figurkanten. Lagre filen i utdatamappen som ble opprettet i prosjektets oppsettfase.
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')Skrive den strukturerte markdown-rapporten
Generer tekstrapporten ved å skrive en strukturert markdown-fil programmatisk. Ta med en overskrift, et sammendrag for ledelsen med hoved-KPI-er, viktige funn fra hver analyseseksjon og referanser til de lagrede figurfilene. Når rapporten genereres fra kode i stedet for å skrives manuelt, gir hver kjøring en ny og nøyaktig rapport som gjenspeiler de faktisk beregnede verdiene. Bruk Python-f-strenger til å sette inn beregnede tall direkte i teksten.
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')Legge til merknader i diagrammer
Effektive diagrammer forteller en historie gjennom merknader. Bruk ax.axvline() til å markere viktige hendelser (en produktlansering, en prisendring), ax.axhspan() til å skravere perioder med lavkonjunktur, og ax.annotate() til å fremheve bemerkelsesverdige datapunkter med tekst og piler. Merk aksene med enheter (ax.set_ylabel('Revenue ($)')), legg til en beskrivende tittel, ta med en forklaring når flere serier vises, og formater etikettene på aksemerkene for bedre lesbarhet ved hjelp av 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()Eksportere datatabeller til Excel
Noen interessenter foretrekker Excel fremfor markdown-rapporter. Bruk pd.ExcelWriter til å eksportere flere DataFrames til ulike ark i én Excel-arbeidsbok. Dette er et profesjonelt leveranseprodukt for interessenter i virksomheten som ønsker å utforske dataene selv. Bruk startrow og startcol til å plassere tabeller i et ark, og legg til et «Summary»-ark med hovedtallene som første fane.
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')Automatisere rapportgenerering
Pakk hele pipelinen — innlasting, rensing, KPI-beregning, visualisering og rapporteksport — inn i en main()-funksjon som kan kjøres fra kommandolinjen. Bruk Pythons logging-modul til å registrere start- og sluttidspunkt, antall rader på hvert trinn og eventuelle oppdagede avvik. En pipeline som kjører fra start til slutt med én enkelt kommando, python pipeline.py, er klar for planlagt automatisering via cron, Airflow eller en skytjeneste for planlagte kjøringer.
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()Fullføre kurset og se på neste steg
De har fullført sporet Data Analysis: Pandas & NumPy. De kan nå: opprette og transformere NumPy-matriser med broadcasting og lineær algebra, bygge og manipulere Pandas DataFrames fra alle datakilder, rense, omforme og aggregere datasett fra den virkelige verden, lage visualiseringer av publiseringskvalitet med Matplotlib og Seaborn, bruke statistiske tester med SciPy, skalere til store datasett med oppdeling i biter og Dask, integrere Pandas med SQL-databaser og utforme reproduserbare datapipelines fra ende til ende. Disse ferdighetene danner grunnlaget for alle datadrevne roller i næringslivet.
Kort kunnskapssjekk
Test forståelsen Deres av konseptene innen dataanalyse fra denne leksjonen.
Oppsummering av leksjonen
I denne siste leksjonen lærte De at Matplotlib-figurer med flere paneler og GridSpec muliggjør profesjonelle rapportoppsett som kombinerer flere diagramtyper, at merknader (axvline, annotate, text) tilfører diagrammene kontekst i fortellende form, og at automatisert rapportgenerering (markdown, Excel, PNG, PDF) i en main()-funksjon gjør pipelinen mulig å planlegge og reprodusere. Gratulerer med å ha fullført Pandas- og NumPy-sporet — De er nå klare til å håndtere dataanalyseutfordringer fra den virkelige verden!
Lær deg Python med en AI-veileder – gratis
Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.
- Kurs
- 30
- Leksjoner
- 120
Ofte stilte spørsmål
Er leksjonen «Endelig visualisering og eksport av rapport» gratis?
Ja – hele teksten i «Endelig visualisering og eksport av rapport» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av Pandas & NumPy Academy-kurset, kan du oppgradere til CoddyKit PRO. Kurset i Pandas & NumPy Academy inneholder totalt 4 leksjoner.
Hva lærer jeg i «Endelig visualisering og eksport av rapport»?
Bygg en Matplotlib-figur med flere paneler og annoterte diagrammer, eksporter den til PNG og PDF, og skriv et strukturert sammendrag til en markdown-fil. Du øver på Pandas & NumPy Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.
Trenger jeg erfaring for å begynne med Pandas & NumPy Academy?
Ingen tidligere erfaring er nødvendig. Pandas & NumPy Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 4 av 4.
Hvor lang tid tar leksjonen «Endelig visualisering og eksport av rapport»?
De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.
Kan jeg skrive og kjøre kode i denne Pandas & NumPy Academy-leksjonen?
Ja. Alle Pandas & NumPy Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.
Alle leksjonene i dette kurset
- Prosjektoppsett og datainnhenting
- Datarensing og utvikling av egenskaper
- Analyse og beregning av KPI-er
- Endelig visualisering og eksport av rapport