Я использую следующий набор данных, который представляет собой двоичный файл из: http://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer-wisconsin/breast-cancer-wisconsin.data
Данные выглядят так:
1350423,5,10,10,8,5,5,7,10,1,4
1352848,3,10,7,8,5,8,7,4,1,4
1353092,3,2,1,2,2,1,3,1,1,2
1354840,2,1,1,1,2,1,3,1,1,2
1354840,5,3,2,1,3,1,1,1,1,2
1355260,1,1,1,1,2,1,2,1,1,2
1365075,4,1,4,1,2,1,1,1,1,2
1365328,1,1,2,1,2,1,2,1,1,2
1368267,5,1,1,1,2,1,1,1,1,2
1368273,1,1,1,1,2,1,1,1,1,2
1368882,2,1,1,1,2,1,1,1,1,2
Бинарный файл имеет 699 таких строк.
Затем я использую приведенный ниже код, чтобы получить данные из двоичного файла, сохраненного как «sample.data», и сохранить его в массиве 2D numpy:
import numpy as np
def main():
dtype = np.dtype('i8')
b = np.fromfile('sample.data', dtype=dtype)
ndata = np.array(b)
print(ndata.shape)
main()
Я хочу получить массив (699,11), т.е. каждую строку из двоичного файла в виде строки numpy и каждый элемент, разделенный запятой, как элемент строки numpy.
что я могу сделать здесь, чтобы добиться того же?
Изменен вопрос, чтобы отразить, как выглядит двоичный файл.
это текстовый файл, вы можете использовать np.loadtxt('sample.data', delimiter=',', dtype=np.object)
, или лучше использовать панды для таких случаев.
Вы не можете с пользой прочитать число вроде 1350423
как int8
, оно требует слишком много байтов и будет переполнено. Есть еще один файл данных, который вы можете использовать, смотрите мой ответ.
Я скачал файл http://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer-wisconsin/unformatted-data и сделал так:
ndata = np.genfromtxt('unformatted-data', skip_header=16, delimiter=',')
Массив ndata
имеет форму (699, 11).
Будьте осторожны, потому что там есть разные группы данных (в файле есть комментарии, которые numpy
игнорирует), и может не иметь смысла смешивать их все вместе.
неработающей ссылке; вам нужно знать информацию о том, как этот массив был сохранен и, возможно, потребуется изменить его форму: b = b.reshape(699, 11)