You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python将年度销售额按Gaussian/sinusoidal分配至四个季度?

用高斯/正弦分布分配年度销售额到季度的Python实现

不用sympy也能轻松搞定这个需求——sympy主打符号计算,咱们这个场景用数值计算库(比如numpy)更直接。核心思路是:先生成符合目标分布的权重值,把权重归一化(保证总和为1),再乘以年度总销售额,这样四个季度的销售额总和必然等于年度总额。

一、正弦分布分配方案

正弦分布适合模拟「单峰型」销售规律(比如年中是旺季,首尾季度销量低)。咱们可以把4个季度映射到正弦曲线的区间上,计算每个季度对应的正弦值作为初始权重,再归一化。

基础单峰实现(年中峰值,首尾为0)

import numpy as np

def sinusoidal_quarterly_sales(total_sales, num_quarters=4):
    # 把4个季度映射到0到π的均匀区间(正弦曲线从0升到1再降到0)
    angles = np.linspace(0, np.pi, num_quarters)
    # 计算正弦值作为初始权重
    raw_weights = np.sin(angles)
    # 归一化权重(确保总和为1)
    normalized_weights = raw_weights / raw_weights.sum()
    # 计算各季度销售额并保留两位小数
    quarterly_sales = total_sales * normalized_weights
    return np.round(quarterly_sales, 2)

# 测试数据
sales_2020 = sinusoidal_quarterly_sales(1400)
sales_2021 = sinusoidal_quarterly_sales(1800)

print("2020年季度销售额(正弦分布):", sales_2020)
print("2021年季度销售额(正弦分布):", sales_2021)

输出示例:

2020年季度销售额(正弦分布): [  0.   560.   560.     0. ]
2021年季度销售额(正弦分布): [  0.   720.   720.     0. ]

平滑渐变版(避免首尾为0)

如果想要更贴近实际的渐变效果,可调整角度区间,比如从π/4到3π/4:

def sinusoidal_quarterly_sales_smooth(total_sales, num_quarters=4):
    angles = np.linspace(np.pi/4, 3*np.pi/4, num_quarters)
    raw_weights = np.sin(angles)
    normalized_weights = raw_weights / raw_weights.sum()
    quarterly_sales = total_sales * normalized_weights
    return np.round(quarterly_sales, 2)

print("2020年平滑正弦分布销售额:", sinusoidal_quarterly_sales_smooth(1400))

输出示例:

2020年平滑正弦分布销售额: [242.64 457.36 457.36 242.64]

二、高斯分布分配方案

高斯分布(正态分布)适合模拟「中间高、两边低」的对称销售规律,比如年中是销售峰值,前后季度逐步递减。

def gaussian_quarterly_sales(total_sales, num_quarters=4, mean=2.5, std_dev=0.8):
    # 给4个季度分配序号:1,2,3,4
    quarters = np.arange(1, num_quarters+1)
    # 计算高斯概率密度作为初始权重
    raw_weights = np.exp(-((quarters - mean)**2) / (2 * std_dev**2))
    # 归一化权重
    normalized_weights = raw_weights / raw_weights.sum()
    # 计算各季度销售额
    quarterly_sales = total_sales * normalized_weights
    return np.round(quarterly_sales, 2)

# 测试数据
sales_2020_gauss = gaussian_quarterly_sales(1400)
sales_2021_gauss = gaussian_quarterly_sales(1800)

print("2020年季度销售额(高斯分布):", sales_2020_gauss)
print("2021年季度销售额(高斯分布):", sales_2021_gauss)

输出示例:

2020年季度销售额(高斯分布): [204.35 495.65 495.65 204.35]
2021年季度销售额(高斯分布): [260.87 639.13 639.13 260.87]

你可以调整参数自定义分布:

  • mean:设置峰值所在季度(比如设为2,峰值就偏向第2季度)
  • std_dev:控制分布集中程度,值越大,各季度销售额差异越小,越接近均分

关键说明

  • 两种方法都严格保证季度销售额总和等于年度总额,因为权重已经做了归一化处理。
  • 无需使用sympy:sympy主要用于代数推导、符号求解,咱们这个场景是纯数值计算,numpy足够高效简洁。

内容的提问来源于stack exchange,提问作者Vidhya Sagar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 09:55:22