Python:在一组数字中寻找趋势

标签 python math

我有一个 Python 中的数字列表,如下所示:

x = [12, 34, 29, 38, 34, 51, 29, 34, 47, 34, 55, 94, 68, 81]

从这些数字中找出趋势的最佳方法是什么?我对预测下一个数字是什么不感兴趣,我只想输出多组数字的趋势,以便比较趋势。

编辑:趋势,我的意思是我想要一个数字表示数字是增加还是减少以及以什么速率。我不是很擅长数学,所以这可能有一个合适的名字!

编辑 2: 看起来我真正想要的是线性最佳拟合的系数。在 Python 中获得此功能的最佳方法是什么?

最佳答案

您的意思可能是您想在图表上绘制这些数字并找到一条穿过它们的直线,使直线与数字之间的总距离最小化?这称为线性回归

def linreg(X, Y):
    """
    return a,b in solution to y = ax + b such that root mean square distance between trend line and original points is minimized
    """
    N = len(X)
    Sx = Sy = Sxx = Syy = Sxy = 0.0
    for x, y in zip(X, Y):
        Sx = Sx + x
        Sy = Sy + y
        Sxx = Sxx + x*x
        Syy = Syy + y*y
        Sxy = Sxy + x*y
    det = Sxx * N - Sx * Sx
    return (Sxy * N - Sy * Sx)/det, (Sxx * Sy - Sx * Sxy)/det


x = [12, 34, 29, 38, 34, 51, 29, 34, 47, 34, 55, 94, 68, 81]
a,b = linreg(range(len(x)),x)  //your x,y are switched from standard notation

趋势线不太可能通过你的原始点,但它会尽可能接近直线可以获得的原始点。使用这条趋势线 (a,b) 的梯度和截距值,您将能够推断出超过数组末尾的线:

extrapolatedtrendline=[a*index + b for index in range(20)] //replace 20 with desired trend length

关于Python:在一组数字中寻找趋势,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10048571/

相关文章:

python - python 单元测试的基本测试用例类

python - 无法解析 "SyntaxError: invalid syntax"

python - 变量列表在python中自动更新

javascript - JS,对象跟随一个圆圈

.net - .Net 中的单位转换库

php - 计算综合评分

python - 将 flask 嵌入带有装饰器的类中

python - 用于查找可由列表中其他单词组成的最长单词的python代码的时间复杂度

带有形状体积和面积类的 Java 接口(interface)

android - 如何在 Android 中实际显示数学公式