我们有多个时间序列数据集。有些是按月,日期和年份。
在这里,我们面临的挑战是快速扫描数据集并将见解告诉我们的管理层,而不是创建仪表板并单击一下进行检查。
“趋势”和“斜率”之类的东西似乎可以互换,专家每次都在以不同的方式进行计算。衡量趋势或斜率的最佳实践是什么?
我的数据大多参差不齐。我的意思是说几个月要上升,上升之后要稍微下降等等。我喜欢为每个向量得到一个数字,这样我就可以比较每个向量并讲述一个故事。非常感谢您的帮助。
## Sample Dataframe
revenue = [0.85, 0.99, 1.01, 1.12, 1.25, 1.36, 1.28, 1.44]
expense = [0.5, 0.9, 0.01, 0.12, 0.25, 0.36, 0.28, 0.44]
net = [0.85, 0.81, 1.01, 1.12, 0.25, 0.36, 0.28, 1.44]
year = [1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000]
df1 = pd.DataFrame({'year': year, 'revenue': revenue,'expense': expense, 'net': net})
我想在这里得到的结果是(只是采样而不是精确的结果:-))。
revenue slope/trend: 0.98
expense slope/trend: -0.50
net slope/trend: 0.70
感谢您的帮助。
新数据集
year = [1993, 1994, 1995, 1993, 1994, 1995]
category =['rev', 'rev', 'exp', 'exp', 'net', 'net']
values = [200, 250, 42, 32, 9, 4]
df1 = pd.DataFrame({'year': year, 'category': category,'values': values})
答案 0 :(得分:1)
一种方法是将numpy.polyfit与deg=1
一起使用,这样可以按顺序为您提供坡度和截距。只需使用切片[0]
来获取第一个(坡度)。
import numpy as np
# obtain only the slope part (df below is df1 in your question)
# np.polyfit(x, y, deg) is the order of arguments.
a = np.polyfit(df.year, df.expense, 1)[0]
b = np.polyfit(df.year, df.net, 1)[0]
c = np.polyfit(df.year, df.revenue, 1)[0]
# output
print("slope of expense: {:.3f}, net: {:.3f}, revenue:{:.3f}".format(a, b, c))
输出:
slope of expense: -0.028, net: -0.016, revenue:0.080
希望这可以帮助您开始使用Python:)
编辑:将上述代码应用于新数据集
cats = df1.category.unique().tolist()
slopes = [np.polyfit(df1.loc[df1.category == cat, "year"], df1.loc[df1.category == cat, "values"], 1)[0] for cat in cats]
for cat, slope in zip(cats, slopes):
print("{} slope/trend: {:.3f}".format(cat, slope))
输出:
rev slope/trend: 50.000
exp slope/trend: 5.000
net slope/trend: -5.000