数据集的使用,常常令人一头雾水,举例来说,iris dataset这个最常用的资料集。
用一行代码就可以把资料集放进来了
iris = datasets.load_iris()
可是它到底长什么样子?
官方说明 给道指令 iris.DESCR() 就会列出一堆文字说明。
不过还是一头雾水,看不到真面目。
原来,iris.csv是安装完sklean之后,就放在你的资料夹里的东西。
在安装Anaconda3位置下x32 x64不同\lib\site-packages\sklean\datasets\data内
Iris.csv 打开来看,长这样:
疑…栏位名称怪怪的,原来第一列不是栏位名称。
它意思是说有150笔资料,前4个栏位是特徵,
第五栏是结果target (三个数字代表三种品种:setosa、versicolor、virginica)。
我们把它改成看得懂的方式:
那么,该如何读取这个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.datay = iris.target
我们的读取方式:
#--- modified part #--- 读取自定的 irisC.csviris = np.genfromtxt("irisC.csv",delimiter=',',dtype=np.float64) r,c = iris.shapeprint(f'row: {r} columns: {c}') # row 0 is headerX = iris[1:,0:4] # X.dtype float64 #print(X[0,:]) # X 0~3 column contentsy = 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在此