Ошибка Scipy.stats «Слишком много значений для распаковки» при попытке выполнить linregress в наборе данных .csv

#python #scipy #scipy.stats

#python #scipy #scipy.stats

Вопрос:

Я пытаюсь подогнать строку к моим экспериментальным данным. Когда я запускаю код, который я обычно использую, я получаю сообщение об ошибке

Трассировка (последний последний вызов): Файл «/home/h/oscillator1.py «, строка 21, в наклоне, перехват, r_value = scipy.stats.linregress(data) Ошибка значения: слишком много значений для распаковки (ожидается 3)

Вот мой код:

 import matplotlib.pyplot as plt 
import pandas as pd 
import numpy as np 
import scipy.stats


data = pd.read_csv("/home/h/Documents/oscillator1.csv", decimal='.')

plt.plot(
         data['t (s)'], data['x (cm)'],
         marker=' ',
         linestyle="None",
         label="Data"
         )

plt.xlabel("t [s]", fontsize=13) 
plt.ylabel("x [cm]", fontsize=13) 
plt.xticks(np.arange(0, 1300, step=150), size = 13) 
plt.yticks(np.arange(-11, 2, step=1), size = 13) 
plt.title("x vs t from torsion balance measurements", fontsize=16)

slope, intercept, r_value = scipy.stats.linregress(data) 
print("slope = {}, intercept = {} and r-value = {}".format(slope, intercept, r_value**2))

plt.plot(data['t (s)'],
         data['t (s)']*slope intercept,
         label="Linear regression"
         )

plt.legend(fontsize=12) plt.show()
  

Благодарен за любую помощь.

Ответ №1:

Пожалуйста, смотрите страницу документации. Функция scipy.stats.linregress возвращает 5 значений:

  1. наклон
  2. перехват
  3. rvalue
  4. pvalue
  5. stderr

Вам нужно будет изменить вызов scipy.stats.linregress следующим образом:

 slope, intercept, r_value, p_value, stderr = scipy.stats.linregress(data)