计算每个集群的时间序列数据的季节性和趋势
Posted
技术标签:
【中文标题】计算每个集群的时间序列数据的季节性和趋势【英文标题】:Calculate seasonality and trend of time series data for each cluster 【发布时间】:2019-01-08 08:03:54 【问题描述】:我有这个时间序列数据,现在我想使用“modal_price”计算每个 APMC 和商品集群的趋势季节性类型(乘法或加法)。数据集有大约 60,000 行这样的行,其中 APMC 和 Cluster 相同,但日期在变化。数据集如下:
APMC | Commodity | qtl _weight| min_price | max_price | modal_price | district_name | Year | Month
date
2014-12-01 Akole bajri 40 1375 1750 1563 Ahmadnagar 2014 12
2014-12-01 Akole paddy-unhusked 346 1400 1800 1625 Ahmadnagar 2014 12
2014-12-01 Akole wheat 55 1500 1900 1675 Ahmadnagar 2014 12
2014-12-01 Akole bhagar/vari 59 2000 2600 2400 Ahmadnagar 2014 12
2014-12-01 Akole gram 9 3200 3300 3235 Ahmadnagar 2014 12
2014-12-01 Jamkhed cotton 44199 3950 4033 3991 Ahmadnagar 2014 12
2014-12-01 Jamkhed bajri 846 1300 1488 1394 Ahmadnagar 2014 12
2014-12-01 Jamkhed wheat(husked) 155 1879 2231 2055 Ahmadnagar 2014 12
2014-12-01 Kopar gram 421 1983 2698 2463 Ahmadnagar 2014 12
2014-12-01 Kopar greengram 18 6734 7259 6759 Ahmadnagar 2014 12
2014-12-01 Kopar soybean 1507 2945 3247 3199 Ahmadnagar 2014 12
2016-11-01 Sanga wheat(husked) 222 1730 2173 1994 Ahmadnagar 2016 11
现在我尝试使用(APMC,商品和日期作为索引)为此使用数据透视表,但这无助于计算每个集群(APMC,商品)的平均值(计算趋势)。我只需要知道如何使用“modal_price”计算每个集群(APMC、Commodity)的平均值并将其添加为数据框/数据透视表中的 COLUMN。
【问题讨论】:
【参考方案1】:也许 groupby 会为您提供趋势所需的内容,然后 transform 将使您能够将其投影回相同的索引? 比如:
# group by your cluster
g = df.groupby(["Year", "APMC", "Commodity"])
# determine the trend per cluster but finalise back into original diimensions
trend = g.modal_price.transform(lambda x: x.mean())
df["trend"] = trend
【讨论】:
如果我必须计算每个季节相同的滚动平均值怎么办? 在上面进行了修改,在 groupby 中包含“Year”。 不应该包括月份吗?由于趋势以月为基础。还有滚动平均值()怎么样。我该怎么做。有的商品只有3-4个月,这种情况如何设置window_size 趋势是基于您想要的任何基础,但是,您的问题要求“每年每个集群(APMC,商品)的平均值(计算趋势)”。如果您想要滚动平均值,请修改您的问题或提出新问题。 附带说明,如果您想按日期属性(年、月、日)进行分组,则无需为其投影列,您可以执行类似 df.groupby(df .column.dt.year)。为您节省一列或 3以上是关于计算每个集群的时间序列数据的季节性和趋势的主要内容,如果未能解决你的问题,请参考以下文章
时间序列挖掘-预测算法-三次指数平滑法(Holt-Winters)——三次指数平滑算法可以很好的保存时间序列数据的趋势和季节性信息