2014-01-25 2 views
1

У меня есть большой файл csv ~ 90k строк и 355 столбцов. Первые 354 столбца соответствуют наличию разных слов, показывающих числовое значение 1 или 0 и последний столбец.numpy неправильная форма импортированных данных и разделение значения y

Например:

table, box, cups, glasses, total 
1,0,0,1,30 
0,1,1,1,28 
1,1,0,1,55 

Когда я использую:

d = np.recfromcsv('clean.csv', dtype=None, delimiter=',', names=True) 
d.shape 
# I get: (89460,) 

Так что мой вопрос:

  1. Как получить 2d массив/матрицы? Это имеет значение?
  2. Как я могу выделить столбец «total», чтобы создать поезд, cross_validation и тестовые наборы и обучить модель?

ответ

0

Ok после того, как много и прибегая к помощи тратить время это то, что кто-то пытается получить NumPy из пути, чтобы они могли читать CSV и получить с Scikit Learn нужно сделать:

# Say your csv file has 10 columns, 1-9 are features and 10 
# is the Y you're trying to predict. 
cols = range(0,10) 
X = np.loadtxt('data.csv', delimiter=',', dtype=float, usecols=cols, ndmin=2, skiprows=1) 
Y = np.loadtxt('data.csv', delimiter=',', dtype=float, usecols=(9,), ndmin=2, skiprows=1) 
# note how for Y the usecols argument only takes a sequence, 
# even though I only want 1 column I have to give it a sequence. 
3

np.recfromcsv возвращает 1-мерный номер record array.

Если у вас есть структурированный массив, вы можете получить доступ к столбцам по названию поля:

d['total'] 

возвращает столбец итогов.

Вы можете получить доступ строк с использованием целочисленного индексации:

d[0] 

возвращает первую строку, например.


Если вы хотите, чтобы выбрать все столбцы, кроме последней строки, то вы бы лучше использовать массив 2D равнину NumPy. С простым массивом NumPy (в отличие от структурированного массива), вы можете выбрать все строки, за исключением последнего на использование целой индексации:

Вы можете использовать np.genfromtxt для загрузки данных в 2D массив:

import numpy as np 

d = np.genfromtxt('data', dtype=None, delimiter=',', skiprows=1) 
print(d.shape) 
# (3, 5) 
print(d) 
# [[ 1 0 0 1 30] 
# [ 0 1 1 1 28] 
# [ 1 1 0 1 55]] 

Это выбрать последний столбец:

print(d[:,-1]) 
# [30 28 55] 

Это выбрать все, кроме последнего столбца:

print(d[:,:-1]) 
# [[1 0 0 1] 
# [0 1 1 1] 
# [1 1 0 1]] 
+0

Благодаря мат я получил, что далеко. Проблема в том, как мне получить все остальные столбцы отдельно от последнего столбца? – holografix

+0

Nitpick: все массивы записей *, возвращаемые 'recfromcsv' *, являются одномерными. Они не все 1-й вообще. –

+0

Не знаю, что вы имели в виду под этим Уорреном. Не могу поверить, что это трудно выбрать диапазон колонок в numpy! Не могу ли я сделать что-то вроде X = d [:, 0: 3]; Y = d [:, 4]?! – holografix

Смежные вопросы