Из проекта я получаю список словарей, которые выглядят так:
METTS MARK = {'salary': 365788, 'to_messages': 807, 'deferral_payments': 'NaN', 'total_payments': 1061827, 'exercised_stock_options': 'NaN', 'bonus': 600000, 'limited_stock' : 585062, «shared_receipt_with_poi»: 702, «limited_stock_deferred»: «NaN», «total_stock_value»: 585062, «расходы»: 94299, «loan_advances»: «NaN», «from_messages»: 29, «прочее»: 1740, « from_this_person_to_poi ': 1,' poi ': False,' Director_fees ':' NaN ',' deferred_income ':' NaN ',' long_term_incentive ':' NaN ',' email_address ':' mark.metts@enron.com ',' from_poi_to_this_person ': 38}
Что я хочу сделать, это взять каждое из значений, масштабировать его, заменить значение «NaN» на 0, а затем вернуть его на свое законное место в словаре.
Код, который я пробовал, выглядит следующим образом:
Загрузить словарь, содержащий набор данных
with open("final_project_dataset.pkl", "r") as data_file:
data_dict = pickle.load(data_file)
Ключ в наборе данных с именем total создавал явный выброс, поэтому я удалил его
del data_dict["TOTAL"]
Интуитивно выбирая мои функции
my_features = [
'poi',
'salary',#
'bonus',#
'exercised_stock_options',#
'total_stock_value',#
'total_payments',
'expenses',
'loan_advances',#
'deferral_payments',
'deferred_income',
'restricted_stock',#
'restricted_stock_deferred',
'long_term_incentive',#
'shared_receipt_with_poi',#
#'from_this_person_to_poi',
#director_fees',
#'from_messages',
#'to_messages',
#'from_poi_to_this_person'
]
keys = data_dict.keys()
values = data_dict.values()
замена значений NaN на 0 значений
list_of_values = []
for key in keys:
tmp_list = []
for feature in my_features:
try:
data_dict[key][feature]
except KeyError:
print "error: key ", feature, " not present"
value = data_dict[key][feature]
if value=="NaN":
value = 0
tmp_list.append( float(value) )
list_of_values.append(tmp_list)
функция масштабирования с помощью скейлера min / max
from sklearn.preprocessing import MinMaxScaler
data_array = np.array(list_of_values)
scaler = MinMaxScaler()
rescaled_data = scaler.fit_transform(data_array)
Итак, теперь у меня есть список списков, который выглядит следующим образом:
[0. 0,32916568 0,075 0,01279963 0,01025327
0,41221264 0,01569801 1. 0,18366453 0,10365427
0. 0.12715088]
Я хочу перенести эти измененные значения в словарь с соответствующими функциями ... Это код, который я написал:
my_data_dict = []
for key in keys:
key = {}
for x in range( len(rescaled_data) ):
for count in range( len(my_features) ):
key[ my_features[count] ] = rescaled_data[x][count]
my_data_dict.append(key)
Но я получаю длинный список словарей с одинаковыми значениями .. например:
{'salary': 0,24744478779905296, 'deferral_payments': 0,01569801010492397, 'total_payments': 0,01228550157492107, 'loan_advances': 0,0, 'бонус': 0,075, 'limited_stock_detockred': 0,103679 '361: 366 068,668) 689%: всего: 0 038 365 361: 0688: 369: 0688: 361: 0688: 361: 0,68: 0,668: 0,668: 0,668: 036: 0: 0: 0: 8: 0: 0: 0: 0: 0: 0: 0: 0: 0: 0: 0: 0: 89: 0: 89: 0: 89: 0: 89: 0: 89: 0: 0: 0: 0: 0: 0: 0: 0: 0: 0: 0: 0: 0: 0: 0: 0: 0: 0: 0: 0: 0: 0: 0: 0: 0: 0: 0: 0: 0: 0: 0: 0: 0: 0: 0: 0: 0: 0: 0. 0.550692201098954, 'exercised_stock_options': 0.011200759837784508, 'poi': 1.0, 'deferred_income': 1.0, 'shared_receipt_with_poi': 0.1583046549538127, 'limited_stock': 0.17265209213492153} 061 * 10313803803% в течение длительного времени: 0,013% 1031%, т.
{'salary': 0,24744478779905296, 'deferral_payments': 0,01569801010492397, 'total_payments': 0,01228550157492107, 'loan_advances': 0,0, 'бонус': 0,075, 'limited_stock_detockred': 0,103679 '361: 366 068,668) 4906868689 0.550692201098954, 'exercised_stock_options': 0.011200759837784508, 'poi': 1.0, 'deferred_income': 1.0, 'shared_receipt_with_poi': 0.1583046549538127, 'limited_stock': 0.17265209213492153} 061 * 10313103, 1031%, 10113113803_1803_1803803_1803_1803_1803_1803_1803_1803_380_113_113_311003_1803_1803_1803_311_1803_311_1803_311_1803_1003_180_113_113_113_1803313_3113113 0313 10 10 10 10 10 10 15 15 153 0833 10313,183113113113 103 0313 3 103 3 831 3 8 8 8 8 8 8 8 3 8 3 3 3 за 3 года в течение долгих лет ', в долг.
Как мне взять ключи из data_dict (старый словарь), изменить их данные и сложить в новый словарь?