Я пытаюсь вычислить линейную регрессию для моего небольшого проекта по науке о данных.
У меня есть класс
import numpy as np
# I'm using the idea from https://devarea.com/linear-regression-with-numpy/#.XRfdcegzaUk
class LinearRegression:
def __init__(self, values):
self.y = np.array(values)
self.x = np.array([number for number in range(1, len(values)+1)])
self.values_to_return = []
def getlinear(self, x1):
# Function that returns value
def inner(x1):
return self.m * x1 + self.b
self.m = (len(self.x) * np.sum(self.x*self.y) - np.sum(self.x) * np.sum(self.y)) / (len(self.x)*np.sum(self.x*self.x) - np.sum(self.x) * np.sum(self.x))
self.b = (np.sum(self.y) - self.m*np.sum(self.x)) / len(self.x)
return inner
И я получил ошибку
Файл "c: / Users / Paweł / Documents / projects vscode / WorldBankDataKeras / tests.py", строка 35, в
country1 = data.CountryInformations ('Польша')
Файл "c: \ Users \ Paweł \ Documents \ projects vscode \ WorldBankDataKeras \ data.py", строка 26, в init
linear.return_values_of_linear_regression ())
Файл "c: \ Users \ Paweł \ Documents \ projects vscode \ WorldBankDataKeras \ linear_regr.py", строка 22, в return_values_of_linear_regression
self.values_to_return.append (self.getlinear (x_param))
Файл "c: \ Users \ Paweł \ Documents \ projects vscode \ WorldBankDataKeras \ linear_regr.py", строка 15, в getlinear
self.m = (np.array (len (self.x)) * np.sum (self.x * self.y) - np.sum (self.x) * np.sum (self.y)) / ( np.array (len (self.x)) np.sum (self.x self.x) - np.sum (self.x) * np.sum (self.x))
Ошибка типа: неподдерживаемые типы операндов для *: 'int' и 'dict_values'
Что я делаю не так?
EDIT:
При передаче списка (dictionary.values ()) в класс я получил
Traceback (последний вызов был последним):
Файл "c: / Users / Paweł / Documents / projects vscode / WorldBankDataKeras / tests.py", строка 41, в
graph.plot_graph_renewable_electricity_status ()
Файл "c: \ Users \ Paweł \ Documents \ projects vscode \ WorldBankDataKeras \ graph_plotting.py", строка 115, в plot_graph_renewable_electricity_status
LineStyle = '-')
Файл "C: \ Users \ Paweł \ AppData \ Local \ Programs \ Python \ Python37 \ lib \ site-packages \ matplotlib__init __. Py", строка 1810, во внутренней
return func (ax, * args, ** kwargs)
Файл "C: \ Users \ Paweł \ AppData \ Local \ Programs \ Python \ Python37 \ lib \ site-packages \ matplotlib \ axes_axes.py", строка 1612, в сюжете
self.add_line (линия)
Файл "C: \ Users \ Paweł \ AppData \ Local \ Programs \ Python \ Python37 \ lib \ site-packages \ matplotlib \ axes_base.py", строка 1895, в add_line
self._update_line_limits (линия)
Файл "C: \ Users \ Paweł \ AppData \ Local \ Programs \ Python \ Python37 \ lib \ site-packages \ matplotlib \ axes_base.py", строка 1917, в _update_line_limits
путь = line.get_path ()
Файл "C: \ Users \ Paweł \ AppData \ Local \ Programs \ Python \ Python37 \ lib \ site-packages \ matplotlib \ lines.py", строка 945, в get_path
self.recache ()
Файл "C: \ Users \ Paweł \ AppData \ Local \ Programs \ Python \ Python37 \ lib \ site-packages \ matplotlib \ lines.py", строка 645, в режиме восстановления
y = _to_unmasked_float_array (yconv) .ravel ()
Файл "C: \ Users \ Paweł \ AppData \ Local \ Programs \ Python \ Python37 \ lib \ site-packages \ matplotlib \ cbook__init __. Py", строка 1365, в _to_unmasked_float_array
вернуть np.asarray (x, float)
Файл "C: \ Users \ Paweł \ AppData \ Local \ Programs \ Python \ Python37 \ lib \ site-packages \ numpy \ core \ numeric.py", строка 538, в asarray
возвращаемый массив (a, dtype, copy = False, order = order)
TypeError: аргумент float () должен быть строкой или числом, а не 'функцией'
РЕДАКТИРОВАТЬ 2:
class CountryInformations:
def __init__(self, name):
self.name = name
xls_parsing = xls_parse.XLSParsing(self.name)
self.population = xls_parsing.import_country_population()
self.co2_emissions = xls_parsing.import_country_co2_emissions()
self.renewable_electricity_status = xls_parsing.import_country_renewable_electricity_status()
# I want to have linear regression values in format [year] : value
self.population_linear_regression = self.population.copy()
self.co2_emissions_linear_regression = self.co2_emissions.copy()
self.renewable_electricity_status_linear_regression = self.renewable_electricity_status.copy()
linear = linear_regr.LinearRegression(list(self.population_linear_regression.values()))
# Replacing values in dict by values from linear regression
self.population_linear_regression = dict.fromkeys(self.population_linear_regression,
linear.return_values_of_linear_regression())
linear = linear_regr.LinearRegression(list(self.co2_emissions_linear_regression.values()))
# Replacing values in dict by values from linear regression
self.co2_emissions_linear_regression = dict.fromkeys(self.co2_emissions_linear_regression,
linear.return_values_of_linear_regression())
linear = linear_regr.LinearRegression(list(self.renewable_electricity_status_linear_regression.values()))
# Replacing values in dict by values from linear regression
self.renewable_electricity_status_linear_regression = dict.fromkeys(self.renewable_electricity_status_linear_regression,
linear.return_values_of_linear_regression())
def __str__(self):
print_string = 'Country: {} \n \
Population: {}M \n \
CO2 Emissions: {}KT \n \
Renewable Electricity Status: {}%'.format(self.name, \
self.population, \
self.co2_emissions, \
self.renewable_electricity_status)
return print_string