拟合天猫双十一销售额

最近看到新闻双十一销售额的新闻,这边拟合一下。


import numpy as np import matplotlib.pyplot as plt from scipy.optimize import curve_fit # 自定义函数 e指数形式 # def func(x, a, b,c): # return a*np.sqrt(x)*(b*np.square(x)+c) # 三次曲线方程 def f_3(x, A, B, C, D): return A * x * x * x + B * x * x + C * x + D # 定义x、y散点坐标 x = [i+1 for i in range(10)] x = np.array(x) num = [0.5, 9.36, 52, 191, 350, 571, 912, 1207, 1682.69, 2135.00] y = np.array(num) # 非线性最小二乘法拟合 popt, pcov = curve_fit(f_3, x, y) print('拟合误差为:{}'.format(pcov)) #获取popt里面是拟合系数 a = popt[0] b = popt[1] c = popt[2] d = popt[3] yvals = f_3(x,a,b,c, d) # 拟合y值 print('popt:', popt) print('系数a:', a) print('系数b:', b) print('系数c:', c) print('系数pcov:', pcov) print('系数yvals:', yvals) #绘图 plot1 = plt.plot(x, y, 's',label='original values') plot2 = plt.plot(x, yvals, 'r',label='polyfit values') plt.xlabel('x') plt.ylabel('y') plt.legend(loc=4) #指定legend的位置右下角 plt.title('curve_fit') plt.show()


结论:

x is :
[ 1 2 3 4 5 6 7 8 9 10]
y is :
[5.00000e-01 9.36000e+00 5.20000e+01 1.91000e+02 3.50000e+02 5.71000e+02
9.12000e+02 1.20700e+03 1.68269e+03 2.13500e+03]
f1 is :
[ 0.15430847 27.54898601 -82.43744367 57.14666667]
p1 is :
3 2
0.1543 x + 27.55 x - 82.44 x + 57.15
预测值为:2689.1466666666643
yvals is :
[ 2.41251748 3.70219114 61.94153846 178.05641026 352.97265734
587.61613054 882.91268065 1239.78815851 1659.16841492 2141.9793007 ]

和今年的销售额还真挺接近的。

  

 

猜你喜欢

转载自www.cnblogs.com/aichiladeyu/p/11864964.html