Pandas & NumPy Academy · Lektion

Visualisera månadstrender

Visa månadsintäkter som ett linjediagram, lägg över ett tremånaders glidande medelvärde och markera månader med toppar och dalar.

Lektion 4 av 413 steg

Visualisera månadstrender är en gratis lektion i Pandas & NumPy Academy på CoddyKit. Detta är lektion 4 av 4. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för Pandas & NumPy Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Pandas & NumPy Academy innehåller totalt 4 lektioner.

Beräkna månatliga intäktssummor

Innan ni ritar diagram aggregerar ni försäljnings-DataFrame till månadssummor. Gruppera efter Period-kolumnen year_month och summera intäkterna. Konvertera PeriodIndex till en DatetimeIndex med .to_timestamp(), så att Matplotlibs datumformatterare återger axelmarkeringarnas etiketter korrekt. Genom att sortera efter index säkerställer ni att linjediagrammet löper kronologiskt från vänster till höger.

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

Rita ett linjediagram över månatliga intäkter

Skapa en Figure och Axes med plt.subplots(figsize=(12, 5)) och anropa ax.plot() för att rita trenden för månatliga intäkter. Använd marker='o' för att placera en punkt vid varje månad, så att enskilda datapunkter syns även när linjen är jämn. Ange färg och linjebredd så att den primära trenden framträder tydligt från eventuella överlagringar som ni lägger till senare.

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

Lägg över ett glidande tremånadersmedelvärde

En rå linje över månatliga intäkter kan se ojämn ut på grund av säsongsvariationer. Lägg över ett rullande tremånadersmedelvärde som beräknas med monthly.rolling(3).mean() för att tydligare visa den underliggande trenden. Rita det som en streckad linje i en kontrasterande färg, så att det skiljer sig från den råa serien utan att dölja den.

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

Markera månaden med högst intäkter

Använd ax.annotate() för att markera månaden med högst intäkter. Hitta toppen med monthly.idxmax() och dess värde med monthly.max(). Annoteringspilen pekar från en textetikett till datapunkten med högst värde, vilket gör insikten omedelbart synlig för alla som läser diagrammet, även de som får det som en PNG- eller PDF-fil.

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

Markera månaden med lägst intäkter

På motsvarande sätt markerar Ni månaden med lägst intäkt med monthly.idxmin() för att upptäcka möjlig säsongsvariation eller störningar. Anteckningar vid både toppen och botten ger en fullständig bild: de gör att intressenter kan se inte bara den bästa månaden utan också hur mycket intäkterna kan sjunka, vilket underlättar planeringen av kassaflödet.

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

Formatera etiketter för datumaxeln

Matplotlibs standardetiketter för datumaxeln överlappar ofta varandra eller använder ett svårläst format. Importera mdates från matplotlib och ange en MonthLocator och en DateFormatter för att styra intervallen mellan markeringarna och etikettformatet. Om Ni roterar etiketter för markeringarna 45 grader förhindrar Ni överlappning på en axel med 12 månader.

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

Lägg till ett skuggat område för Q4

Markera Q4-perioden (oktober–december) med en skuggad bakgrund med hjälp av ax.axvspan(). Då blir säsongsmönster omedelbart synliga: om toppen konsekvent infaller inom det skuggade området är Q4 en viktig försäljningsperiod som är värd att rikta kampanjer mot. Parametern alpha styr skuggningens transparens.

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

Visa intäkter per kategori över tid

Skapa ett diagram med flera linjer där varje linje representerar en produktkategori. Pivåtera DataFrame-objektet med månadsdata per kategori så att kolumnerna blir kategorier och indexet blir tid. Iterera sedan över kolumnerna och anropa ax.plot() för varje kolumn. Matplotlib tilldelar automatiskt en annan färg till varje linje när funktionen anropas upprepade gånger på samma Axes.

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

Staplat stapeldiagram för månadsintäkter

Ett staplat stapeldiagram visar de totala månadsintäkterna och synliggör samtidigt varje kategoris bidrag till stapeln. Använd monthly_cat.plot(kind='bar', stacked=True, ax=ax) direkt på den pivåterade DataFrame-strukturen. Staplar fungerar bäst när Ni har färre än sex kategorier; annars blir färgerna svåra att skilja åt.

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

Tillväxttakt från månad till månad

Visa den procentuella tillväxttakten från månad till månad tillsammans med intäkterna för att ge sammanhang: en visuellt liten stapel i januari kan motsvara en tillväxt på 20 % jämfört med föregående månad. Beräkna tillväxten med monthly.pct_change() * 100 och visa den på en sekundär y-axel med ax.twinx() för att dela samma x-axel utan att blanda ihop enheterna.

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

Spara figuren för rapporter

Använd fig.savefig('monthly_trend.png', dpi=150, bbox_inches='tight') för att skapa en högupplöst PNG-fil som passar för presentationsbilder eller webbaserade instrumentpaneler. Argumentet bbox_inches='tight' tar bort överflödigt tomrum, och dpi=150 ger en skarp bild utan en onödigt stor fil. Spara även som PDF för rapporter i tryckkvalitet.

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

Snabbtest

Testa Era kunskaper om begrepp inom dataanalys från den här lektionen.

Sammanfattning av lektionen

I den här lektionen har Ni lärt Er att beräkna totala månadsintäkter och visa dem i ett linjediagram, lägga en rullande medelvärdeskurva ovanpå samt annotera månaderna med högst och lägst värde och spara figurer med publiceringskvalitet som PNG och PDF. Härnäst utforskar vi sessionsindelning och händelsesekvenser i data om användarbeteende.

Gratis att börja

Lär dig Python med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
30
Lektioner
120

Vanliga frågor

Är lektionen ”Visualisera månadstrender” gratis?

Ja – hela texten till ”Visualisera månadstrender” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i Pandas & NumPy Academy, kan Ni uppgradera till CoddyKit PRO. Kursen i Pandas & NumPy Academy innehåller totalt 4 lektioner.

Vad lär jag mig i ”Visualisera månadstrender”?

Visa månadsintäkter som ett linjediagram, lägg över ett tremånaders glidande medelvärde och markera månader med toppar och dalar. Ni övar på Pandas & NumPy Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig Pandas & NumPy Academy?

Du behöver inga förkunskaper. Utbildningen i Pandas & NumPy Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 4 av 4.

Hur lång tid tar lektionen ”Visualisera månadstrender”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här Pandas & NumPy Academy-lektionen?

Ja. Varje Pandas & NumPy Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. Läs in och granska försäljningsdatasetet
  2. Intäktsberäkningar och feature engineering
  3. GroupBy-analys efter region och kategori
  4. Visualisera månadstrender
← Tillbaka till Pandas & NumPy Academy