我试图根据提供给我的数据运行三个不同的回归。我们的想法是了解甜味和苦味是如何联系在一起的,但我们有三种不同的苹果酒:{干的、半干的、甜的}。
我想的是,首先用所有的x值做一个散点图,不管我们有哪种苹果酒,然后基于三种不同的"切片"熊猫df,x_dry,x_semidy和x_sweet,建立三个不同的回归模型。
我得到一个错误行20,说我本质上是用一个numpy数组乘以一个int。因此,为了开始解决我的问题,我尝试列出(myarray(。但是,错误仍然存在。有人能在这里给我指正确的方向吗?
我得到的错误:
TypeError Traceback (most recent call last)
<ipython-input-138-fa4209c61f04> in <module>
20 return slope*i + intercept
21
---> 22 mymodeldry = list(map(myfunc, x_dry))
23 mymodelsemidry = list(map(myfunc, x_semidry))
24 mymodelsweet = list(map(myfunc, x_sweet))
<ipython-input-138-fa4209c61f04> in myfunc(i)
18
19 def myfunc(i):
---> 20 return slope*i + intercept
21
22 mymodeldry = list(map(myfunc, x_dry))
TypeError: can't multiply sequence by non-int of type 'numpy.float64'
我的代码
# d) Represent the sweet flavor according to the bitter flavor and add the regression line, for each type of cider.
x = list(ciderdf["Sweetness"])
x_dry = ciderdf[ciderdf["Type"]=="Dry"]
x_dry = list(x_dry[["Sweetness"]])
x_semidry = ciderdf[ciderdf["Type"]=="Semi-dry"]
x_semidry = list(x_semidry[["Sweetness"]])
x_sweet = ciderdf[ciderdf["Type"]=="Sweet"]
x_sweet = list(x_sweet[["Sweetness"]])
y = list(ciderdf["Bitterness"])
slope, intercept, r, p, std_err = stats.linregress(x, y)
slope, intercept, r, p, std_err = stats.linregress(x, y)
slope, intercept, r, p, std_err = stats.linregress(x, y)
def myfunc(i):
return slope*i + intercept
mymodeldry = list(map(myfunc, x_dry))
mymodelsemidry = list(map(myfunc, x_semidry))
mymodelsweet = list(map(myfunc, x_sweet))
plt.scatter(x,y)
plt.plot(x, mymodeldry, mymodelsemidry, mymodelsweet)
plt.show()
错误在x_dry = list(x_dry[["Sweetness"]])
中。执行此操作时,将返回x_dry = ['Sweetness']
。
因此,在map函数中,您实质上是将浮点slope
与一个字符串相乘,该字符串将引发TypeError: can't multiply sequence by non-int of type 'numpy.float64'
。
改为执行以下操作:x_dry = x_dry["Sweetness"].tolist()
。
df = pd.DataFrame({'a':[1,2,3], 'b':[4,5,6]})
x_dry = df["a"].tolist()
print(x_dry)
def myfunc(i):
return 3.14*i + 2.56
mymodeldry = list(map(myfunc, x_dry))
print(mymodeldry)
输出:
[1, 2, 3]
[5.7, 8.84, 11.98]
您实际上是在将列表乘以浮点值,这是不可能的。事实上,这仅在int
的情况下是可能的,因为将列表乘以数字n
重复列表n
次。
我认为您想将列表中的每个元素乘以一个浮点值,可以通过在numpy数组x_dry = np.array(list(x_dry[["Sweetness"]]))
中转换列表x_dry = list(x_dry[["Sweetness"]])
来实现