iT邦幫忙

0

Sklearn讀取自定的CSV k-means範例修改

數據集的使用,常常令人一頭霧水,舉例來說,iris dataset這個最常用的資料集。
用一行代碼就可以把資料集放進來了
iris = datasets.load_iris()
可是它到底長什麼樣子?
官方說明 給道指令 iris.DESCR() 就會列出一堆文字說明。
不過還是一頭霧水,看不到真面目。
原來,iris.csv是安裝完sklean之後,就放在你的資料夾裡的東西。
在安裝Anaconda3位置下x32 x64不同\lib\site-packages\sklean\datasets\data內
Iris.csv 打開來看,長這樣:
https://ithelp.ithome.com.tw/upload/images/20210904/201113733PRdVa95DO.jpg
疑…欄位名稱怪怪的,原來第一列不是欄位名稱。
它意思是說有150筆資料,前4個欄位是特徵,
第五欄是結果target (三個數字代表三種品種:setosa、versicolor、virginica)。

我們把它改成看得懂的方式:
https://ithelp.ithome.com.tw/upload/images/20210904/20111373PFGSMqDQDN.jpg
那麼,該如何讀取這個csv ?

我們把sklearn官網範例 K-means clustering 略做修改,讀取我們的irisC.csv ,其它的碼不變。

原先範例之讀取方式:
iris = datasets.load_iris()
X = iris.data # 大X 是四項特徵
y = iris.target # 小y 是target

iris = datasets.load_iris()
X = iris.data
y = iris.target

我們的讀取方式:

#--- modified part 
#--- 讀取自定的 irisC.csv
iris = np.genfromtxt("irisC.csv",delimiter=',',dtype=np.float64) 
r,c  = iris.shape
print(f'row: {r} columns: {c}')                # row 0 is header
X = iris[1:,0:4]          # X.dtype float64 
#print(X[0,:])            # X 0~3 column contents
y = iris[1:,4]
y = np.array(y,dtype= np.int32)
print(f'target type : {y[:].dtype}')         # y.dtype int32

#--- 載入欄位名稱 ------
#--- 問題是 np 已設定為 dtype float64 ,所以header讀出來是 nan 無法使用
#--- 所以重新再讀一次,使用 Unicode string type 'U'
#--- 此處只是讀出欄位名稱,並未使用它
irisH = np.genfromtxt('irisC.csv',delimiter=',',dtype='U')
fld = []
# 首列是欄位名稱
for n in range(0,5):
    fld.append(irisH[0,n])
    
print('欄位名稱 :',fld)
#-------------------------------------

雖然,碼長了點,不過可以自主處理自定的csv檔,也不錯。
其它的範例代碼不動它。

我們修改後的 Source Code + irisC.csv在此


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言