Python R ^ 2 расчеты идут не так - PullRequest
0 голосов
/ 06 ноября 2018

Я пытаюсь сделать базовый анализ данных, которые у меня есть в CSV. Данные имеют временную метку, по отношению к которой есть значение для «Test A» и «Test B». [образец данных файла csv]

У меня есть средние значения для теста А и Б, а также разница между результатами теста. Но мне действительно нужно вычислить значение r ^ 2, чтобы увидеть, как соотносятся два теста. Я знаю действительно простой способ сделать это в Excel, но у меня есть много данных, поэтому их нужно кодировать для лучшего. Раздел кода, который я должен вычислить, г ^ 2 возвращает ошибку

TypeError: неподдерживаемые типы операндов для ** или pow (): 'LinregressResult' и 'int'

Интересно, возможно ли это потому, что я делаю это для данных столбцов в формате float64? [сообщение об ошибке]

В идеале я также ищу способ анализа только разделов данных - я хочу анализировать данные за каждый час (45 точек данных в час). У кого-нибудь есть способ включить только определенный раздел строк?

Большое спасибо !!

import pandas as pd
from scipy import stats

# Read the file in csv 
data_input = pd.read_csv("StackOF_r2.csv", low_memory=False)

#Output the number of rows
print("Total rows: {0}".format(len(data_input)))

# See which headers are available
print(list(data_input))

# Get the data from the data columns
data_A = data_input['Test A']
data_B = data_input['Test B']

# Average the data for Test A
Test_A = data_input['Test A'].mean()
print 'Test A Average: ', round(Test_A, 4)

# Average the data for Test B
Test_B = data_input['Test B'].mean()
print 'Test B Average: ', round(Test_B, 4)

# Calculate difference to between tests
Error = Test_A - Test_B
print 'Error (difference between averages): ', round(abs(Error), 4)

# Work out the r2 value between the two tests
r_value = stats.linregress(data_A, data_B)
print "r_value: ", r_value
print "R-squared: ", r_value**2

print data_input['Test A'].dtypes

Ответы [ 3 ]

0 голосов
/ 06 ноября 2018

Из документации , scipy.stats.linregress возвращает LinregressResult. Если вы посмотрите на исходный код, приведите пример для этого.

from scipy import stats
np.random.seed(12345678)
x = np.random.random(10)
y = np.random.random(10)
slope, intercept, r_value, p_value, std_err = stats.linregress(x, y)
print("r-squared:", r_value**2)
0 голосов
/ 06 ноября 2018

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

import pandas as pd
from scipy import stats

# Read the file in csv 
data_input = pd.read_csv("StackOF_r2.csv", low_memory=False)

#Output the number of rows
print("Total rows: {0}".format(len(data_input)))

# See which headers are available
print(list(data_input))

# Get the data from the data columns
data_A = data_input['Test A']
data_B = data_input['Test B']

# Average the data for Test A
Test_A = data_input['Test A'].mean()
print 'Test A Average: ', round(Test_A, 4)

# Average the data for Test B
Test_B = data_input['Test B'].mean()
print 'Test B Average: ', round(Test_B, 4)

# Calculate difference to between tests
Error = Test_A - Test_B
print 'Error (difference between averages): ', round(abs(Error), 4)

# Work out the r2 value between the two tests
##### This is the correction #####
slope, intercept, r_value, p_value, std_err = stats.linregress(data_A, data_B)
print "r_value: ", r_value
print "R-squared: ", r_value**2

print data_input['Test A'].dtypes

Документация

0 голосов
/ 06 ноября 2018

r_value не является int или float, а имеет тип LinregressResult чтобы получить доступ к rvalue, вам нужно сделать одно из этих двух

v = stats.linregress(x, y)
v.rvalue

или

slope, intercept, r_value, p_value, std_err = stats.linregress(x, y)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...