0Pricing
Pandas & NumPy Academy · Lezione

Calcolo dei ricavi e feature engineering

Calcoli i ricavi per riga, crei le colonne relative a mese e trimestre e aggiunga un flag di sconto per gli ordini oltre una determinata soglia.

Calcolo dei ricavi e feature engineering è una lezione Pandas & NumPy Academy gratuita su CoddyKit. Questa è la lezione 2 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Pandas & NumPy Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Pandas & NumPy Academy include 4 lezioni in totale.

Calcolo dei ricavi per riga

Il calcolo più fondamentale in un dataset di vendite è il ricavo per riga: il prodotto della quantità per il prezzo unitario di ciascuna riga. Crei la colonna con una moltiplicazione vettorializzata, così NumPy elabora tutte le righe simultaneamente senza un ciclo Python. Questa colonna costituisce la base di tutte le aggregazioni dell’analisi.

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

Estrazione delle colonne di mese e trimestre

Raggruppare per periodo di calendario è essenziale per analizzare le tendenze. Usi l’accessor .dt su una colonna datetime per estrarre anno, mese e trimestre. Memorizzare questi valori in colonne intere separate rende più veloci le operazioni di groupby e consente di filtrare facilmente per periodo, senza ripetere il parsing delle stringhe.

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

Creazione di un flag per gli sconti

Le regole aziendali definiscono spesso un flag per gli sconti: agli ordini il cui totale supera una soglia viene applicato uno sconto. Usi np.where o un confronto booleano per creare in modo efficiente questa colonna binaria. Un flag per gli sconti consente agli analisti di confrontare, con una sola chiamata a groupby, le distribuzioni dei ricavi degli ordini scontati e di quelli a prezzo pieno.

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

Calcolo della colonna del margine di profitto

Se il dataset include una colonna cost_price, può calcolare il margine di profitto con (unit_price - cost_price) / unit_price. Usi clip(lower=0) per limitare a zero gli eventuali margini negativi causati da errori nei dati prima di procedere con ulteriori analisi. Le colonne dei margini consentono aggregazioni di groupby incentrate sul profitto, oltre a quelle sui ricavi.

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

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

Feature dei giorni dal primo ordine

Il numero di giorni tra il primo ordine di un cliente e l’ordine corrente è una feature utile di anzianità del cliente. La calcoli raggruppando per customer_id, prendendo la data minima come data della coorte e sottraendola dalla data di ogni riga. L’aritmetica dei timedelta restituisce una colonna di valori timedelta64, che converte in giorni interi con .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())

Fasce dimensionali degli ordini con pd.cut

Suddivida la colonna revenue in fasce dimensionali con etichette usando pd.cut(), per creare una feature ordinale utile alla segmentazione. Fornisca bins e labels espliciti, coerenti con le definizioni aziendali di ordini piccoli, medi e grandi. La colonna risultante è un Categorical di Pandas, che consente raggruppamenti efficienti.

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

Ricavi cumulativi nel tempo

Ordini il DataFrame per order_date e usi cumsum() sulla colonna dei ricavi per monitorare come si è accumulato il ricavo totale durante l’anno. Questa serie cumulativa facilita l’individuazione di una crescita lineare, di un’accelerazione o di un appiattimento dei ricavi ed è la base per un grafico a cascata o a linee cumulative.

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

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

Feature del fine settimana rispetto ai giorni feriali

La proprietà dt.day_of_week restituisce valori da 0 (lunedì) a 6 (domenica). Contrassegni il sabato (5) e la domenica (6) come ordini del fine settimana per verificare se il comportamento d’acquisto nel fine settimana differisce da quello nei giorni feriali. Questa è una feature comune nell’EDA del settore retail e nell’analisi dei test A/B.

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

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

Classificazione dei clienti per ricavi

Identifichi i clienti principali calcolando il ricavo totale per customer_id con groupby().sum() e assegnando poi la posizione con .rank(ascending=False, method='dense'). Aggiungendo la posizione al DataFrame principale con map(), può filtrare i primi N clienti con una sola condizione booleana.

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

Normalizzazione dei ricavi con lo Z-score

Normalizzi la colonna dei ricavi trasformandola in uno Z-score, così può confrontare le dimensioni degli ordini tra categorie di prodotti con fasce di prezzo molto diverse. Usi (df['revenue'] - df['revenue'].mean()) / df['revenue'].std(). Gli Z-score superiori a 3 o inferiori a -3 sono valori anomali statistici che vale la pena esaminare prima della modellazione.

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

Salvataggio del DataFrame arricchito con feature

Dopo aver aggiunto le colonne calcolate, salvi il DataFrame arricchito, così ogni notebook successivo parte dallo stesso stato coerente. Usi to_parquet() per preservare i dtype, in particolare il Categorical order_size e il datetime order_date. Documenti le nuove colonne in un breve blocco di commenti all’inizio dello script.

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

Verifica rapida

Verifichi la Sua comprensione dei concetti di analisi dei dati trattati in questa lezione.

Riepilogo della lezione

In questa lezione ha imparato a: calcolare le colonne dei ricavi e del margine di profitto, estrarre feature temporali con l’accessor .dt e creare feature come flag per gli sconti, fasce dimensionali degli ordini e classifiche dei clienti. Ora esploreremo l’analisi con groupby per area geografica e categoria.

Domande Frequenti

La lezione «Calcolo dei ricavi e feature engineering» è gratuita?

Sì — il testo completo di «Calcolo dei ricavi e feature engineering» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Pandas & NumPy Academy, passa a CoddyKit PRO. Il corso Pandas & NumPy Academy include 4 lezioni in totale.

Cosa imparerò in «Calcolo dei ricavi e feature engineering»?

Calcoli i ricavi per riga, crei le colonne relative a mese e trimestre e aggiunga un flag di sconto per gli ordini oltre una determinata soglia. Eserciti Pandas & NumPy Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare Pandas & NumPy Academy?

Non è richiesta alcuna esperienza precedente. Pandas & NumPy Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 2 di 4.

Quanto tempo richiede la lezione «Calcolo dei ricavi e feature engineering»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione Pandas & NumPy Academy?

Sì. Ogni lezione Pandas & NumPy Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Caricare e verificare il dataset delle vendite
  2. Calcolo dei ricavi e feature engineering
  3. Analisi GroupBy per area e categoria
  4. Visualizzare l'andamento mensile
← Torna a Pandas & NumPy Academy