- 掌握用文本文件和CSⅴ文件准備訓練數據
- 掌握對數據列和非數據列的處理
- 掌握從文件中加載訓練數據
用文件准備訓練數據
純文本文件
- 純文本文件(.txt):只保存文本信息的文件
- 相比Word、PDF等格式文件較小
- 相比二進制格式存儲數據文件稍大(易讀性較好)
數據的數字化
數據格式
訓練數據的格式
數據整理
小明,90,80,70,0
小紅,98,95,87,1
小王,99,99,99,1
小華,80,85,90,0
非數字項的清理
訓練數據的一般格式
純文本文件,文件編碼是 UTF-8,Excel 軟件,識別 CSV 文件為表格並編輯。
-
CSV( Comma-Separated Values)格式指的是文件中每行是一條數據,每行的多個數值間用逗號分隔開,例:
1,2,3,4 3.25,9.5,8.7,1.34
-
CSV 文件中一般每行的數據項數應該是一樣的
-
CSV 文件可以被 Excel 軟件識別為表格並編輯
CSV 文件處理數據
把文件另存為 data.csv。
加載文件中的訓練數據
import numpy as np
wholeData = np.loadtxt('data.txt', delimiter=',', dtype=np.float32)
print(wholeData)
loadtxt 函數的 3 個參數:
- 要讀取的文件名
- 數據項之間用什么字符隔開
- 讀取的數據類型
從非當前目錄加載訓練數據,使用絕對文件路徑。
np.loadtxt('C:\ml\data.txt', delimiter=',', dtype=np.float32)
舍棄非數字列
import numpy as np
import pandas as pd
fileData = pd.read_csv('data.csv', dtype=np.float32, header=None, usecols=(1,2,3,4))
wholeData = fileData.as_matrix()
print(wholeData)
usecols=(1,2,3,4)
只保留第 1、2、3、4 列,即丟棄第 0 列(注意排序是從0開始)- fileData.as_matrix() 函數:將表格數據轉換為二維數組
非數字列與數字列的轉換
90,80,70,否
98,95,87,是
99,99,99,是
80,85,90,否
import numpy as np
import pandas as pd
fileData = pd.read_csv('data.csv', dtype=np.float32, header=None, converters={(3):lambda s:1.0 if s=='是' else 0.0})
wholeData = fileData.as_matrix()
print(wholeData)
- 使用 converter 來轉換第 3 列為 0 或 1 的數字。
- lambda - 匿名函數
90.80,70,0
98,95,87,1
99,99,99,1
80,85,90,0
把序號為 1 的列(第 2 列)的數字都減去 10。
fileData = pd.read_csv('data.csv', dtype=np.float32, header=None, converters={(1):lambda s:float(s)-10})
把序號為 2 的列(第三列)都變成 0。
fileData = pd.read_csv('data.csv', dtype=np.float32, header=None, converters={(2):lambda s:0,(3):lambda s:1})
分拆數據喂給神經網絡
# ...
fileData = pd.read_csv('data.csv', dtype=np.float32, header=None)
wholeData = fileData.as_matrix()
rowCount = int(wholeData.size/wholeData[0].size)
# ...
for i in range(2):
for j in range(rowCount):
result = sess.run(
[train, x, yTrain, wn, b, n2, y, loss],
feed_dict={x:wholeData[j][0:3], yTrain:wholeData[j][3]}
)
print(result)
二維數組的第一維表示行,第二維代表列,wholeData[j][0:3]
表示第j行的前3個數字組成的向量。wholeData[j][3]
表示第j行的第4個數
字,是一個標量。
練習
- 嘗試用文本文件准備一個每行有 5 項數據的訓練數據集,並讀取其中的內容,同時舍棄掉第 3 列的數據。
- 將上一題中准備的訓練數據讀取后,將第 3 列改為一個隨機數而非丟棄。