Я работаю над домашним заданием, с которым у меня возникли значительные проблемы. Концептуально я хочу взять текстовый файл десяти категорий в 5000 записях и преобразовать в двоичную форму все уникальные функции в этом наборе данных (выходит на 232). Затем я хочу создать массив numpy из этого, который будет матрицей 5000 x 232 только с 0 и 1. Затем я хочу применить это к тестовому набору данных с 1000 записями. Однако этот набор тестовых данных имеет несколько функций (не столбцов), которых не было в оригинале. Я не могу создать новую двоичную матрицу 1000 x 232, потому что не могу придумать способ игнорировать новые данные.
Набор данных выглядит так:
45, Federal-gov, Bachelors, Married-civ-spouse, Adm-clerical, White, Male, 45, United-States, <=50K
33, Private, 5th-6th, Married-spouse-absent, Transport-moving, Other, Male, 20, El-Salvador, <=50K
19, Private, Some-college, Never-married, Transport-moving, White, Male, 40, United-States, <=50K
Пока что я прочитал оба файла и преобразовал их в объекты карты, а затем создал словарь пар (ключ, значение), которые представляют собой эквиваленты столбца: значения. Затем он был применен к набору данных, чтобы создать набор данных всех чисел c, где с каждой из записей был связан список из десяти чисел. Однако попытка сделать то же самое со вторым набором данных не сработала.
Это код, который я использовал до сих пор:
import numpy as np
train = map(lambda s: s.strip().split(", "), open('income.train.txt').readlines())
dev = map(lambda s: s.strip().split(", "), open('income.dev.txt').readlines())
mapping = {}
new_train = []
for row in train:
new_row = []
for j, x in enumerate(row):
feature = (j, x)
if feature not in mapping:
mapping[feature] = len(mapping)
new_row.append(mapping[feature])
new_train.append(new_row)
Все до этого момента работает, следующий бит это то, что выдает ошибку.
new_dev = []
for row in dev:
new_row = []
for j, x in enumerate(row):
feature = (j,x)
if feature not in mapping:
feature = (None, None)
new_row.append(mapping[feature])
new_dev.append(new_row)
Это работает, пока не будет достигнуто значение, которого не было в словаре сопоставления (я знаю это, поскольку существует частичный набор данных new_dev, который имеет первые 125 записей, поэтому 126-я является первой с новым значением). Полученная ошибка всегда связана со строкой feature = (None, None) (KeyError: (None, None)). Я попробовал несколько других вариантов (только один None, (0,0) и т. Д. c.), Но все безрезультатно.
Мне было очень трудно набрать asp, и я я уверен, что упускаю что-то простое, любая помощь очень ценится.