我能想到的最简单的趋势“算法”就是n天移动平均线。我不确定您的数据的结构如何,但是您说这样的话:
books = {'Twilight': [500, 555, 580, 577, 523, 533, 556, 593], 'Harry Potter': [650, 647, 653, 642, 633, 621, 625, 613], 'Structure and Interpretation of Computer Programs': [1, 4, 15, 12, 7, 3, 8, 19] }
一个简单的移动平均线仅取最后的
n值并将其平均:
def moving_av(l, n): """Take a list, l, and return the average of its last n elements. """ observations = len(l[-n:]) return sum(l[-n:]) / float(observations)
切片符号只是抓住列表的末尾,从第n个变量到最后一个变量。移动平均线是消除单个尖峰或跌落可能引入的任何噪声的相当标准的方法。该函数可以这样使用:
book_scores = {}for book, reader_list in books.iteritems(): book_scores[book] = moving_av(reader_list, 5)
您将需要计算平均的天数。如果您想强调近期趋势,也可以考虑使用加权移动平均线。
如果您想关注的是较少关注绝对读者群的内容,而是关注增加读者群的内容,只需找到30天移动平均线和5天移动平均线的变化百分比:
d5_moving_av = moving_av(reader_list, 5)d30_moving_av = moving_av(reader_list, 30)book_score = (d5_moving_av - d30_moving_av) / d30_moving_av
使用这些简单的工具,您可以灵活地强调过去的趋势以及想要消除(或不消除)峰值的程度。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)