Загрузите UCI ionosphere.data и сохраните его как массив numpy - PullRequest
0 голосов
/ 23 марта 2020

Я хочу загрузить и обработать набор данных ионосферы UCI, доступный по этой ссылке.

Моя python программа загружает файл ionosphere.data, используя запрос get. Я храню данные в виде двоичного файла (поэтому я не уверен, что окончание .data все еще допустимо).

  import requests

  r = requests.get(url, stream=True)
  chunkSize = 1024

  with open("ionosphere.data", 'wb') as f:
        for data in r.iter_content(chunkSize):
            f.write(data)

Теперь, когда у меня есть данные, я хочу прочитать их и сохранить в массиве numpy:

with open(filePath, 'rb') as f:
    data = f.read()
    return np.frombuffer(data, dtype=np.uint8).reshape(351, 34)

На сайте UCI говорится, что данные хранятся действительные числа. Вот почему я даю dtype=np.uint8. Кроме того, есть 351 экземпляр с 34 атрибутами в каждом. Однако, по-видимому, данные немного отличаются, так как при выполнении я получаю ошибку:

"ValueError: невозможно преобразовать массив размером 76467 в форму (351,35)"

Я действительно не понимаю Не знаю, почему мой массив имеет размер 76467. В файле 351 строка и 35 столбцов. Последний столбец содержит строку «g» для хороших и «b» для плохих данных. Интересно, что значения в столбцах с 1 по 34, однако, являются значениями от 0 до 1 (по крайней мере, когда я открываю ionosphere.data в notepad ++). Это говорит о том, что мой dtype не является целым числом. Я пытался изменить? dtype=np.float32, но это выдает ошибку:

«ValueError: размер буфера должен быть кратным размеру элемента»

И, я думаю, я знаю, что не так: тип dtype является многомерным. Вероятно, плавающие в столбцах 1 - 34 и строка в столбце 35. Ну, это несколько проблематично c. Я могу хранить только значения одного и того же dtype в массиве numpy. Я мог бы хранить столбцы 1 - 34 в одном массиве и столбец 35 в другом. Но подходит ли для этого метод np.frombuffer?

...