Lopullinen visualisointi ja raportin vienti
Luo usean paneelin Matplotlib-kuvaaja selitteillä varustetuilla kaavioilla, vie se PNG- ja PDF-muotoon ja kirjoita jäsennelty yhteenveto Markdown-tiedostoon.
Lopullinen visualisointi ja raportin vienti on ilmainen Pandas & NumPy Academy-oppitunti CoddyKitissä. Tämä on oppitunti 4/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu Pandas & NumPy Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Pandas & NumPy Academy-kurssilla on yhteensä 4 oppituntia.
Lopullinen toimitettava tuotos
Lopputyön viimeisessä vaiheessa lasketuista KPI-mittareista tehdään viimeistelty ja jaettava tuotos: monipaneelinen Matplotlib-kuva, joka sisältää selitteillä varustettuja kaavioita, sekä rakenteinen markdown-raportti, jossa on viittauksia upotettaviin visualisointeihin. Tämän sidosryhmät todella saavat — selkeät visualisoinnit ja sanallisen yhteenvedon. Hyvä visualisointi muuttaa luvut oivalluksiksi, ja hyvä raporttirakenne tekee näistä oivalluksista hyödynnettäviä. Tässä oppitunnissa käsitellään kuvan rakennetta, selitteitä, vientiä PNG- ja PDF-muotoon sekä rakenteisen markdownin luontia.
Monipaneelisen kuvan määrittäminen
Luo erikokoisia paneeleja sisältävä kuva käyttämällä plt.subplots()-funktiota sekä parametreja figsize ja gridspec_kw. Yleinen johdon raporttiasettelu sisältää yläosassa leveän trendikaavion sekä alarivillä olevan pysyvyyslämpökartan ja alueiden pylväskaavion. Määritä yhtenäinen tyyli heti alussa käyttämällä plt.style.use('seaborn-v0_8-whitegrid')-kutsua, jolloin saat selkeät ja ammattimaisen näköiset kaaviot ilman jokaisen elementin manuaalista muotoilua.
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.')Paneeli 1: Kuukausittainen tuottotrendi
Piirrä kuukausittainen kokonaistuotto viivana, jossa on merkitsimet, lisää sen päälle kolmen kuukauden liukuva keskiarvo ja väritä todellisen viivan alapuolinen alue. Merkitse huippu- ja pohjakuukaudet nuolilla ja tekstillä käyttämällä ax.annotate()-funktiota. Näin tarina välittyy heti: milloin tuotto oli korkeimmillaan, milloin se laski ja onko pitkän aikavälin trendi positiivinen. Käytä värejä, jotka erottavat todellisen arvon tasoitetusta arvosta ilman, että ne riitelevät keskenään.
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()Paneeli 2: Kohorttipysyvyyden lämpökartta
Visualisoi kohorttipysyvyysmatriisi Seabornilla värikoodattuna lämpökarttana. Normalisoi arvot siten, että 100 % (jakso 0) näkyy kirkkaimpana värinä ja heikkenevä pysyvyys asteittain tummempina väreinä. Peitä NaN-solut (tulevat jaksot, joita ei ole vielä toteutunut), jotta kaavio pysyy selkeänä. Lisää jokaiseen soluun prosenttiarvo nopeaa tulkintaa varten. Tämä kaavio on yksi arvokkaimmista työkaluista asiakkaiden uskollisuustapojen ymmärtämiseen.
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()Paneeli 3: Alueiden vaakasuuntainen pylväskaavio
Vaakasuuntainen pylväskaavio sopii ihanteellisesti alueiden nimien (y-akselin tekstiselitteiden) vertaamiseen tuoton perusteella. Järjestä pylväät laskevaan järjestykseen, jotta paras alue on ylimpänä. Lisää tuottoarvot kunkin pylvään päähän käyttämällä ax.text()-funktiota. Käytä tuotto-osuuteen perustuvaa divergoivaa väripalettia — paras alue saa syvimmän värin. Tämä kaavio kertoo heti maantieteellisestä keskittymisestä ja alueellisesta suorituskyvystä.
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()Monipaneelisen kuvan tallentaminen
Vie valmis kuva kahdessa muodossa: PNG-muodossa esityksiin ja verkkoraportteihin upottamista varten sekä PDF-muodossa korkearesoluutioista tulostusta varten. Käytä PNG-kuvalle arvoa dpi=150 tai suurempaa, jotta kuva säilyy terävänä näytön tarkkuudella. Välitä parametriksi bbox_inches='tight', jotta selitteet eivät leikkaudu kuvan reunoilla. Tallenna kuva projektin määritysvaiheessa määritettyyn tuloshakemistoon.
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')Rakenteisen Markdown-raportin kirjoittaminen
Luo tekstiraportti kirjoittamalla rakenteinen markdown-tiedosto ohjelmallisesti. Sisällytä otsikko, päätason KPI-mittareiden johdon yhteenveto, kunkin analyysiosion tärkeimmät havainnot sekä viittaukset tallennettuihin kuvatiedostoihin. Kun raportti luodaan koodista eikä kirjoiteta käsin, jokainen suoritus tuottaa uuden ja täsmällisen raportin, joka kuvastaa todella laskettuja arvoja. Upota lasketut luvut tekstiin Pythonin f-merkkijonojen avulla.
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')Selitteiden lisääminen kaavioihin
Tehokkaat kaaviot kertovat tarinan selitteiden avulla. Merkitse tärkeät tapahtumat (tuotteen julkaisu tai hinnoittelumuutos) käyttämällä ax.axvline()-funktiota, väritä taantumajaksot käyttämällä ax.axhspan()-funktiota ja korosta huomionarvoisia datapisteitä tekstillä ja nuolilla käyttämällä ax.annotate()-funktiota. Merkitse akseleihin yksiköt (ax.set_ylabel('Revenue ($)')), lisää kuvaava otsikko, sisällytä selite, kun näytät useita sarjoja, ja muotoile asteikkotekstit helposti luettaviksi käyttämällä ax.yaxis.set_major_formatter(FuncFormatter(...))-kutsua.
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()Datataulukoiden vieminen Exceliin
Jotkin sidosryhmät suosivat Exceliä markdown-raporttien sijaan. Vie useita DataFrameja yhden Excel-työkirjan eri laskentataulukoille käyttämällä pd.ExcelWriter-toimintoa. Tämä on ammattimainen toimitettava tuotos sidosryhmille, jotka haluavat tutkia dataa itse. Järjestä taulukot laskentataulukossa parametrien startrow ja startcol avulla ja lisää ensimmäiseksi välilehdeksi 'Summary'-taulukko, joka sisältää päätason luvut.
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')Raportin luonnin automatisointi
Yhdistä koko putkisto — datan lukeminen, puhdistus, KPI-mittareiden laskenta, visualisointi ja raportin vienti — komentoriviltä suoritettavaan main()-funktioon. Tallenna Pythonin logging-moduulilla aloitus- ja lopetusajat, kunkin vaiheen rivimäärät sekä havaitut poikkeamat. Putkisto, joka suoritetaan alusta loppuun yhdellä python pipeline.py-komennolla, on valmis ajastettuun automatisointiin cronin, Airflown tai pilviajastimen avulla.
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()Kurssin suorittaminen ja seuraavat vaiheet
Olet suorittanut Data Analysis: Pandas & NumPy -opintokokonaisuuden. Osaat nyt luoda ja muuntaa NumPy-taulukoita broadcastingin ja lineaarialgebran avulla, rakentaa ja käsitellä Pandas DataFrameja mistä tahansa tietolähteestä, puhdistaa, muotoilla uudelleen ja aggregoida tosielämän aineistoja, luoda julkaisutason visualisointeja Matplotlibilla ja Seabornilla, soveltaa tilastollisia testejä SciPyllä, käsitellä suuria aineistoja lohkojen ja Daskin avulla, yhdistää Pandasin SQL-tietokantoihin sekä suunnitella toistettavia päästä päähän -dataputkistoja. Nämä taidot ovat jokaisen dataohjautuvan alan työtehtävän perusta.
Pikatarkistus
Testaa, miten hyvin ymmärrät tämän oppitunnin data-analyysin käsitteet.
Oppitunnin kertaus
Tässä viimeisessä oppitunnissa opit, että GridSpecin avulla toteutetut monipaneeliset Matplotlib-kuvat mahdollistavat ammattimaiset raporttiasettelut, joissa yhdistetään useita kaaviotyyppejä, selitteet (axvline, annotate, text) lisäävät kaavioihin tulkintaa tukevaa asiayhteyttä ja raportin automatisoitu luonti (markdown, Excel, PNG, PDF) main()-funktiossa tekee putkistosta ajastettavan ja toistettavan. Onnittelut Pandas- ja NumPy-opintokokonaisuuden suorittamisesta — olet valmis ratkaisemaan tosielämän data-analyysin haasteita!
Opi Python tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 30
- Oppitunnit
- 120
Usein kysytyt kysymykset
Onko oppitunti ”Lopullinen visualisointi ja raportin vienti” ilmainen?
Kyllä – oppitunnin ”Lopullinen visualisointi ja raportin vienti” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko Pandas & NumPy Academy-kurssin, päivitä CoddyKit PROhon. Pandas & NumPy Academy-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”Lopullinen visualisointi ja raportin vienti”?
Luo usean paneelin Matplotlib-kuvaaja selitteillä varustetuilla kaavioilla, vie se PNG- ja PDF-muotoon ja kirjoita jäsennelty yhteenveto Markdown-tiedostoon. Harjoittelet Pandas & NumPy Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni Pandas & NumPy Academy-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin Pandas & NumPy Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 4/4.
Kuinka kauan ”Lopullinen visualisointi ja raportin vienti”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä Pandas & NumPy Academy-oppitunnilla?
Kyllä. Jokainen Pandas & NumPy Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- Projektin määritys ja datan lukeminen
- Datan puhdistus ja piirteiden muodostaminen
- Analyysi ja KPI-tunnuslukujen laskenta
- Lopullinen visualisointi ja raportin vienti