Классификация таблиц Python - PullRequest
0 голосов
/ 26 марта 2011

У меня есть текстовый файл (test.data), который содержит некоторые значения и имя класса, например,

4.5,3.5,U1
4.5,10.5,U2
4.5,6,U1
3.5,10.5,U2
3.5,10.5,U2
5,7,U1
7,6.5,U1

Мне нужно классифицировать эти данные по строкам (матрице), где 1,2 строки и т. Д.это данные, последний класс.Поэтому я начал с этого кода:

reader = csv.reader(open('test.data', 'r'))
result = []
for row in reader:
    result.append(row)
print result

output:

[['4.5', '3.5', 'U1'], ['4.5', '10.5', 'U2'], ['4.5', '6', 'U1'], ['3.5', '10.5', 'U2'], ['3.5', '10.5', 'U2'], ['5', '7', 'U1'], ['7', '6.5', 'U1']]

Все это работает нормально, но теперь мне нужно из этих данных сделать матричную классификацию.В этом случае я хочу сделать матрицу:

test data=[data1, data2,.....,class name1]
test data2=[data1, data2,.....,class name2]...

Мне нужна эта "матрица" (данные испытаний, данные испытаний2) , потому что я буду выбирать из каждых данных испытаний просто 2/3 данные, которые будут называться " choosen ", остальные 1/3 данные должны оставаться в данных теста, ....

Такчто мне нужно в качестве вывода:

choosen=[data,data,......class name1]         # 2/3 from every **test.data**
test data=[data1, data2,.....,class name1]    # other 1/3 from test data
test data2=[data1, data2,.....,class name1]   # other 1/3 from test data 2

.

.,,.

.

Большое спасибо за помощь


EDIT2:

Если я использую ваш код, яполучить:

{
    'U1': [
              ['4.5','3.5'],
              ['4.5','6'],
              ['5','7'],
              ['7','6.5']
          ],
    'U2': [
              ['4.5','10.5'],
              ['3.5','10.5'],
              ['3.5','10.5']
          ]
}

Но у меня не каждый раз, когда эти данные:

4.5,3.5,U1
4.5,10.5,U2
4.5,6,U1
3.5,10.5,U2
3.5,10.5,U2
5,7,U1
7,6.5,U1

У меня также:

4.5,3.5,4.5,10.5, U1
3.5,10.5,3.5,10.5,U2
4.5,12.5,3.5,12.5,U2

...... (поэтому я не знаю, что класс находится во второй строке, как вы пишете в своем коде), но я знаю, что последняя строка - это CLASS

Так как я могу изменить ваш код:

reader = csv.reader(open('test.data', 'r'))
result = {}
for row in reader:
    uclass=row[2]                      #-------> must be last row not second !!!!
    if result.has_key(uclass):
        result[uclass].append([row[0],row[1]])   #---->not just 2 row's, on other data I have for example 5 rows..
    else:
        result[uclass]=[[row[0],row[1]]]        #---->not just 2 row's, on other data I have for example 5 rows..
print repr(result)

1 Ответ

1 голос
/ 26 марта 2011

Редактировать: Фрагмент исходного кода изменен для обработки ввода N-столбца (последний класс) Это требование было упомянуто ФП в последующем ответе.

reader = csv.reader(open('test.data', 'r'))
result = {}
for row in reader:
    uclass=row[-1]
    if result.has_key(uclass):
        result[uclass].append(row[0:-1])
    else:
        result[uclass]=row[0:-1]
print repr(result)

Я все еще не совсем уверен насчет второй половины вашей проблемы. Возможно, чего-то не хватает в том, как вы это объяснили.

Если я правильно понимаю, вы хотите разные списки для каждого класса?

Если это так, то словарь должен делать то, что вы хотите:

reader = csv.reader(open('test.data', 'r'))
result = {}
for row in reader:
    uclass=row[2]
    if result.has_key(uclass):
        result[uclass].append([row[0],row[1]])
    else:
        result[uclass]=[[row[0],row[1]]]
print repr(result)

результат будет выглядеть так:

{
    'U1': [
              ['4.5','3.5'],
              ['4.5','6'],
              ['5','7'],
              ['7','6.5']
          ],
    'U2': [
              ['4.5','10.5'],
              ['3.5','10.5'],
              ['3.5','10.5']
          ]
}

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

someList[<start>:<end>:<skip>]

так в списке, как:

someList=[0,1,2,3,4,5,6,7,8,9]

с использованием пропуска, например:

someList[0:10:2]

дает:

[0,2,4,6,8]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...