python中從外部讀入資料並進行相應轉換
阿新 • • 發佈:2019-02-18
在機器學習過程中,離不開大量的資料的訓練和測試,而第三方庫中所攜帶的資料庫數量又是有限,當我們需要使用自己的資料時,如何將資料從外部讀入,並將其轉化為訓練資料和測試資料?
本文將介紹一種資料讀入及轉化方式,本文以csv格式的檔案為資料集作為例子進行讀取測試。iris.csv資料集
(ps,若資料集需要積分,百度雲連結)
首先看看iris.csv資料集長什麼樣子
其為150*4的資料集,共150個樣本,4個特徵,最後一列為所屬類別,現在我將取第一列和第三列的特徵,作為訓練樣本。
實現:
import numpy as np
#open the file and read the data
path="E:\pythona\sklearn\iris.csv" #檔案所在路徑
f=open(path,'r',encoding='utf-8')
traindata=[] #存放訓練資料
label=[] #存放測試資料
for line in f:
thisline=line.split(",")
traindata.append([thisline[0],thisline[3]]) #train sets
label.append(thisline[4].replace("\n" ,"")) #target sets
至此得到了初始化的資料集,list型別
可以看出此時的資料存在幾個問題:
1.資料比較亂,不方便觀察
2.把開頭索引部分也包括進去了,影響資料
3.目前資料是字元型,要將其轉化成浮點型才能進行資料的下一步操作
面對這些問題,解決辦法如下
1.首先去除無關部分索引
2.將列表轉化成陣列
3.將陣列中的元素有字元型轉化成浮點型
程式碼實現
traindata=traindata[ 1: ][:] #去除無關行資料
X=np.array(traindata) #將列表轉化成陣列
n_samples=X.shape [0] #樣本行數
n_features=X.shape[1] #樣本列數
P=np.zeros((n_samples,n_features),np.float32)#存放資料
for i in range(n_samples):
for j in range(n_features):
P[i][j]=float(X[i][j]) #轉化成float型別
執行結果如下:
此時看起來就要舒服很多!
貼上原始碼:
import numpy as np
path="E:\pythona\sklearn\iris.csv"
f=open(path , "r" , encoding="utf-8")
traindata=[]
label=[]
for line in f:
thisline=line.split(",")
traindata.append([thisline[0],thisline[3]])
label.append(thisline[4].replace("\n",""))
traindata=traindata[1:][:]
label=label[1:]
X=np.array(traindata)
Y=np.array(label)
#build up the trainset
n_samples=X.shape[0]
n_features=X.shape[1]
P=np.zeros((n_samples,n_features),np.float)
for i in range(n_samples):
for j in range(n_features):
P[i][j] = round(float(X[i][j]),2)
print("trainset:" ,P)
#build up the targetset
Z=np.zeros((n_samples,1))
for i in range(150):
Z[i]=int(Y[i])
print("------------------------------------")
print("targetset:",Z)
以上便是關於資料讀取的一點經驗總結,歡迎大家一起交流討論!