Pandas & NumPy Academy · Les

Maandelijkse trendvisualisatie

Visualiseer de maandelijkse omzet als lijngrafiek, leg er een voortschrijdend gemiddelde van drie maanden overheen en annoteer maanden met pieken en dalen.

Les 4 van 413 stappen

Maandelijkse trendvisualisatie is een gratis Pandas & NumPy Academy-les op CoddyKit. Dit is les 4 van 4. Je kunt de volledige les hieronder gratis lezen en daarna in de browser praktisch oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject Pandas & NumPy Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Pandas & NumPy Academy bevat in totaal 4 lessen.

Maandelijkse omzettotalen berekenen

Aggegreer de verkoop-DataFrame vóór het plotten naar maandtotalen. Groepeer op de Period-kolom year_month en tel de omzet op. Zet de PeriodIndex met .to_timestamp() om naar een DatetimeIndex, zodat de datumopmaak van Matplotlib de labels op de assen correct weergeeft. Door op de index te sorteren loopt de lijngrafiek chronologisch van links naar rechts.

import pandas as pd
import matplotlib.pyplot as plt

df = pd.read_parquet('sales_features.parquet')

monthly = df.groupby('year_month')['revenue'].sum().sort_index()
monthly.index = monthly.index.to_timestamp()
print(monthly.head())

De maandelijkse omzetlijngrafiek plotten

Maak een Figure en Axes met plt.subplots(figsize=(12, 5)) en roep ax.plot() aan om de maandelijkse omzettrend te tekenen. Gebruik marker='o' om bij elke maand een punt te plaatsen, zodat afzonderlijke gegevenspunten zichtbaar blijven, ook wanneer de lijn vloeiend is. Stel de kleur en lijndikte zo in dat de hoofdtrend duidelijk naar voren komt tussen eventuele later toegevoegde overlays.

fig, ax = plt.subplots(figsize=(12, 5))

ax.plot(monthly.index, monthly.values,
        color='steelblue', linewidth=2, marker='o', markersize=5,
        label='Monthly Revenue')

ax.set_title('Monthly Revenue Trend')
ax.set_xlabel('Month')
ax.set_ylabel('Revenue (USD)')
plt.tight_layout()
plt.show()

Een voortschrijdend gemiddelde van drie maanden toevoegen

Een ruwe maandelijkse omzetlijn kan door seizoensruis grillig lijken. Voeg een voortschrijdend gemiddelde van drie maanden toe dat je berekent met monthly.rolling(3).mean() om de onderliggende trend duidelijker te tonen. Plot dit als een stippellijn in een contrasterende kleur, zodat het opvalt zonder de ruwe reeks te verbergen.

rolling_avg = monthly.rolling(3).mean()

ax.plot(rolling_avg.index, rolling_avg.values,
        color='darkorange', linewidth=2, linestyle='--',
        label='3-Month Moving Avg')

ax.legend()
plt.show()

De piekmaand annoteren

Gebruik ax.annotate() om de maand met de hoogste omzet te markeren. Vind de piek met monthly.idxmax() en de waarde ervan met monthly.max(). De pijl van de annotatie loopt van een tekstlabel naar het gegevenspunt van de piek, waardoor het inzicht direct zichtbaar is voor elke lezer van de grafiek, ook voor iemand die deze als PNG of PDF ontvangt.

peak_date = monthly.idxmax()
peak_val = monthly.max()

ax.annotate(f'Peak: ${peak_val:,.0f}',
            xy=(peak_date, peak_val),
            xytext=(peak_date, peak_val * 1.1),
            arrowprops=dict(arrowstyle='->', color='red'),
            color='red', fontsize=10)
plt.show()

De dalmaand annoteren

Markeer op dezelfde manier de maand met de laagste omzet met monthly.idxmin() om mogelijke seizoensinvloeden of verstoringen aan te geven. Aantekeningen bij zowel het hoogtepunt als het dieptepunt geven het volledige verhaal: belanghebbenden zien daardoor niet alleen de beste maand, maar ook hoe ver de omzet kan dalen. Dat helpt bij het plannen van de kasstroom.

trough_date = monthly.idxmin()
trough_val = monthly.min()

ax.annotate(f'Trough: ${trough_val:,.0f}',
            xy=(trough_date, trough_val),
            xytext=(trough_date, trough_val * 0.85),
            arrowprops=dict(arrowstyle='->', color='navy'),
            color='navy', fontsize=10)
plt.show()

Datumnotities opmaken

De standaarddatumnotities van Matplotlib overlappen elkaar vaak of gebruiken een onleesbare indeling. Importeer mdates uit matplotlib en stel een MonthLocator en DateFormatter in om de frequentie van de notities en de indeling van de labels te bepalen. Door de notitielabels 45 graden te draaien, voorkom je overlapping op een as van 12 maanden.

import matplotlib.dates as mdates

ax.xaxis.set_major_locator(mdates.MonthLocator())
ax.xaxis.set_major_formatter(mdates.DateFormatter('%b %Y'))

plt.xticks(rotation=45, ha='right')
plt.tight_layout()
plt.show()

Een gearceerd gebied voor Q4 toevoegen

Markeer de Q4-periode (oktober–december) met een gearceerde achtergrond met ax.axvspan(). Hierdoor worden seizoenspatronen direct zichtbaar: als het hoogtepunt steeds in de gearceerde zone valt, is Q4 een belangrijke verkoopperiode waarop je je met promoties kunt richten. De parameter alpha bepaalt de transparantie van de arcering.

import datetime

q4_start = datetime.datetime(2023, 10, 1)
q4_end = datetime.datetime(2023, 12, 31)

ax.axvspan(q4_start, q4_end, alpha=0.15, color='gold', label='Q4')
ax.legend()
plt.show()

Omzet per categorie in de tijd weergeven

Maak een lijndiagram met meerdere lijnen, waarbij elke lijn een productcategorie vertegenwoordigt. Draai de maandelijkse DataFrame per categorie zodat de kolommen categorieën zijn en de index de tijd bevat. Doorloop vervolgens de kolommen en roep voor elke kolom ax.plot() aan. Matplotlib wijst automatisch een andere kleur toe aan elke lijn wanneer je deze herhaaldelijk op dezelfde Axes tekent.

monthly_cat = df.groupby(['year_month', 'category'])['revenue'].sum().unstack('category')
monthly_cat.index = monthly_cat.index.to_timestamp()

fig, ax = plt.subplots(figsize=(12, 6))
for col in monthly_cat.columns:
    ax.plot(monthly_cat.index, monthly_cat[col], label=col, linewidth=1.5)

ax.legend(loc='upper left', fontsize=8)
ax.set_title('Monthly Revenue by Category')
plt.tight_layout()
plt.show()

Gestapeld staafdiagram voor maandelijkse omzet

Een gestapeld staafdiagram toont de totale maandelijkse omzet en laat tegelijkertijd de bijdrage van elke categorie aan de stapel zien. Gebruik rechtstreeks op de gedraaide DataFrame monthly_cat.plot(kind='bar', stacked=True, ax=ax). Gestapelde staven werken het best met minder dan zes categorieën; anders worden de kleuren moeilijk van elkaar te onderscheiden.

fig, ax = plt.subplots(figsize=(12, 5))

monthly_cat.plot(kind='bar', stacked=True, ax=ax, colormap='tab10')

ax.set_title('Monthly Revenue by Category (Stacked)')
ax.set_xlabel('Month')
ax.set_ylabel('Revenue')
ax.legend(loc='upper left', fontsize=8)
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()

Groeipercentage ten opzichte van de vorige maand

Geef het procentuele groeipercentage ten opzichte van de vorige maand naast de omzet weer voor extra context: een visueel kleine staaf in januari kan bijvoorbeeld staan voor een groeisprong van 20 % ten opzichte van de vorige maand. Bereken de groei met monthly.pct_change() * 100 en teken deze op een tweede y-as met ax.twinx(). Zo deel je dezelfde x-as zonder eenheden door elkaar te halen.

growth = monthly.pct_change() * 100

fig, ax1 = plt.subplots(figsize=(12, 5))
ax2 = ax1.twinx()

ax1.bar(monthly.index, monthly.values, width=20, color='steelblue', alpha=0.6, label='Revenue')
ax2.plot(growth.index, growth.values, color='red', marker='o', label='MoM Growth %')

ax1.set_ylabel('Revenue')
ax2.set_ylabel('MoM Growth %')
plt.title('Revenue and Month-over-Month Growth')
plt.tight_layout()
plt.show()

De figuur opslaan voor rapporten

Gebruik fig.savefig('monthly_trend.png', dpi=150, bbox_inches='tight') om een PNG met hoge resolutie te maken die geschikt is voor presentaties of webdashboards. Het argument bbox_inches='tight' verwijdert overtollige witruimte en dpi=150 zorgt voor een scherpe afbeelding zonder een onnodig groot bestand. Sla de figuur ook op als PDF voor rapporten met afdrukkwaliteit.

fig.savefig('monthly_trend.png', dpi=150, bbox_inches='tight')
fig.savefig('monthly_trend.pdf', bbox_inches='tight')
print('Figure saved as PNG and PDF')

Korte controle

Test je begrip van de concepten voor data-analyse uit deze les.

Samenvatting van de les

In deze les heb je geleerd hoe je maandelijkse omzettotalen berekent en als lijndiagram weergeeft, een voortschrijdend gemiddelde over de grafiek legt en maanden met hoogte- en dieptepunten annoteert, en figuren van publicatiekwaliteit opslaat als PNG en PDF. Hierna bekijken we sessievorming en de volgorde van gebeurtenissen in gegevens over gebruikersgedrag.

Gratis beginnen

Leer Python met een AI-tutor — gratis

Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.

Cursussen
30
Lessen
120

Veelgestelde vragen

Is de les “Maandelijkse trendvisualisatie” gratis?

Ja — de volledige tekst van “Maandelijkse trendvisualisatie” kun je hier gratis op het web lezen. Als je interactief wilt oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is, en de rest van de cursus Pandas & NumPy Academy wilt ontgrendelen, kun je upgraden naar CoddyKit PRO. De cursus Pandas & NumPy Academy bevat in totaal 4 lessen.

Wat leer ik in “Maandelijkse trendvisualisatie”?

Visualiseer de maandelijkse omzet als lijngrafiek, leg er een voortschrijdend gemiddelde van drie maanden overheen en annoteer maanden met pieken en dalen. Je oefent met Pandas & NumPy Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.

Heb ik ervaring nodig om met Pandas & NumPy Academy te beginnen?

Ervaring vooraf is niet nodig. Pandas & NumPy Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 4 van 4.

Hoe lang duurt de les “Maandelijkse trendvisualisatie”?

De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.

Kan ik code schrijven en uitvoeren in deze les over Pandas & NumPy Academy?

Ja. Elke les over Pandas & NumPy Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.

Alle lessen in deze cursus

  1. De salesdataset laden en controleren
  2. Omzetberekeningen en feature-engineering
  3. GroupBy-analyse per regio en categorie
  4. Maandelijkse trendvisualisatie
← Terug naar Pandas & NumPy Academy