1. 程式人生 > >python中從外部讀入資料並進行相應轉換

python中從外部讀入資料並進行相應轉換

在機器學習過程中,離不開大量的資料的訓練和測試,而第三方庫中所攜帶的資料庫數量又是有限,當我們需要使用自己的資料時,如何將資料從外部讀入,並將其轉化訓練資料測試資料

本文將介紹一種資料讀入及轉化方式,本文以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)

以上便是關於資料讀取的一點經驗總結,歡迎大家一起交流討論!