首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Python中复制Excel的"Power Trendline“?

如何在Python中复制Excel的"Power Trendline“?
EN

Stack Overflow用户
提问于 2015-08-20 23:06:03
回答 4查看 3.3K关注 0票数 3

如何在Python中重新创建"Excel Power Trendline“并获取系数?

在Excel中,此数据...

代码语言:javascript
复制
x = [5.5, 6.0, 6.5, 7, 9]
y = [64.0575, 69.656, 75.781, 82.7023, 111.156866]

...creates生成回归公式的趋势线:

代码语言:javascript
复制
y = 9.2347 * (x ^ 1.1294)

我想用Python来做这件事,这样我就可以在稍后的软件中利用公式中的系数。

谢谢!

EN

回答 4

Stack Overflow用户

发布于 2017-12-02 06:26:18

我意识到这个问题目前已经2岁零3个月了,但目前的答案还不完整。这是一个完整的答案。

你必须先知道幂公式的结构。

代码语言:javascript
复制
y = some_number*x^(-another_number)

示例:

代码语言:javascript
复制
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()

生成以下图表:

演示功率曲线的一个更好的例子可能是:

代码语言:javascript
复制
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并执行以下操作:

代码语言:javascript
复制
# 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找到正确的系数,并从数学上了解幂函数的结构。

票数 5
EN

Stack Overflow用户

发布于 2015-08-20 23:11:24

在不知道“Power Trendline”是什么的情况下,我假设你可以用以下方法来解决你的问题:

代码语言:javascript
复制
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))
票数 0
EN

Stack Overflow用户

发布于 2017-05-20 00:28:38

创建一个函数来定义要拟合的方程,然后使用scipy中的curvefit(funx,x,y)根据x和y参数获得拟合值。

代码语言:javascript
复制
def func(x, C, m): return C*x**m

popt, pcov = scipy.optimize.curve_fit(func,  x,  y)

popt将返回func中的C和m值,我相信pcov是界限,但我不太确定。

希望这能对你有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32121877

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档