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序號代表為最后一行。