Нужно передать 4 переменных во вторую функцию. Вот код
def Data():
money = pd.read_excel("usd_exchange_rate.xlsx") #Датафрейм
values = money.curs
past = 7 * 4 # на основе данных за последние 4 недели
future = 7 # будем предсказывать тренд на неделю вперед
start = past
end = len(values) - future
raw_df = []
for i in range(start, end): # Для каждой строчки (т.е. для каждого дня)
p_and_f_val = values[(i-past):(i+future)] # Выбирает данные за прошлое и будущее
raw_df.append(list(p_and_f_val))
past_col = [f"past_{i}" for i in range(past)] # Название для колонок в прошлом
future_col = [f"future_{i}" for i in range(future)] # Название колонок в будущем
df = pd.DataFrame(raw_df, columns=(past_col + future_col)) # Преобразованные данные
x = df[past_col][:-1] # Входные данные (то, на чем будет обучаться модель)
y = df[future_col][:-1] # Выходные данные (то, что мы модель должна вывести в своем предсказании)
x_test = df[past_col][-1:] # Данные, на основе которых будет сделано предсказание
y_test = df[future_col][-1:] # Реальные данные, которые будут сравниваться с предсказанными
return x, y, x_test, y_test
Data()
def LR(x, y, x_test, y_test):
LinReg = LinearRegression()
LinReg.fit(x,y) # Запускает метод обучения
prediction = LinReg.predict(x_test) # Данные предсказанные моделью
plt.plot(prediction[0], label="Предсказание") # Предсказанные данные на графике
plt.plot(y_test.iloc[0], label="Реальные данные") # Реальные данные на графике
plt.legend() # Отображение графика с указаниями
plt.show()
mean_absolute_error(prediction[0], y_test.iloc[0]) # Ошибка. Разница между предсказанием и реальными данными
LR(x,y,x_test,y_test)
Ошибка
LR(x,y,x_test,y_test)
NameError: name 'x' is not defined
При
LR(Data())
Ошибка
TypeError: LR() missing 3 required positional arguments: 'y', 'x_test', and 'y_test'
В общем при любом раскладе выдает ошибку (при global тоже). Все примеры перерыл в инете, ни один не заработал. Объясните, пожалуйста, почему не работает? И как оно вообще работает?