Решение квадратного уравнения для коэффициентов с датафреймом - PullRequest
0 голосов
/ 15 января 2019

У меня есть пандас с двумя столбцами x и y. Я знаю, что график для точек данных будет параболой, поэтому функция для этого кадра данных будет ax²+bx+c=y.

Я читаю разные посты о решении квадратичной функции для их переменных с помощью numpy. Но в этой ситуации я знал переменные из-за фрейма данных.

Есть ли функция для получения значений коэффициентов a, b и c с помощью значений x, y из кадра данных?

Ответы [ 2 ]

0 голосов
/ 15 января 2019

Да. Вы можете использовать .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
0 голосов
/ 15 января 2019

Вы можете использовать NumPy's 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()

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...