我有一个带有两列x和y的pandas数据框。我知道数据点的图形将是一个抛物线,因此此数据帧的功能将是ax²+bx+c=y
。
我阅读了有关通过numpy解决变量的二次函数的不同文章。但是在这种情况下,由于数据帧,我知道了变量。
是否有一个函数可以借助数据帧中的x,y值来获取系数a,b和c的值?
答案 0 :(得分:2)
您可以使用NumPy的polyfit
使多项式拟合并获得拟合系数。下面是一个最小的工作答案
import pandas as pd
import numpy as np
df = pd.DataFrame({'x':[1,2,3,4,5],
'y':[0.9, 3.8, 9.2, 15.4, 25.5]})
fit = np.polyfit(df['x'], df['y'], 2)
equation = np.poly1d(fit)
print ("The fit coefficients are a = {0:.4f}, b = {1:.4f} c = {2:.4f}".format(*fit))
print (equation)
输出
The fit coefficients are a = 1.0857, b = -0.4343 c = 0.3200
2
1.086 x - 0.4343 x + 0.32
您还可以使用matplotlib
import matplotlib.pyplot as plt
xmesh = np.linspace(min(df['x']), max(df['x']), 100)
plt.plot(df['x'], df['y'], 'bo', label='data')
plt.plot(xmesh, equation(xmesh), '-b', label='fit')
plt.legend(fontsize=20)
plt.xlabel('x', fontsize=20)
plt.ylabel('y', fontsize=20)
plt.show()
答案 1 :(得分:0)
是的。您可以使用.polyfit
,度为2
import numpy as np
x = np.array([0, 1, 2, 3, 4, 5])
y = np.array([4, 7, 12, 19, 28, 39])
z = np.polyfit(x, y, 2)
a = z[0].round(2)
b = z[1].round(2)
c = z[2].round(2)
print ('a: %.1f\nb: %.1f\nc: %.1f' %(a,b,c))
print ('y = %.1fx\u00b2 + %.1fx + %.1f' %(a,b,c))
print ('f(x) = %.1fx\u00b2 + %.1fx + %.1f' %(a,b,c))
输出:
a: 1.0
b: 2.0
c: 4.0
y = 1.0x² + 2.0x + 4.0
f(x) = 1.0x² + 2.0x + 4.0