Python数据分析:价格分布与总额计算实战指南
2025.09.17 10:20浏览量:0简介:本文深入探讨如何使用Python分析价格分布特征并计算价格总额,涵盖数据预处理、可视化分析及统计计算全流程,提供可复用的代码示例和实用建议。
Python数据分析:价格分布与总额计算实战指南
在电商运营、金融分析或供应链管理等场景中,价格数据的分布特征与总额计算是决策支持的核心环节。Python凭借其强大的数据处理库(如Pandas、NumPy)和可视化工具(如Matplotlib、Seaborn),能够高效完成从数据清洗到结果呈现的全流程分析。本文将通过具体案例,系统讲解如何使用Python实现价格分布分析与总额计算。
一、价格分布分析的核心价值
价格分布分析旨在揭示数据集中价格的集中趋势、离散程度及异常值特征,为定价策略、库存管理或市场定位提供依据。例如:
- 电商场景:通过分析商品价格分布,识别主力价格带(如100-200元区间占比60%),优化促销活动设计。
- 金融场景:评估资产价格波动范围,计算风险价值(VaR)。
- 供应链场景:检测供应商报价异常值,防范成本风险。
典型的分布特征包括:
- 集中趋势:均值、中位数、众数。
- 离散程度:标准差、四分位距。
- 分布形态:正态分布、偏态分布、多峰分布。
二、数据准备与预处理
1. 数据加载与初步检查
使用Pandas读取CSV或Excel文件,并检查数据质量:
import pandas as pd
# 加载数据
df = pd.read_csv('prices.csv') # 假设列包含'product_id', 'price'
# 检查缺失值与异常值
print(df.isnull().sum()) # 缺失值统计
print(df['price'].describe()) # 基础统计量
2. 数据清洗
处理缺失值与异常值:
# 删除缺失值
df_clean = df.dropna(subset=['price'])
# 剔除异常值(如价格<0或>10000)
df_clean = df_clean[(df_clean['price'] >= 0) & (df_clean['price'] <= 10000)]
3. 数据分组与标签化
按价格区间分组以分析分布:
# 定义价格区间
bins = [0, 50, 100, 200, 500, 1000]
labels = ['0-50', '50-100', '100-200', '200-500', '500-1000']
# 添加分组列
df_clean['price_range'] = pd.cut(df_clean['price'], bins=bins, labels=labels)
三、价格分布可视化分析
1. 直方图:观察分布形态
import matplotlib.pyplot as plt
import seaborn as sns
plt.figure(figsize=(10, 6))
sns.histplot(df_clean['price'], bins=30, kde=True)
plt.title('Price Distribution')
plt.xlabel('Price')
plt.ylabel('Frequency')
plt.show()
- 解读:若呈现双峰分布,可能反映市场存在高低端两个细分市场。
2. 箱线图:检测离群值
plt.figure(figsize=(8, 6))
sns.boxplot(x=df_clean['price'])
plt.title('Boxplot of Prices')
plt.show()
- 解读:箱线图可直观显示中位数、四分位距及离群点(通常定义为Q1-1.5IQR或Q3+1.5IQR之外的值)。
3. 分组占比分析
# 计算各价格区间占比
range_counts = df_clean['price_range'].value_counts(normalize=True) * 100
# 可视化
plt.figure(figsize=(10, 6))
range_counts.plot(kind='bar')
plt.title('Price Range Distribution (%)')
plt.xlabel('Price Range')
plt.ylabel('Percentage')
plt.xticks(rotation=45)
plt.show()
- 输出示例:
100-200 45.2%
50-100 30.1%
200-500 15.7%
0-50 6.3%
500-1000 2.7%
四、价格总额计算方法
1. 基础总额计算
# 计算所有价格总和
total_price = df_clean['price'].sum()
print(f'Total Price: {total_price:.2f}')
# 按分组计算总额
grouped_total = df_clean.groupby('price_range')['price'].sum()
print(grouped_total)
2. 加权平均价格计算
# 假设有销售量列'quantity'
weighted_avg = (df_clean['price'] * df_clean['quantity']).sum() / df_clean['quantity'].sum()
print(f'Weighted Average Price: {weighted_avg:.2f}')
3. 动态总额计算(按条件筛选)
# 计算价格>100的商品总额
high_price_total = df_clean[df_clean['price'] > 100]['price'].sum()
print(f'Total for Prices > 100: {high_price_total:.2f}')
五、进阶分析:分布拟合与预测
1. 正态分布检验
from scipy.stats import norm, shapiro
# 提取价格对数(若数据右偏)
log_prices = np.log(df_clean['price'] + 1) # 加1避免0值
# 正态性检验
stat, p = shapiro(log_prices)
print(f'Shapiro-Wilk Test: p-value={p:.4f}')
# 若p>0.05,可认为近似正态分布
if p > 0.05:
mu, sigma = norm.fit(log_prices)
print(f'Fitted Distribution: mu={mu:.2f}, sigma={sigma:.2f}')
2. 价格区间预测
基于历史分布预测未来价格范围:
# 计算95%置信区间
lower = df_clean['price'].quantile(0.025)
upper = df_clean['price'].quantile(0.975)
print(f'95% Price Range: [{lower:.2f}, {upper:.2f}]')
六、实用建议与最佳实践
- 数据质量优先:分析前务必检查缺失值与异常值,避免“垃圾进,垃圾出”。
- 选择合适可视化:
- 直方图:观察整体分布形态。
- 箱线图:检测离群值。
- 核密度图(KDE):平滑显示分布曲线。
- 动态计算:通过条件筛选(如
df[df['category'] == 'A']
)实现多维度分析。 - 自动化报告:使用Jupyter Notebook的
to_html()
或pandas.ExcelWriter
生成分析报告。
七、完整案例代码
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from scipy.stats import shapiro
# 1. 数据加载与清洗
df = pd.read_csv('prices.csv')
df_clean = df.dropna(subset=['price'])
df_clean = df_clean[(df_clean['price'] >= 0) & (df_clean['price'] <= 10000)]
# 2. 分布分析
bins = [0, 50, 100, 200, 500, 1000]
labels = ['0-50', '50-100', '100-200', '200-500', '500-1000']
df_clean['price_range'] = pd.cut(df_clean['price'], bins=bins, labels=labels)
# 可视化
plt.figure(figsize=(15, 5))
plt.subplot(1, 2, 1)
sns.histplot(df_clean['price'], bins=30, kde=True)
plt.title('Price Distribution')
plt.subplot(1, 2, 2)
df_clean['price_range'].value_counts(normalize=True).plot(kind='bar')
plt.title('Price Range Distribution (%)')
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()
# 3. 总额计算
print(f'Total Price: {df_clean["price"].sum():.2f}')
print(f'Weighted Avg Price: {(df_clean["price"] * df_clean["quantity"]).sum() / df_clean["quantity"].sum():.2f}')
# 4. 正态性检验
log_prices = np.log(df_clean['price'] + 1)
stat, p = shapiro(log_prices)
print(f'Normality Test p-value: {p:.4f}')
八、总结
通过Python实现价格分布分析与总额计算,可高效完成以下任务:
- 识别价格集中区间:优化产品定价或促销策略。
- 检测异常值:防范数据录入错误或欺诈行为。
- 动态计算总额:支持实时财务报告或库存估值。
- 预测价格范围:为采购谈判或销售预测提供依据。
建议结合具体业务场景,灵活调整分析维度(如按时间、地区或产品类别分组),以挖掘更深层次的商业洞察。
发表评论
登录后可评论,请前往 登录 或 注册