0Pricing
Pandas & NumPy Academy · Lekcja

Obliczenia przychodu i inżynieria cech

Oblicz przychód z poszczególnych pozycji, utwórz kolumny miesiąca i kwartału oraz dodaj flagę rabatu dla zamówień przekraczających próg.

Obliczenia przychodu i inżynieria cech to bezpłatna lekcja Pandas & NumPy Academy na CoddyKit. To lekcja 2 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 przychodu z pozycji zamówienia

Najbardziej podstawowym obliczeniem w zbiorze danych sprzedażowych jest przychód z pozycji zamówienia: iloczyn ilości i ceny jednostkowej dla każdego wiersza. Utwórz tę kolumnę za pomocą wektoryzowanego mnożenia, aby NumPy przetworzył wszystkie wiersze jednocześnie, bez pętli w Pythonie. Ta kolumna stanowi podstawę wszystkich agregacji w analizie.

import pandas as pd

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

df['revenue'] = df['quantity'] * df['unit_price']
print(df[['quantity', 'unit_price', 'revenue']].head())

Wyodrębnianie kolumn miesiąca i kwartału

Grupowanie według okresu kalendarzowego jest niezbędne do analizy trendów. Użyj akcesora .dt na kolumnie datetime, aby wyodrębnić rok, miesiąc i kwartał. Przechowywanie tych wartości w osobnych kolumnach całkowitoliczbowych przyspiesza operacje groupby i umożliwia łatwe filtrowanie według okresu bez wielokrotnego analizowania ciągów znaków.

df['year'] = df['order_date'].dt.year
df['month'] = df['order_date'].dt.month
df['quarter'] = df['order_date'].dt.quarter
df['year_month'] = df['order_date'].dt.to_period('M')

print(df[['order_date', 'year', 'month', 'quarter', 'year_month']].head())

Tworzenie znacznika rabatu

Reguły biznesowe często definiują znacznik rabatu: zamówienia, których suma przekracza określony próg, otrzymują rabat. Użyj np.where lub porównania logicznego, aby wydajnie utworzyć tę kolumnę binarną. Znacznik rabatu pozwala analitykom porównywać rozkłady przychodów zamówień rabatowanych i zamówień w pełnej cenie w ramach jednego wywołania groupby.

import numpy as np

DISCOUNT_THRESHOLD = 500

df['is_discounted'] = np.where(df['revenue'] >= DISCOUNT_THRESHOLD, 1, 0)

print(df['is_discounted'].value_counts())
print(df.groupby('is_discounted')['revenue'].mean())

Obliczanie kolumny marży zysku

Jeśli zbiór danych zawiera kolumnę cost_price, można obliczyć marżę zysku za pomocą (unit_price - cost_price) / unit_price. Użyj clip(lower=0), aby ograniczyć ujemne marże wynikające z błędów danych przed dalszą analizą. Kolumny marży umożliwiają agregacje groupby ukierunkowane na zysk, wykonywane obok agregacji przychodów.

df['margin'] = ((df['unit_price'] - df['cost_price']) / df['unit_price']).clip(lower=0)

print(df[['unit_price', 'cost_price', 'margin']].describe())

Cecha określająca liczbę dni od pierwszego zamówienia

Liczba dni między pierwszym zamówieniem klienta a bieżącym zamówieniem jest przydatną cechą stażu klienta. Oblicz ją, grupując dane według customer_id, pobierając minimalną datę jako datę kohorty i odejmując ją od daty z każdego wiersza. Działania na wartościach timedelta zwracają kolumnę wartości timedelta64, które można przekonwertować na całkowitą liczbę dni za pomocą .dt.days.

first_order = df.groupby('customer_id')['order_date'].transform('min')
df['days_since_first_order'] = (df['order_date'] - first_order).dt.days

print(df[['customer_id', 'order_date', 'days_since_first_order']].head())

Przedział wielkości zamówienia za pomocą pd.cut

Podziel kolumnę revenue na opisane przedziały wielkości za pomocą pd.cut(), aby utworzyć cechę porządkową na potrzeby segmentacji. Podaj jawne wartości bins i labels odpowiadające biznesowym definicjom małych, średnich i dużych zamówień. Wynikowa kolumna jest obiektem Pandas Categorical, który umożliwia wydajne grupowanie.

bins = [0, 100, 500, 2000, float('inf')]
labels = ['Small', 'Medium', 'Large', 'Enterprise']

df['order_size'] = pd.cut(df['revenue'], bins=bins, labels=labels)
print(df['order_size'].value_counts())

Skumulowany przychód w czasie

Posortuj DataFrame według order_date i użyj cumsum() na kolumnie przychodów, aby śledzić narastanie łącznego przychodu w ciągu roku. Ta seria skumulowana ułatwia rozpoznanie, czy przychód rośnie liniowo, przyspiesza czy się stabilizuje, i stanowi podstawę wykresu kaskadowego lub skumulowanego wykresu liniowego.

df_sorted = df.sort_values('order_date')
df_sorted['cumulative_revenue'] = df_sorted['revenue'].cumsum()

print(df_sorted[['order_date', 'revenue', 'cumulative_revenue']].tail())

Cecha: weekend a dzień roboczy

Właściwość dt.day_of_week zwraca wartości od 0 (poniedziałek) do 6 (niedziela). Oznacz sobotę (5) i niedzielę (6) jako zamówienia weekendowe, aby sprawdzić, czy zachowania zakupowe w weekend różnią się od tych w dni robocze. Jest to popularna cecha w eksploracyjnej analizie danych sprzedaży detalicznej oraz w analizie testów A/B.

df['is_weekend'] = df['order_date'].dt.day_of_week >= 5

print(df.groupby('is_weekend')['revenue'].agg(['mean', 'count']))

Ranking klientów według przychodu

Zidentyfikuj najlepszych klientów, obliczając łączny przychód dla każdego customer_id za pomocą groupby().sum(), a następnie tworząc ranking przy użyciu .rank(ascending=False, method='dense'). Dodanie rankingu do głównego DataFrame za pomocą map() pozwala filtrować klientów z pierwszej N pozycji jednym warunkiem logicznym.

customer_revenue = df.groupby('customer_id')['revenue'].sum()
customer_rank = customer_revenue.rank(ascending=False, method='dense').astype(int)

df['customer_revenue_rank'] = df['customer_id'].map(customer_rank)
print(df[df['customer_revenue_rank'] <= 10][['customer_id', 'customer_revenue_rank']].drop_duplicates())

Normalizacja przychodu za pomocą wyniku Z

Znormalizuj kolumnę przychodów do wyniku Z, aby móc porównywać wielkości zamówień między różnymi kategoriami produktów o bardzo różnych przedziałach cenowych. Użyj (df['revenue'] - df['revenue'].mean()) / df['revenue'].std(). Wyniki Z powyżej 3 lub poniżej -3 to wartości odstające, które warto zbadać przed modelowaniem.

mean_rev = df['revenue'].mean()
std_rev = df['revenue'].std()

df['revenue_zscore'] = (df['revenue'] - mean_rev) / std_rev

outliers = df[df['revenue_zscore'].abs() > 3]
print(f'Outlier orders: {len(outliers)}')

Zapisywanie wzbogaconego o cechy DataFrame

Po dodaniu obliczonych kolumn zapisz wzbogacony DataFrame, aby każdy kolejny notebook rozpoczynał pracę z takim samym, spójnym stanem danych. Użyj to_parquet(), aby zachować typy danych, zwłaszcza typ Categorical kolumny order_size i typ datetime kolumny order_date. Udokumentuj nowe kolumny w krótkim bloku komentarza na początku skryptu.

# New columns added:
# revenue, year, month, quarter, year_month
# is_discounted, order_size, is_weekend
# days_since_first_order, customer_revenue_rank, revenue_zscore

df.to_parquet('sales_features.parquet', index=False)
print('Feature DataFrame saved:', df.shape)

Szybkie sprawdzenie

Sprawdź swoją wiedzę na temat analizy danych zdobytą w tej lekcji.

Podsumowanie lekcji

W tej lekcji nauczyli się Państwo: obliczać kolumny przychodów i marży zysku, wyodrębniać cechy czasowe za pomocą akcesora .dt oraz tworzyć takie cechy jak znaczniki rabatów, przedziały wielkości zamówień i rankingi klientów. Następnie zajmiemy się analizą groupby według regionu i kategorii.

Często zadawane pytania

Czy lekcja „Obliczenia przychodu i inżynieria cech” jest bezpłatna?

Tak — pełny tekst „Obliczenia przychodu i inżynieria cech” 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 „Obliczenia przychodu i inżynieria cech”?

Oblicz przychód z poszczególnych pozycji, utwórz kolumny miesiąca i kwartału oraz dodaj flagę rabatu dla zamówień przekraczających próg. Ć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 2 z 4.

Ile czasu zajmuje lekcja „Obliczenia przychodu i inżynieria cech”?

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

  1. Wczytywanie i audyt zbioru danych sprzedażowych
  2. Obliczenia przychodu i inżynieria cech
  3. Analiza GroupBy według regionu i kategorii
  4. Wizualizacja trendów miesięcznych
← Powrót do Pandas & NumPy Academy