首页 > 编程语言 >Python实现:时间序列趋势外推法应用-龚珀兹曲线拟合

Python实现:时间序列趋势外推法应用-龚珀兹曲线拟合

时间:2024-09-26 23:19:05浏览次数:10  
标签:曲线拟合 plt 外推法 sum Python k1 拟合 data yt

龚珀兹曲线

\hat{y}=ka^{b^{t}}

下表数据为某跨国公司1989-2021年的年销售量数据,使用适合的模型预测该公司2022年的销售额,并得出理由。

部分数据如下表(具体数据从主页资源下载):

年份时序(t)总额(yt)时序应该从0开始
19891138.400
19902174.001
19913190.552
19924196.103
19935230.504
19946237.105
19957274.006
19968319.007
19979348.458
199810303.859

1、读取数据: 

#读取数据
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np

data = pd.read_excel('ch4综合分析.xlsx')
data.head()
#%%
# 创建散点图
#显示中文
from matplotlib import rcParams

# 设置中文字体
rcParams['font.sans-serif'] = ['SimHei']  # 用黑体显示中文
rcParams['axes.unicode_minus'] = False  # 解决负号显示问题

plt.scatter(data.index, data['总额(yt)'], color='blue', label='原始数据')
plt.xlabel('时序(t)')
plt.ylabel('总额(yt)')
plt.legend()
plt.show()

 

 通过散点图得知数据符合龚珀兹曲线特征,为此采用龚珀兹曲线拟合。

2、原理

(1)取对数:

lgy=lgk+b^{^{t}}lga

(2)分组法求解参数

 b^n=\frac{\sum II I\lg y-\sum I I \lg y}{\sum I I \lg y-\sum I \lg y}

lg a=\left(\sum II\lg y-\sum I \lg y\right) \cdot \frac{b-1}{\left(b^n-1\right)^2} 

lg k=\frac{1}{n}\left(\sum I \lg y-\frac{b^n-1}{b-1} \cdot \lg a\right)

或者

lg k=\frac{1}{n}\left[\frac{\sum I \lg y \cdot \sum III\lg y-\left(\sum II\lg y\right)^2}{\sum I \lg y+\sum II \lg y-2 \sum III\lg y}\right] 

(3)Python求解

#选择合适的趋势外推法预测销售额
#拟合
# 对 '总额(yt)' 列取对数并写入表格
data['总额(yt)_log'] = np.log10(data['总额(yt)'])
# 显示前几行数据
print(data.head(33))
print('----------------------------------------------------')
#使用分组法估计参数
#分组
n = (2021-1989+1)/3
#读取前n个数据
data1 = data.iloc[:11]
data2 = data.iloc[11:22]
data3 = data.iloc[22:]
#分组求和
data1_sum = data1['总额(yt)_log'].sum()
data2_sum = data2['总额(yt)_log'].sum()
data3_sum = data3['总额(yt)_log'].sum()
#计算参数
b = ((data3_sum-data2_sum)/(data2_sum-data1_sum))**(1/11)
a = (data2_sum-data1_sum)*((b-1)/(b**11-1)**2)
k = (data1_sum-a*(b**11-1)/(b-1))*(1/11)

a1=10**a
k1=10**k
#输出参数
print('k1 = %f, a1 = %f, b = %f' % (k1,a1,b))

#输出拟合函数
print('拟合函数为:y = %f * %f ^ %f^t' % (k1,a1,b))

#计算第2022年的销售量
t1=33
d34 = k1 *a1 ** b**t1
print('2022年的销售量为:%d' % d34)
#计算se
# 计算预测值
data['预测值'] = k1 * a1 ** (b ** data.index)
# 计算残差
data['残差'] = data['总额(yt)'] - data['预测值']
# 计算残差的标准误差
se = np.sqrt(np.sum(data['残差'] ** 2) / (len(data) - 2))
# 输出标准误差
print('标准误差 (SE) = %f' % se)

 

 

(4)龚珀兹曲线方程

y=110.036 \times 1.831^{1.047^{t}}

3、曲线拟合 

import matplotlib.pyplot as plt
# 计算拟合值
data['拟合值'] = k1 * a1 ** (b ** data.index)
# 创建散点图和拟合曲线
plt.scatter(data.index, data['总额(yt)'], color='blue', label='原始数据')
plt.plot(data.index, data['拟合值'], color='red', label='拟合曲线')
#添加预测点
plt.scatter(t1, d34, color='green', label='2022年预测点')
plt.xlabel('时序(t)')#时序从第0开始计时
plt.ylabel('总额(yt)')
plt.legend()
plt.show()

标签:曲线拟合,plt,外推法,sum,Python,k1,拟合,data,yt
From: https://blog.csdn.net/2301_76574743/article/details/142579999

相关文章

  • Python画笔案例-064 绘制彩花之旋转羽毛
    1、绘制彩花之旋转羽毛通过python的turtle库绘制彩花之旋转羽毛,如下图:2、实现代码 绘制彩花之旋转羽毛,以下为实现代码:"""彩花之旋转羽毛.py本程序需要coloradd模块支持,安装方法:pipinstallcoloradd技术支持微信scartch8,QQ:406273900www.lix......
  • python企业员工工作流引擎的研究 0f4m7
    目录python语言技术路线框架介绍具体实现截图技术栈和环境说明解决的思路性能/安全/负载方面核心代码部分展示详细视频演示源码获取方式python语言Python的扩展性也很好,其可以利用c语言编写模块,编译链接到解释器,从而使Python能够调用该c模块中的接口。反之,C语言也能......
  • 使用Conda配置python环境到Pycharm------Window小白版
    使用Conda配置python环境到Pycharm一、Conda安装和环境配置1.1安装Conda软件1.2判断是否安装成功1.3创建Conda虚拟环境二、pycharm的安装2.1Pycharm使用手册2.2安装pycharm三、pycharm导入Conda环境一、Conda安装和环境配置anaconda官网1.1安装Conda软......
  • CurveFitter一款好用且免费的曲线拟合工具
    软件介绍CurveFitter一款好用且免费的曲线拟合工具用于将分析函数非线性曲线拟合到实验数据的免费软件。易于使用的图形用户界面使您无需学习曲线即可开始拟合项目。软件下载https://pan.quark.cn/s/6692512731f2安装教程1、双击运行自解压文件2、点击解压(解压码后台......
  • AI给的和自己写的Python代码,都无法改变输入框的内容,替换也不行
    大家好,我是Python进阶者。一、前言前几天在Python最强王者交流群【黑科技·鼓包】问了一个Python的问题。问题如下:我也遇到问题了..大佬们知道的帮忙解答下,很奇怪,不知道为什么nicegui库中input输入框的值不能用change改变的模式更改,但是可以选择直接赋值,我想让用户只能输入纯数字(不......
  • D18【python接口自动化学习】-python基础之内置数据类型
    day18综合练习:实现手机通讯录(下)学习日期:20240925学习目标:内置数据类型--27小试牛刀:如何使用类型转换实现手机通讯录(下)学习笔记:实现手机通讯录案例文件withopen('27-demo.csv')asf:file_data=f.readlines()print(file_data)#[',张三,同事,13511112222\n......
  • Python办公自动化之Excel
    在日常工作中,Excel是很多办公人士必不可少的工具,而随着工作流程的复杂化,手动操作Excel的效率已无法满足高效办公的需求。那么,如何通过Python来实现Excel的自动化操作,帮助我们节省时间,提高效率呢?Python如何高效处理Excel文件?通过Python,我们可以快速地读取、修改和......
  • AI给的和自己写的Python代码,都无法改变输入框的内容,替换也不行
    大家好,我是Python进阶者。一、前言前几天在Python最强王者交流群【黑科技·鼓包】问了一个Python的问题。问题如下:我也遇到问题了..大佬们知道的帮忙解答下,很奇怪,不知道为什么nicegui库中input输入框的值不能用change改变的模式更改,但是可以选择直接赋值,我想让用户只能输入纯数......
  • Python从0到100(五十八):机器学习-随机森林及对复杂数据集分类
    随机森林通过构建多个决策树来完成分类或回归任务。随机森林的核⼼思想是通过多个弱学习器(决策树)的集成来构建⼀个强学习器,从⽽提⾼模型的泛化能⼒和稳定性。1.基本原理随机森林的基本原理如下:从训练集中随机抽取⼀定数量的样本(有放回抽样),构建⼀个决策树(称为⾃助采样法或......
  • python爬虫介绍
    python网络爬虫介绍网络爬虫就是按照一定的规则,自动地抓取网络上的各种信息的程序。网络爬虫分类按照系统结构和实现技术,可以把分为通用网络爬虫、聚焦网络爬虫、增量式网络爬虫、深层网络爬虫。实际应用中可以将这几种结合起来使用。 通用网络爬虫:如网络搜过引擎,根据提示信息尽可......