徒手实现 KNN算法问题汇总

问题一:read_csv()读取文件,运行提示文件不存在

代码:import pandas as pd

           data=pd.read_csv('D:\MachineLearning\study\vehicle.csv')

运行报错:FileNotFoundError: [Errno 2] File b'D:\\MachineLearning\\study\x0behicle.csv' does not exist: b'D:\\MachineLearning\\study\x0behicle.csv'

分析:1 不能使用中文的路径名和文件名 2 路径用 "\\"标记不是用\或者/,

修改后代码:data=pd.read_csv('D:/MachineLearning/study/vehicle.csv') 或 data=pd.read_csv('D:\\MachineLearning\\study\\vehicle.csv')

运行后结果:runfile('D:/MachineLearning/study/untitled1.py', wdir='D:/MachineLearning/study')

原因: 注意windows下路径中的反斜杠\和斜杠/及双斜杠\\区别,windows下\是转义字符,想表达\请用\\

 

问题二:pandas中利用 .iloc 选取数据&numpy数组切片操作

代码:feature=np.array(data.iloc[:,0:2])

分析: Pandas中基本数据结构是Series(数组)和Dataframe(类似二维数组),Pandas中提供了Index对象,每个 Series 都会带有一个对应的Index,用来标记不同的元素,Index 的内容不一定是数字,也可以是字母、中文等,.iloc:根据标签的所在位置,从0开始计数,选取列,loc:根据DataFrame的具体标签选取列

      numpy的数组切片操作,一般是array[a:b,c:d],首先是看逗号,逗号前是取行的下标范围a到b-1,逗号后是取列的下标范围c到d-1 ,前面是行索引,后面是列索引;此处:取行全部数据,列从第0列开始取到第1列,第2列不算。即vehicle.csv数组中取出长度和宽度,标签列不取。

 

问题三:matplotlib.pylab 画散点图报语法错误

代码:plt.scatter(data['length'][data['label]=='car'],data['width'][data['label']=='car'],c='y')
           plt.scatter(data['length'][data['label]=='truck'],data['width'][data['label']=='truck'],c='r')

运行报错:SyntaxError: invalid syntax

分析:matplotlib——pyplot和pylab区别 pylab包括了许多NumPy和pyplot模块中常用的函数。测试后发现不是导入问题,从正确的句子中复制黏贴这两段代码,可运行出正确结果。

修改后代码:
plt.scatter(data['length'][data['label']=='car'],data['width'][data['label']=='car'],c='y')  #先取length的数值,里面有car和truck的长度,再单独取label那一行为car的值
plt.scatter(data['length'][data['label']=='truck'],data['width'][data['label']=='truck'],c='r')  #先取width的数值,里面有car和truck的长度,再单独取label那一行为truck的值

运行后结果:正常显示散点图

原因:初始代码是打字上去的, 在[data['label]=='car'],这个地方,label后面少打了一个单引号 ' ,造成句法不通,散点图不显示;希望以后在写代码的过程中注意符号的对称。   

 

上一篇:mysql 5.7.25搭建(转载)


下一篇:2. 使用Python解释器