我正在编写一个VBScript,每周发送一封包含客户活动的电子邮件。以下是一些示例数据:
a b c d e f g
2,780 2,667 2,785 1,031 646 2,340 2,410
由于这是电子邮件,我不希望图表带有趋势线。我只需要一个简单的函数,返回“向上”,“向下”或“稳定”(虽然我怀疑它将永远是完全稳定的)。
我对数学很糟糕,所以我甚至不知道从哪里开始。我已经查看了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。我们的一些客户周末不开放。
答案 0 :(得分:6)
首先,您的数据列为
a b c d e f g
2,780 2,667 2,785 1,031 646 2,340 2,410
要获得趋势线,您需要为变量a, b, c, ...
要为其分配数值,您需要了解更多信息的方式。假设您在1月1日获取了数据
a
,则可以为其指定任何值,例如0
或1
。然后,您在十天后获取了数据b
,然后您可以为其指定值10
或11
。然后,您在30天后获取了数据c
,然后您可以为其指定值30
或31
。a, b, c, ...
的数值必须与获取更准确的趋势线值所采用的数据的时间间隔成比例。
如果他们被定期拍摄(很可能是你的情况),让我们说每7天一次,那么你可以定期分配它a, b, c, ... ~ 1, 2, 3, ...
开始点完全是你的选择选择使它成为非常的东西简单。这与你的最终计算无关。
然后,您需要计算线性回归的斜率,您可以在this url上找到,您需要使用下表计算b
的值。
在第2行到第8行的第一列,我的a,b,c,...
值为1,2,3, ...
在第二栏,我有我的数据。
在第三列,我将第一列中的每个单元格乘以第二列中的相应单元格。
在第四列,我将第一列的单元格的值平方。
在第10行,我添加了上述列的值。
最后使用第10行的值。
total_number_of_data*C[10] - A[10]*B[10]
b = -------------------------------------------
total_number_of_data*D[10]-square_of(A[10])
b
的符号决定了您要找的内容。如果它是正面的,那么它就会上升,如果它是负面的,那么它就会下降,如果它是零,那么它就会稳定。
答案 1 :(得分:0)
在蟒蛇中:
callback
答案 2 :(得分:0)
这是一个巨大的帮助!这里是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