Pandas & NumPy Academy · Oppitunti

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.

Oppitunti 4/413 vaihetta

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

![Revenue Trends](report_figure.png)
'''
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!

Aloita maksutta

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

  1. Projektin määritys ja datan lukeminen
  2. Datan puhdistus ja piirteiden muodostaminen
  3. Analyysi ja KPI-tunnuslukujen laskenta
  4. Lopullinen visualisointi ja raportin vienti
← Takaisin: Pandas & NumPy Academy