使用numpy加载数据文件时出现问题

2024-05-23 21:43:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我想用scikit训练一个分类器,但是首先我需要加载相应的数据。我正在使用中提供的以下数据文件:

https://archive.ics.uci.edu/ml/machine-learning-databases/yeast/

当我在word中打开它时,它包含以下内容:

ADT1_YEAST  0.58  0.61  0.47  0.13  0.50  0.00  0.48  0.22  MIT
ADT2_YEAST  0.43  0.67  0.48  0.27  0.50  0.00  0.53  0.22  MIT
ADT3_YEAST  0.64  0.62  0.49  0.15  0.50  0.00  0.53  0.22  MIT
AAR2_YEAST  0.58  0.44  0.57  0.13  0.50  0.00  0.54  0.22  NUC

每个文件用双空格隔开,每行用回车符隔开。你知道吗

我想用以下命令来阅读它:

f=open("yeast.data")
data = np.loadtxt(f,delimiter=" ")

最后,我希望能够使用以下方法:

X = data[:,:-1]  # select all columns except the last
y = data[:, -1]   # select the last column

使用说明:

X_train, X_test, y_train, y_test = train_test_split(X, y)

但当我试图阅读时,出现了以下错误:

ValueError: could not convert string to float: ADT1_YEAST

那么,如何在Python中读取这个文件,以便稍后使用mlpclassizer呢?你知道吗

谢谢


Tags: 文件the数据testdata分类器mit数据文件
1条回答
网友
1楼 · 发布于 2024-05-23 21:43:09

您可以跳过f=open(...),也可以使用dtype='O'确保numpy将其作为数字和字符串的混合读入。由于链接文件中的数据结构存在一些不一致性,因此最好使用genfromtxt而不是loadtxt

data = np.genfromtxt('yeast.data',dtype='O')

>>> data
array([[b'ADT1_YEAST', b'0.58', b'0.61', ..., b'0.48', b'0.22', b'MIT'],
       [b'ADT2_YEAST', b'0.43', b'0.67', ..., b'0.53', b'0.22', b'MIT'],
       [b'ADT3_YEAST', b'0.64', b'0.62', ..., b'0.53', b'0.22', b'MIT'],
       ..., 
       [b'ZNRP_YEAST', b'0.67', b'0.57', ..., b'0.56', b'0.22', b'ME2'],
       [b'ZUO1_YEAST', b'0.43', b'0.40', ..., b'0.53', b'0.39', b'NUC'],
       [b'G6PD_YEAST', b'0.65', b'0.54', ..., b'0.53', b'0.22', b'CYT']], dtype=object)

>>> data.shape
(1484, 10)

您可以在调用genfromtxt(请参见documentation)时更改数据类型,也可以手动更改它们,如下所示:

data[:,0] = data[:,0].astype(str)
data[:,1:-1]= data[:,1:-1].astype(float)
data[:,-1] = data[:,-1].astype(str)

>>> data
array([['ADT1_YEAST', 0.58, 0.61, ..., 0.48, 0.22, 'MIT'],
       ['ADT2_YEAST', 0.43, 0.67, ..., 0.53, 0.22, 'MIT'],
       ['ADT3_YEAST', 0.64, 0.62, ..., 0.53, 0.22, 'MIT'],
       ..., 
       ['ZNRP_YEAST', 0.67, 0.57, ..., 0.56, 0.22, 'ME2'],
       ['ZUO1_YEAST', 0.43, 0.4, ..., 0.53, 0.39, 'NUC'],
       ['G6PD_YEAST', 0.65, 0.54, ..., 0.53, 0.22, 'CYT']], dtype=object)

相关问题 更多 >