我试图运行此代码以生成散点图,但我不知道如何修复错误
代码的思想是使用pandas从CSV文件加载数据,然后分别分离属性和目标x和y。
然后我必须用散点图生成一个图,有这些初始变量。
然后我必须把x和y分成测试变量和训练变量,其中测试变量为15%。
然后我必须使用Scikit训练线性回归器并再次绘制样本,在训练结束时呈现回归器获得的线。最后,估计测试样本的目标,给出均方误差(MSE)和R2得分值。
但是我在图表创建部分失败了,我无法前进。
代码:
import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
df = pd.read_csv('prehistoric_pueblos.csv', header=None, names=['X', 'y'])
X = df['X']
y = df['y']
plt.scatter(X, y)
plt.ylabel('y')
plt.xlabel('X')
plt.show()
CSV:
1000,105;
1125,115;
1087,1213;
1070,1275;
1100,13;
1150,13;
1250,14;
1150,14;
1100,125;
1350,183;
1275,135;
1375,145;
1175,13;
1200,13;
1175,1275;
1300,1375;
1260,1285;
1330,14;
1325,14;
1200,1285;
1225,1275;
1090,1135;
1075,125;
1080,1275;
1080,115;
1180,125;
1225,1275;
1175,1225;
1250,128;
1250,13;
750,125;
1125,1175;
700,13;
900,125;
900,13;
850,12;
;
错误代码:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
Cell In[45], line 16
13 X = df['X']
14 y = df['y']
---> 16 plt.scatter(X, y)
17 plt.ylabel('y')
18 plt.xlabel('X')
File c:\Program Files\Python311\Lib\site-packages\matplotlib\pyplot.py:2862, in scatter(x, y, s, c, marker, cmap, norm, vmin, vmax, alpha, linewidths, edgecolors, plotnonfinite, data, **kwargs)
2857 @_copy_docstring_and_deprecators(Axes.scatter)
2858 def scatter(
2859 x, y, s=None, c=None, marker=None, cmap=None, norm=None,
2860 vmin=None, vmax=None, alpha=None, linewidths=None, *,
2861 edgecolors=None, plotnonfinite=False, data=None, **kwargs):
-> 2862 __ret = gca().scatter(
2863 x, y, s=s, c=c, marker=marker, cmap=cmap, norm=norm,
2864 vmin=vmin, vmax=vmax, alpha=alpha, linewidths=linewidths,
2865 edgecolors=edgecolors, plotnonfinite=plotnonfinite,
2866 **({"data": data} if data is not None else {}), **kwargs)
2867 sci(__ret)
2868 return __ret
File c:\Program Files\Python311\Lib\site-packages\matplotlib\__init__.py:1461, in _preprocess_data..inner(ax, data, *args, **kwargs)
1458 @functools.wraps(func)
...
96 ", ".join(names[:-1]) + " or " + names[-1]
97 if len(names) > 1 else names[0],
98 type_name(type(v))))
TypeError: 'value' must be an instance of str or bytes, not a float
我希望它能形成一个图形
2条答案
按热度按时间nwsw7zdq1#
由于csv的质量很差,您需要使用更多的参数来使用
pd.read_csv
获得所需的df
:sep=r',|;'
来处理多个分隔符,这需要engine='python'
来避免ParserWarning
。skipfooter=1
以跳过最后一行。usecols=[0, 1]
以忽略第三列的空值(由每行的尾随;
引起)。结果
建议您随时检查您的
df
。你的会看起来像这样:使用添加的参数创建的
df
如下所示:ejk8hzay2#
使用一些.csv编辑器,如Notepad++,并将
;
替换为,
或将,
替换为;
,以便在.csv文件上始终使用相同的分隔符。你可以很容易地做到这一点与查找和替换功能