Я получил эту ошибку при попытке скомпилировать мой код. Я извлек данные из файла xlsx и создал фрейм данных, заменил нулевые значения на 0, преобразовал все значения в sting, чтобы иметь возможность рассеивать диаграмму, и когда я попытался показать результаты своей линейной регрессии, я получил эту ошибку.
TypeError: unsupported operand type(s) for /: 'str' and 'int'
и это код, который я сделал до сих пор
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
def predict(x):
return slope * x + intercept
from scipy import stats
xlsxfile = pd.ExcelFile("C:\\Users\\AchourAh\\Desktop\\PL14_IPC_03_09_2018_SP_Level.xlsx")
data = xlsxfile.parse('Sheet1', index_col = None, header = None)
data1 = data.fillna(0) #Replace null values of the whole dataset with 0
data1 = data1.astype(str)
print(data1)
X = data1.iloc[0:len(data1),1]
print(X)
Y = data1.iloc[0:len(data1),2]
print(Y)
axes = plt.axes()
axes.grid()
plt.scatter(X,Y)
slope, intercept, r_value, p_value, std_err = stats.linregress(X, Y)
Чтобы заметить, что я начинаю с этим. Последняя строка вызывает ошибку. Это первые столбцы COP COR и PAUS для данных, которые я пытаюсь применить к линейной регрессии:
0 PP SP000045856 COP COR SP000045856 PAUS
1 201723 0 2000
2 201724 12560 40060
3 201725 -17760 15040
4 201726 -5840 16960
5 201727 10600 4480
6 201728 0 14700
7 201729 4760 46820
... до строки 27
Данные в вашем файле Excel содержат информацию заголовка в первой строке, поэтому настройка header=None
- причина, по которой в ваших данных есть строковые значения вместо того, чтобы помещать их в имена столбцов.
Если вы удалите заголовок kwarg
xlsxfile = pd.ExcelFile("C:\\Users\\AchourAh\\Desktop\\PL14_IPC_03_09_2018_SP_Level.xlsx")
data = xlsxfile.parse('Sheet1', index_col = None)
все должно работать, и вы должны получить такую структуру данных:
data
0 PP SP000045856 COP COR SP000045856 PAUS
0 1 201723 0 2000
1 2 201724 12560 40060
2 3 201725 -17760 15040
3 4 201726 -5840 16960
4 5 201727 10600 4480
5 6 201728 0 14700
6 7 201729 4760 46820
Тем не менее, вы можете сделать то же самое даже немного короче, напрямую используя read_excel
-function из pandas:
data = pd.read_excel('C:\\Users\\AchourAh\\Desktop\\PL14_IPC_03_09_2018_SP_Level.xlsx', 'Sheet1')
Затем ваш график рассеяния можно сделать, например, как
data.plot('SP000045856 COP COR', 'SP000045856 PAUS', 'scatter')
или, возможно, более читаемые, но идентичные:
data.plot.scatter('SP000045856 COP COR', 'SP000045856 PAUS')
И линейная регрессия может быть выполнена как
slope, intercept, r_value, p_value, std_err = stats.linregress(data['SP000045856 COP COR'], data['SP000045856 PAUS'])
converted all the values to string to be able to scatterplot
?? Почему вы думаете, что вам нужны строки, чтобы создать точечный график? Однако -stats.linregress
нуждается в массиве (-ах) чисел, потому что он вычисляет линейную регрессию, например, некоторых измеренных, например, шумных данных, по некоторой независимой переменной, например, по времени или как угодно ... Возможно, вы кратко изучите документацию эта функция: docs.scipy.org/doc/scipy/reference/generated/…