Inntektsberegninger og funksjonsutvikling
Beregn inntekt per ordrelinje, opprett kolonner for måned og kvartal, og legg til et rabattflagg for ordrer over en terskelverdi.
Inntektsberegninger og funksjonsutvikling er en gratis leksjon i Pandas & NumPy Academy på CoddyKit. Dette er leksjon 2 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Pandas & NumPy Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Pandas & NumPy Academy inneholder totalt 4 leksjoner.
Beregne inntekt per ordrelinje
Den mest grunnleggende beregningen i et salgsdatasett er inntekt per ordrelinje: produktet av antall og enhetspris for hver rad. Opprett kolonnen med en vektorisert multiplikasjon, slik at NumPy behandler alle rader samtidig uten en Python-løkke. Denne kolonnen danner grunnlaget for alle aggregeringer i analysen.
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())Hente ut kolonner for måned og kvartal
Gruppering etter kalenderperioder er avgjørende for trendanalyse. Bruk .dt-tilgangen på en datetime-kolonne for å hente ut år, måned og kvartal. Når disse lagres som separate heltallskolonner, blir groupby-operasjoner raskere, og De kan filtrere etter periode uten å tolke strenger på nytt hver gang.
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())Opprette et rabattflagg
Forretningsregler definerer ofte et rabattflagg: Ordrer der totalbeløpet overstiger en terskel, får rabatt. Bruk np.where eller en boolsk sammenligning for å opprette denne binære kolonnen effektivt. Et rabattflagg gjør det mulig for analytikere å sammenligne inntektsfordelingen for rabatterte ordrer og ordrer til full pris i ett enkelt groupby-kall.
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())Beregne en kolonne for fortjenestemargin
Hvis datasettet inneholder en cost_price-kolonne, kan De beregne fortjenestemarginen som (unit_price - cost_price) / unit_price. Bruk clip(lower=0) for å begrense eventuelle negative marginer som skyldes datafeil, før videre analyse. Marginkolonner muliggjør groupby-aggregeringer med fokus på fortjeneste i tillegg til inntekt.
df['margin'] = ((df['unit_price'] - df['cost_price']) / df['unit_price']).clip(lower=0)
print(df[['unit_price', 'cost_price', 'margin']].describe())Funksjon for antall dager siden første ordre
Antallet dager mellom en kundes første ordre og den gjeldende ordren er en nyttig funksjon for kundelojalitetstid. Beregn den ved å gruppere etter customer_id, bruke den tidligste datoen som kohortdato og trekke denne fra datoen i hver rad. Timedelta-aritmetikk returnerer en kolonne med verdier av typen timedelta64, som De konverterer til hele dager med .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())Ordrestørrelsesgruppe med pd.cut
Del revenue-kolonnen inn i merkede størrelsesgrupper med pd.cut() for å opprette en ordinal funksjon til segmentering. Oppgi eksplisitte bins og labels som samsvarer med virksomhetens definisjoner av små, mellomstore og store ordrer. Den resulterende kolonnen er en Pandas Categorical, som grupperes effektivt.
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())Akkumulert inntekt over tid
Sorter DataFrame-en etter order_date og bruk cumsum() på inntektskolonnen for å følge hvordan totalinntekten samlet seg opp gjennom året. Denne kumulative serien gjør det enkelt å se om inntekten vokser lineært, akselererer eller flater ut, og danner grunnlaget for et fossefallsdiagram eller et kumulativt linjediagram.
df_sorted = df.sort_values('order_date')
df_sorted['cumulative_revenue'] = df_sorted['revenue'].cumsum()
print(df_sorted[['order_date', 'revenue', 'cumulative_revenue']].tail())Funksjon for helg kontra ukedag
Egenskapen dt.day_of_week returnerer 0 (mandag) til 6 (søndag). Marker lørdag (5) og søndag (6) som helgeordrer for å undersøke om kjøpsatferden i helgen skiller seg fra atferden på hverdager. Dette er en vanlig funksjon i utforskende dataanalyse av detaljhandel og i A/B-testanalyse.
df['is_weekend'] = df['order_date'].dt.day_of_week >= 5
print(df.groupby('is_weekend')['revenue'].agg(['mean', 'count']))Rangere kunder etter inntekt
Finn de viktigste kundene ved å beregne total inntekt per customer_id med groupby().sum() og deretter rangere med .rank(ascending=False, method='dense'). Når De legger rangeringen tilbake i hoved-DataFrame-en med map(), kan De filtrere til de N viktigste kundene med én enkelt boolsk betingelse.
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())Normalisere inntekt med Z-skår
Normaliser inntektskolonnen til en Z-skår, slik at De kan sammenligne ordrestørrelser på tvers av ulike produktkategorier med svært forskjellige prisnivåer. Bruk (df['revenue'] - df['revenue'].mean()) / df['revenue'].std(). Z-skårer over 3 eller under -3 er statistiske avvik som bør undersøkes før modellering.
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)}')Lagre en funksjonsutvidet DataFrame
Etter at De har lagt til beregnede kolonner, bør De lagre den utvidede DataFrame-en, slik at alle påfølgende notatbøker starter fra samme konsistente tilstand. Bruk to_parquet() for å bevare datatyper, særlig Categorical-kolonnen order_size og datetime-kolonnen order_date. Dokumenter de nye kolonnene i en kort kommentarseksjon øverst i skriptet.
# 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)Hurtigsjekk
Test forståelsen Deres av begreper innen dataanalyse fra denne leksjonen.
Oppsummering av leksjonen
I denne leksjonen lærte De å: beregne kolonner for inntekt og fortjenestemargin, hente ut tidsfunksjoner med .dt-tilgangen og utvikle funksjoner som rabattflagg, ordrestørrelsesgrupper og kunderangeringer. Deretter skal vi utforske groupby-analyse etter region og kategori.
Lær deg Python med en AI-veileder – gratis
Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.
- Kurs
- 30
- Leksjoner
- 120
Ofte stilte spørsmål
Er leksjonen «Inntektsberegninger og funksjonsutvikling» gratis?
Ja – hele teksten i «Inntektsberegninger og funksjonsutvikling» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av Pandas & NumPy Academy-kurset, kan du oppgradere til CoddyKit PRO. Kurset i Pandas & NumPy Academy inneholder totalt 4 leksjoner.
Hva lærer jeg i «Inntektsberegninger og funksjonsutvikling»?
Beregn inntekt per ordrelinje, opprett kolonner for måned og kvartal, og legg til et rabattflagg for ordrer over en terskelverdi. Du øver på Pandas & NumPy Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.
Trenger jeg erfaring for å begynne med Pandas & NumPy Academy?
Ingen tidligere erfaring er nødvendig. Pandas & NumPy Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 2 av 4.
Hvor lang tid tar leksjonen «Inntektsberegninger og funksjonsutvikling»?
De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.
Kan jeg skrive og kjøre kode i denne Pandas & NumPy Academy-leksjonen?
Ja. Alle Pandas & NumPy Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.
Alle leksjonene i dette kurset
- Laste inn og kontrollere salgsdatasettet
- Inntektsberegninger og funksjonsutvikling
- GroupBy-analyse etter region og kategori
- Visualisering av månedlige trender