txt文本:
40920 8.326976 0.953952 3
14488 7.153469 1.673904 2
26052 1.441871 0.805124 1
75136 13.147394 0.428964 1
38344 1.669788 0.134296 1
72993 10.141740 1.032955 1
35948 6.830792 1.213192 3
42666 13.276369 0.543880 3
67497 8.631577 0.749278 1
其中一行四个数据,把前三个放到二维数组中,最后一列放入一个一维数组,分别代表着特征和标签。
>>> fr = open('E:\machinelearninginaction\Ch02\datingTestSet2.txt')
>>> fr
<_io.TextIOWrapper name='E:\\machinelearninginaction\\Ch02\\datingTestSet2.txt' mode='r' encoding='cp936'>
>>> arrayOfLines = fr.readlines()
>>> numberOfLine = len(arrayOfLines)
>>> numberOfLine
1000
>>> arrayOfLines[0]
'40920\t8.326976\t0.953952\t3\n'
>>> arrayOfLines[0:5]
['40920\t8.326976\t0.953952\t3\n', '14488\t7.153469\t1.673904\t2\n', '26052\t1.441871\t0.805124\t1\n', '75136\t13.147394\t0.428964\t1\n', '38344\t1.669788\t0.134296\t1\n']
>>> line = arrayOfLines[0]
>>> line
'40920\t8.326976\t0.953952\t3\n'
>>> line = line.strip()
>>> line
'40920\t8.326976\t0.953952\t3'
>>> listFromLine = line.split('\t')
>>> listFromLine
['40920', '8.326976', '0.953952', '3']
>>> returnMat[0, :] = listFromLine[0:3]
>>> returnMat
array([[ 4.09200000e+04, 8.32697600e+00, 9.53952000e-01],
[ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00],
[ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00],
...,
[ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00],
[ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00],
[ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00]])
>>> classLabelVctor = []
>>> classLabelVctor.append(listFromLine[-1])
>>> classLabelVctor
['3']
>>> classLabelVctor.append(int(listFromLine[-1]))
>>> classLabelVctor
['3', 3]
open 加上文件路径,获取文件路径有个简单的方法,按住shift右键文件有个 复制路径。
image.png
readlines方法,读取所有行,放到一个一维列表中,每个单位存放一行的内容。
len方法获取该列表的大小,这里txt一共有1000行。
接下来是对每一行的处理:
strip函数作用:溢出字符串首尾指定字符,没有给出的话就默认为空格,回车。
split函数是按指定字符切割,这里把字符串切割为4个成员放入列表中。
numpy.zeros函数是产生指定大小的0矩阵,这里产生1000×3大小的二维矩阵,类型为float。
returnMat[0, :] = listFromLine[0:3] 是把0-2的内容复制到第0行所有位置上。
列表 -1序号代表为最后一行。
网友评论