如何在Python中重新创建"Excel Power Trendline“并获取系数?
在Excel中,此数据...
x = [5.5, 6.0, 6.5, 7, 9]
y = [64.0575, 69.656, 75.781, 82.7023, 111.156866]...creates生成回归公式的趋势线:
y = 9.2347 * (x ^ 1.1294)我想用Python来做这件事,这样我就可以在稍后的软件中利用公式中的系数。
谢谢!
发布于 2017-12-02 06:26:18
我意识到这个问题目前已经2岁零3个月了,但目前的答案还不完整。这是一个完整的答案。
你必须先知道幂公式的结构。
y = some_number*x^(-another_number)示例:
from scipy.optimize import curve_fit
import matplotlib.pyplot as plt
x = [5.5, 6.0, 6.5, 7, 9]
y = [64.0575, 69.656, 75.781, 82.7023, 111.156866]
popt, pcov = curve_fit(lambda fx,a,b: a*fx**-b, x, y)
power_y = popt[0]*x**-popt[1]
plt.scatter(x, y, label='actual data')
plt.plot(x, power_y, label='power-fit')
plt.legend()
plt.show()生成以下图表:

演示功率曲线的一个更好的例子可能是:
x = [5.5, 6.0, 6.5, 7, 9]
y = [100, 80, 40, 10, 5]
popt, pcov = curve_fit(lambda fx,a,b: a*fx**-b, x, y)
power_y = popt[0]*x**-popt[1]
plt.scatter(x, y, label='actual data')
plt.plot(x, power_y, label='power-fit')
plt.legend()
plt.show()

如果想要显示平滑的线条,而不是锯齿状的线条,请导入numpy并执行以下操作:
# make the line smooth instead of jagged
import numpy as np
x = [5.5, 6.0, 6.5, 7, 9]
y = [100, 80, 40, 10, 5]
popt, pcov = curve_fit(lambda fx,a,b: a*fx**-b, x, y)
x_linspace = np.linspace(min(x), max(x), 100)
power_y = popt[0]*x_linspace**-popt[1]
plt.scatter(x, y, label='actual data')
plt.plot(x_linspace, power_y, label='smooth-power-fit')
plt.legend()
plt.show()

所有这一切的关键是使用scipy.optimize.curve_fit找到正确的系数,并从数学上了解幂函数的结构。
发布于 2015-08-20 23:11:24
在不知道“Power Trendline”是什么的情况下,我假设你可以用以下方法来解决你的问题:
x = [5.5, 6.0, 6.5, 7, 9]
y = []
def formula(arg):
return (9.2347 * (arg ** 1.1294))
for number in x:
y.append(formula(x))发布于 2017-05-20 00:28:38
创建一个函数来定义要拟合的方程,然后使用scipy中的curvefit(funx,x,y)根据x和y参数获得拟合值。
def func(x, C, m): return C*x**m
popt, pcov = scipy.optimize.curve_fit(func, x, y)popt将返回func中的C和m值,我相信pcov是界限,但我不太确定。
希望这能对你有所帮助。
https://stackoverflow.com/questions/32121877
复制相似问题