python_从.mat与.xls类型文件中读取数据

从.xls类型文件中读取数据

在写机器学习算法的时候从UCI下载了一些数据,但是格式不是csv,而是.txt/.data,可以先用excel打开数据,在excel中将数据进行分列后导入python进行操作.
这里说说如何在python中进行简单的.xls文件读操作
需要用到的库:

import xlrd

xlrd 0.9.4下载
安装:下载后解压,在win7下打开cmd,使用cd将路径改为xlrd 0.9.4所在路径,使用python setup.py install 进行装完了。
我在http://archive.ics.uci.edu/ml/datasets/Breast+Cancer+Wisconsin+%28Diagnostic%29下载了胸腺细胞数据,数据结构是569*32,其中每行是一个细胞样本的数据,第一列是细胞编号,第二列是细胞类型(1为benign良性,-1为malignant恶性),第3列到第32列是细胞的特征数据,比如:半径,纹理,周长等等。如下图所示:

数据格式

文件存为:wdbc.xls。

1.读取xls文件

安装好xlrd库后,首先将xls文件读取到python里

book = xlrd.open_workbook("wdbc.xls")
#book.nsheets可以查看到在Book对象中的文件有多少个worksheet
#book.sheet_names()可以查看sheet的名字,结果[u'wdbc']
2.取出xls的sheet
table = book.sheet_by_index(0)#通过索引顺序获取
#table = book.sheet_by_name(u'wdbc')#通过名称获取
3,获取sheet的行列数
#获取行数,结果为569
nrows = table.nrows
#获取列数,结果为32
ncols = table.ncols
4.取出行列中数据

这里我们想分别取出细胞类型(label)数据和细胞特性数据(data),第2列为细胞类型(1为benign良性,-1为malignant恶性),第3列到第32列是细胞的特征数据。

a.取label数据
table.col_values(1)
#取行的数据是table.row_values(i)
#可以取出第二列的数据label数据,是list类型,不便于操作,需要将它转化成array类型
label=np.array(table.col_values(1))
#print label.shape,结果为(569,)
b.取data数据

我采用的是使用for循环一列一列的取,从第3类到第32列,每取一列使用append方法添加在list里面,取完后将list转为array。这时得到的array为(30,569),和label不对应,改为一行是一个样本的全部特征值,需要对data取转置

data=[]
for i in range(2,ncols):
    data.append(table.col_values(i))
data=np.array(data)
#data.shape=(30,569)
data=data.T
#data.shape=(569, 30)
其实不用这么麻烦,可以直接把xls存成csv格式,在python中对csv进行操作。
import pandas as pd
data = pd.read_csv("wdbc.csv")

从.mat类型文件中读取数据

matlab中使用的数据可能存成了.mat的格式
在python中如果要使用.mat中的数据,需要使用到

import scipy.io as sio 

在此处我依旧要读取的是.mat文件中的胸腺细胞数据,文件名train.mat,数据结构依旧包括细胞类型(label)数据和细胞特性数据(data)。

1.读取.mat文件
    data_train = sio.loadmat('train.mat')#读出的数据是字典
2.获取.mat文件中的有效数据

要从字典中获得key为label与data的数据

    data_train_label=data_train.get('label')#取出字典里的label
    data_train_data=data_train.get('data')#取出字典里的data
3.将数据转换成需要的格式

这里label是285行的数组,data该为(285,30)的数组

    data_train_label=data_train_label.reshape(285,)
    data_train_data=data_train_data.T
#使用.shape方法检验数据是否满足要求

你可能感兴趣的:(python_从.mat与.xls类型文件中读取数据)