我正在为分配编写代码,要求您从.txt文件导入数据并创建两个类类型以查找最小二乘回归和其他相关值的值。数据为BMI与收缩压,将被读入两个不同的列表,即x值和y值。
当我的shell窗口突然关闭时,我试图对类的不同函数运行测试。重新打开它后,我发现我无法运行其中一个类的代码以及用于将数据读入列表的部分代码。这是错误消息:ModuleNotFoundError:没有名为' data'
的模块这是.py文件中用于将代码读入列表的代码。我不认为这是问题所在的列表,但我不确定是什么:
from data import Data
from linear_regression import SLR
def read_data(input_file_name):
""" (str) -> list, list
Read data from the path specified by the string input_file.
Data looks like:
18 120
20 110
22 120
25 135
Output two lists, one for each column of data.
"""
list1 = []
list2 = []
read = open(input_file_name, 'r')
read2 = read.readlines()
lines = [line.strip() for line in read2]
for new_line in lines:
list1.append(float(new_line.split(' ')[0]))
list2.append(float(new_line.split(' ')[1]))
return list1, list2
filename = 'bmi_vs_sbp.txt'
x, y = read_data(filename)
dat = Data(x,y)
lm = SLR(dat)
print(lm)
对于没有运行的课程,我不认为实际的功能本身存在问题,但是在定义类和函数之前,最重要的是:
from data import Data
class SLR:
def __init__(self, data):
""" (SLR, Data) -> NoneType
Create a new simple linear regression object from data,
with three attributes: data, beta0, and beta1.
"""
self.data = data
self.beta0, self.beta1 = data.compute_least_squares_fit()
def predict(self, x):
""" (SLR, number) -> number
Return predicted value at x.
"""
x_new = self.x = x
y_new = self.beta0 + self.beta1*x_new
return y_new
def compute_residuals(self):
""" (SLR) -> list
Return the residuals in a list of numbers.
"""
residuals = []
for i in range(len(self.data.x)):
residuals.append(self.data.y[i] - self.beta0 - self.beta1*self.data.x[i])
return residuals
def compute_SSResid(self):
""" (SLR) -> number
Return the sum of square residuals (SSResid).
"""
residuals = self.compute_residuals()
SSResid = 0
for i in range(len(self.data.x)):
SSResid += pow(residuals[i],2)
return SSResid
def compute_residual_sd(self):
""" (SLR) -> number
Return the residual standard deviation.
"""
residuals = self.compute_residuals()
residual_sd = pow(self.compute_SSResid()/(len(self.data.x)-2), 1/2)
return residual_sd
def compute_rsquared(self):
""" (SLR) -> number
Return the R-squared of the SLR fit.
"""
rsquared = 1 - (self.compute_SSResid()/self.data.compute_SST())
return rsquared
def __str__(self):
""" (SLR) -> str
Return a string representation of an SLR in this format:
Least squares fit on 10 data points.
Intercept = 45.584331
Slope = 3.465523
Residual standard deviation = 13.051139
R-squared = 0.731364
"""
return print('Least squares fit on {} data points.''\n'
'Intercept = {:.6f}''\n'
'Slope = {:.6f}''\n'
'Residual standard deviation = {:.6f}''\n'
'R-squared = {:.6f}'.format(self.data.num_obs(), self.beta0, self.beta1, self.compute_residual_sd(), self.compute_rsquared()))
导入模块代码属于赋值中的给定代码。需要导入第一个类Data,以便可以在SLR中使用Data中定义的函数。数据函数仍然运行,我已经尝试重新启动,但我仍然收到错误消息,没有模块称为数据。对此有任何帮助将非常感激。
答案 0 :(得分:0)
当在代码的第一行中创建import语句时,python解释器会查找该名称的文件/类。说这是你的文件夹结构:
workspace
|
+- other_stuff
+- python
|
+- data.py
+- SLR.py
如果您的shell位于您的工作区中并且您运行$ python python/SLR.py
,则python将首先查看您的PYTHONPATH,然后查看您当前所在文件/类的任何位置。在这种情况下,这将是workspace
- 没有名为data.py
的文件,因此它会导致导入错误。如果你从python文件夹中调用$ python SLR.py
,那么data.py
就会在那里执行,并且没有问题。
可能发生的事情是,上次执行程序时,您与保存data.py
的文件位于同一文件夹中,当它崩溃时,您从其他地方调用了代码。
解决此问题的最佳方法可能是将保存data
内容的文件夹的位置添加到PYTHONPATH中,如链接中所述。