ecommerce / utils.py
emanueledecandia's picture
Update utils.py from anycoder
a38e9d5 verified
"""
Utility functions for the Media Planning Simulator
"""
def calculate_cpm(budget: float, impressions: int) -> float:
"""Calculate CPM (Cost Per Mille)"""
if impressions == 0:
return 0
return (budget / impressions) * 1000
def calculate_ctr(clicks: int, impressions: int) -> float:
"""Calculate CTR (Click-Through Rate)"""
if impressions == 0:
return 0
return (clicks / impressions) * 100
def calculate_cpc(spend: float, clicks: int) -> float:
"""Calculate CPC (Cost Per Click)"""
if clicks == 0:
return 0
return spend / clicks
def calculate_conversion_rate(conversions: int, clicks: int) -> float:
"""Calculate Conversion Rate"""
if clicks == 0:
return 0
return (conversions / clicks) * 100
def calculate_roi(revenue: float, investment: float) -> float:
"""Calculate ROI (Return on Investment)"""
if investment == 0:
return 0
return ((revenue - investment) / investment) * 100
def calculate_roas(revenue: float, ad_spend: float) -> float:
"""Calculate ROAS (Return on Ad Spend)"""
if ad_spend == 0:
return 0
return revenue / ad_spend
def calculate_clv(
avg_purchase_value: float,
purchase_frequency: float,
customer_lifespan: float,
acquisition_cost: float
) -> float:
"""Calculate CLV (Customer Lifetime Value)"""
return (avg_purchase_value * purchase_frequency * customer_lifespan) - acquisition_cost
def format_currency_eur(value: float) -> str:
"""Format value as Euro currency"""
return f"€{value:,.2f}"
def format_percentage_value(value: float, decimals: int = 2) -> str:
"""Format value as percentage string"""
return f"{value:.{decimals}f}%"
def create_summary_dataframe(metrics: dict) -> pd.DataFrame:
"""Create a summary DataFrame from metrics dictionary"""
summary_items = [
("Impression Totali", metrics.get("total_impressions", 0)),
("Click Totali", metrics.get("total_clicks", 0)),
("Conversioni Totali", metrics.get("total_conversions", 0)),
("Ricavi Totali (€)", metrics.get("total_revenue", 0)),
("Spesa Pubblicitaria (€)", metrics.get("total_ad_spend", 0)),
("Margine Netto (€)", metrics.get("net_margin", 0)),
("ROI (%)", metrics.get("roi", 0)),
("ROAS", metrics.get("roas", 0)),
("CPA (€)", metrics.get("cpa", 0)),
("CLV (€)", metrics.get("clv", 0)),
]
return pd.DataFrame(summary_items, columns=["Metrica", "Valore"])