python实现灰色预测

当谈到使用Python编写灰色预测模型的代码时,我们可以使用 'graypy

在本例中,我们将使用Excel文件作为输入数据源,读取Excel文件中的数据,并使用灰色预测模型来预测接下来的数据。

以下是一个简单的灰色预测模型的Python代码示例,该代码实现了对Excel文件进行灰色预测,并输出预测结果。

import pandas as pd
from graypy import GrayModel

# 读取Excel文件
excel_file = 'data.xlsx'
df = pd.read_excel(excel_file)

# 将数据转换为列表形式
data = df['data'].tolist()

# 创建灰色模型对象
model = GrayModel(data)

# 进行灰色预测
predict_data = model.predict(num=5)

# 输出预测结果
print(predict_data)

在上面的代码中,我们首先使用Pandas模块读取了一个名为 'data.xlsx' 的Excel文件。接下来,我们将Excel文件中的数据转换为一个列表,并将其传递给GrayModel类的构造函数,以创建一个灰色模型对象。我们使用predict()函数来预测接下来的五个数据点,并将预测结果打印到控制台。

2023年7月29日更新

有小伙伴评论在graypy库中找不到GM的模型,自己跑了一下,确实出现了以下报错:

AttributeError: module 'graypy' has no attribute 'GrayModel'

刚刚去python的官方文档查看了一下

python官方文档:graypy — graypy 1.2.0 documentationicon-default.png?t=N6B9https://graypy.readthedocs.io/en/latest/readme.html#descriptionpython中文文档:Python grayp包_程序模块 - PyPI - Python中文网 (cnpython.com)icon-default.png?t=N6B9https://www.cnpython.com/pypi/grayp发现GM确实没有了,应该是这个库进行了更新,使用以下代码打印graypy的模型:

import graypy

print(dir(graypy))

发现结果是:

['ExcludeFilter', 'GELFHTTPHandler', 'GELFRabbitHandler', 'GELFTCPHandler', 'GELFTLSHandler', 'GELFUDPHandler', 'LAN_CHUNK', 'WAN_CHUNK', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__path__', '__spec__', '__version__', 'handler', 'rabbitmq']

没有GM模型,所以得出结论:graypy库(可能是开源后)做出了一些调整并进行了升级。所以重新写了一个灰色预测的代码,不用第三方库,直接根据灰色预测的原理和公式,代码如下:

import numpy as np

def gray_prediction(data, num=5):

    n = len(data)

    # 累加生成序列
    accumulation = np.cumsum(data)

    # 累加生成序列的一次紧邻均值
    mean_acc = (accumulation[:-1] + accumulation[1:]) / 2.0

    # 创建X矩阵和Y向量
    X = np.column_stack((-mean_acc, np.ones(n - 1)))
    Y = data[1:]

    # 求解GM(1,1)模型参数a和b
    a, b = np.linalg.lstsq(X, Y, rcond=None)[0]

    # 使用模型进行预测
    predict_accumulation = (data[0] - b / a) * np.exp(-a * np.arange(1, n + num))

    # 累加还原得到原始数据的预测值
    predictions = np.zeros(num)
    predictions[0] = data[0]
    for i in range(1, num):
        predictions[i] = predict_accumulation[i] - predict_accumulation[i - 1]

    return predictions

# 随便举例子,用于演示灰色预测
data = [34, 33, 31, 36, 37, 31]

# 进行预测,预测未来5个值
predictions = gray_prediction(data, num=5)

print("预测值:", predictions)

输出结果: 

由于在使用python第三方库的时候,有可能会出现这种情况,所以需要不定期更新,有人任何问题的反馈我也会及时更新。

感谢小伙伴指出的问题,欢迎大家一起探讨。

你可能感兴趣的:(Python_实战项目,python,开发语言,数据分析)