Wizualizacja trendów miesięcznych
Przedstaw miesięczny przychód na wykresie liniowym, nałóż 3-miesięczną średnią kroczącą i oznacz miesiące z maksimum oraz minimum.
Wizualizacja trendów miesięcznych to bezpłatna lekcja Pandas & NumPy Academy na CoddyKit. To lekcja 4 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Pandas & NumPy Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Pandas & NumPy Academy zawiera 4 lekcji w sumie.
Obliczanie miesięcznych sum przychodów
Przed utworzeniem wykresu zagreguj sprzedażowy DataFrame do sum miesięcznych. Grupuj według kolumny typu Period year_month i zsumuj przychód. Przekonwertuj PeriodIndex na DatetimeIndex za pomocą .to_timestamp(), aby formater dat Matplotlib poprawnie wyświetlał etykiety podziałki. Sortowanie według indeksu zapewnia chronologiczny przebieg wykresu od lewej do prawej.
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())Tworzenie liniowego wykresu miesięcznych przychodów
Utwórz obiekt Figure i osie Axes za pomocą plt.subplots(figsize=(12, 5)), a następnie wywołaj ax.plot(), aby narysować trend miesięcznych przychodów. Użyj marker='o', aby umieścić kropkę przy każdym miesiącu i zapewnić widoczność poszczególnych punktów danych nawet wtedy, gdy linia jest wygładzona. Ustaw kolor i szerokość linii tak, aby główny trend wyróżniał się na tle dodanych później nakładek.
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()Dodawanie 3-miesięcznej średniej kroczącej
Surowy miesięczny wykres przychodów może wyglądać poszarpanie z powodu szumu sezonowego. Nałóż 3-miesięczną średnią kroczącą obliczoną za pomocą monthly.rolling(3).mean(), aby wyraźniej pokazać podstawowy trend. Narysuj ją linią przerywaną w kontrastowym kolorze, aby wyróżniała się na tle surowej serii, nie zasłaniając jej.
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()Dodawanie adnotacji do miesiąca szczytowego
Użyj ax.annotate(), aby oznaczyć miesiąc o najwyższym przychodzie. Znajdź szczyt za pomocą monthly.idxmax(), a jego wartość za pomocą monthly.max(). Strzałka adnotacji wskazuje od etykiety tekstowej do punktu danych oznaczającego szczyt, dzięki czemu wniosek jest od razu widoczny dla każdego odbiorcy wykresu, także dla osób, które otrzymają go jako plik PNG lub PDF.
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()Dodawanie adnotacji do miesiąca z najniższym wynikiem
Podobnie oznacz miesiąc z najniższym przychodem za pomocą monthly.idxmin(), aby wskazać potencjalną sezonowość lub zakłócenia. Adnotacje zarówno przy maksimum, jak i minimum przedstawiają pełny obraz: pozwalają interesariuszom zobaczyć nie tylko najlepszy miesiąc, lecz także to, jak nisko może spaść przychód, co pomaga w planowaniu przepływów pieniężnych.
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()Formatowanie etykiet dat na osi
Domyślne etykiety dat na osi w bibliotece Matplotlib często nachodzą na siebie lub mają nieczytelny format. Zaimportuj mdates z matplotlib i ustaw MonthLocator oraz DateFormatter, aby kontrolować częstotliwość podziałki i format etykiet. Obrócenie etykiet podziałki o 45 stopni zapobiega ich nakładaniu się na osi obejmującej 12 miesięcy.
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()Dodawanie zacienionego obszaru dla IV kwartału
Wyróżnij okres IV kwartału (październik–grudzień) za pomocą zacienionego tła z użyciem ax.axvspan(). Dzięki temu wzorce sezonowe stają się od razu widoczne: jeśli maksimum regularnie przypada na zacieniony obszar, IV kwartał jest ważnym okresem sprzedaży, na który warto kierować promocje. Parametr alpha steruje przezroczystością cieniowania.
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()Wykres przychodu według kategorii w czasie
Utwórz wykres wieloliniowy, na którym każda linia reprezentuje kategorię produktu. Przestaw DataFrame zawierający dane miesięczne według kategorii tak, aby kolumnami były kategorie, a indeksem — czas, a następnie iteruj po kolumnach i dla każdej wywołuj ax.plot(). Matplotlib automatycznie przypisuje inny kolor każdej linii przy wielokrotnym wywołaniu tej funkcji dla tych samych obiektów 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()Skumulowany wykres słupkowy miesięcznego przychodu
Skumulowany wykres słupkowy pokazuje łączny miesięczny przychód, a jednocześnie ujawnia udział każdej kategorii w całym słupku. Użyj bezpośrednio na przestawionym DataFrame instrukcji monthly_cat.plot(kind='bar', stacked=True, ax=ax). Słupki skumulowane sprawdzają się najlepiej przy mniej niż sześciu kategoriach; w przeciwnym razie kolory stają się trudne do rozróżnienia.
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()Tempo wzrostu miesiąc do miesiąca
Przedstaw procentowe tempo wzrostu miesiąc do miesiąca obok przychodu, aby zapewnić kontekst: wizualnie niewysoki słupek w styczniu może oznaczać wzrost o 20% względem poprzedniego miesiąca. Oblicz wzrost za pomocą monthly.pct_change() * 100 i przedstaw go na dodatkowej osi Y, używając ax.twinx(), aby współdzielić tę samą oś X bez mieszania jednostek.
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()Zapisywanie wykresu do raportów
Użyj fig.savefig('monthly_trend.png', dpi=150, bbox_inches='tight'), aby utworzyć wysokiej rozdzielczości plik PNG odpowiedni do prezentacji lub paneli internetowych. Argument bbox_inches='tight' usuwa nadmiarowe białe miejsce, a dpi=150 zapewnia wyraźny obraz bez nadmiernego zwiększania rozmiaru pliku. Zapisz również plik PDF na potrzeby raportów przeznaczonych do druku.
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')Szybkie sprawdzenie
Sprawdź swoją znajomość zagadnień analizy danych z tej lekcji.
Podsumowanie lekcji
W tej lekcji nauczyłeś się: obliczać miesięczne sumy przychodów i przedstawiać je na wykresie liniowym, nakładać średnią kroczącą oraz oznaczać miesiące z maksimum i minimum, a także zapisywać wykresy o jakości odpowiedniej do publikacji w formatach PNG i PDF. Następnie zajmiemy się tworzeniem sesji i sekwencjonowaniem zdarzeń w danych o zachowaniu użytkowników.
Ucz się Python dzięki korepetycjom AI — za darmo
Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.
- Kursy
- 30
- Lekcje
- 120
Często zadawane pytania
Czy lekcja „Wizualizacja trendów miesięcznych” jest bezpłatna?
Tak — pełny tekst „Wizualizacja trendów miesięcznych” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Pandas & NumPy Academy, przejdź na CoddyKit PRO. Kurs Pandas & NumPy Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Wizualizacja trendów miesięcznych”?
Przedstaw miesięczny przychód na wykresie liniowym, nałóż 3-miesięczną średnią kroczącą i oznacz miesiące z maksimum oraz minimum. Ćwiczysz Pandas & NumPy Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Pandas & NumPy Academy?
Nie wymagamy żadnego doświadczenia. Pandas & NumPy Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 4 z 4.
Ile czasu zajmuje lekcja „Wizualizacja trendów miesięcznych”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Pandas & NumPy Academy?
Tak. Każda lekcja Pandas & NumPy Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Wczytywanie i audyt zbioru danych sprzedażowych
- Obliczenia przychodu i inżynieria cech
- Analiza GroupBy według regionu i kategorii
- Wizualizacja trendów miesięcznych