6

我正在编写一个 VBScript,它每周发送一封包含客户活动的电子邮件。以下是一些示例数据:

a       b       c       d       e      f        g
2,780   2,667   2,785   1,031   646    2,340    2,410

由于这是电子邮件,我不想要带有趋势线的图表。我只需要一个返回“up”、“down”或“stable”的简单函数(尽管我怀疑它永远不会完全稳定)。

我的数学很糟糕,所以我什至不知道从哪里开始。我已经查看了 Python 或 Excel 的其他一些问题,但没有足够的相似性,或者我没有知识,将其应用于 VBS。

我的目标就是这样简单:

a       b       c       d       e      f        g        trend
2,780   2,667   2,785   1,031   646    2,340    2,410    ↘

如果有一些增量或百分比或其他测量值,我可以显示这将是有帮助的。我也可能想忽略异常值。比如上面的646。我们的一些客户周末不营业。

4

3 回答 3

15

首先,您的数据被列为

a       b       c       d       e      f        g      
2,780   2,667   2,785   1,031   646    2,340    2,410    

要获得趋势线,您需要为变量分配数值a, b, c, ...

要为其分配数值,您需要了解更多关于如何获取数据的信息。假设您a在 1 月 1 日获取数据,您可以为其分配任何值,例如01。然后你在b十天后获取数据,然后你可以1011它赋值。然后你在c三十天后获取数据,然后你可以给30它赋值31。的数值a, b, c, ...必须与数据的时间间隔成正比,以获得更准确的趋势线值。

如果它们是定期进行的(很可能是您的情况),假设每 7 天一次,那么您可以定期分配它a, b, c, ... ~ 1, 2, 3, ...起点完全是您的选择,选择使其变得非常容易的东西。这对您的最终计算无关紧要。

然后你需要计算线性回归的斜率,你可以在这个 url上找到你需要b使用下表计算值的线性回归。

在此处输入图像描述

  1. 在第 2 行到第 8 行的第一列,我有我的a,b,c,...1,2,3, ...

  2. 在第二列,我有我的数据。

  3. 在第三列,我将第一列中的每个单元格乘以第二列中的相应单元格。

  4. 在第四列,我将第一列的单元格的值平方。

  5. 在第 10 行,我将上述列的值相加。

  6. 最后使用第 10 行的值。

            total_number_of_data*C[10] - A[10]*B[10]
      b =  -------------------------------------------
            total_number_of_data*D[10]-square_of(A[10])
    

的标志b决定了你在寻找什么。如果为正,则上涨,如果为负,则下跌,如果为零,则稳定。

于 2015-06-04T18:53:01.587 回答
3

这是一个巨大的帮助!这是python中的一个函数

def trend_value(nums: list):
    summed_nums = sum(nums)
    multiplied_data = 0
    summed_index = 0 
    squared_index = 0

    for index, num in enumerate(nums):
        index += 1
        multiplied_data += index * num
        summed_index += index
        squared_index += index**2

    numerator = (len(nums) * multiplied_data) - (summed_nums * summed_index)
    denominator = (len(nums) * squared_index) - summed_index**2
    if denominator != 0:
        return numerator/denominator
    else:
        return 0

val = trend_value([2781, 2667, 2785, 1031, 646, 2340, 2410])
print(val)  # -139.5
于 2021-08-02T00:38:59.650 回答
0

在蟒蛇中:

def get_trend(numbers):
rows = []
total_numbers = len(numbers)
currentValueNumber = 1
n = 0
while n < len(numbers):
    rows.append({'row': currentValueNumber, 'number': numbers[n]})
    currentValueNumber += 1
    n += 1
sumLines = 0
sumNumbers = 0
sumMix = 0
squareOfs = 0
for k in rows:
    sumLines += k['row']
    sumNumbers += k['number']
    sumMix += k['row']*k['number']
    squareOfs += k['row'] ** 2
a = (total_numbers * sumMix) - (sumLines * sumNumbers)
b = (total_numbers * squareOfs) - (sumLines ** 2)
c = a/b
return c

trendValue = get_trend([2781,2667,2785,1031,646,2340,2410])
print(trendValue) # output:  -139.5
于 2021-04-13T17:33:30.737 回答