用户特征文件 userFeature.data 每 行 代 表 一 个 用 户 的 特 征 数 据, 格 式 为: “uid|features”,uid 和 features 用竖线“|”分隔。其中 feature 采用 vowpal wabbit(https://github.com/JohnLangford/vowpal_wabbit)格式: “feature_group1|feature_group2|feature_group3|...”。 每 个 feature_group 代表一个特征组,多个特征组之间也以竖线“|”分隔。一个特征组若包括多个值 则以空格分隔,格式为:“feature_group_name fea_name1 fea_name2 …”, 其中 fea_name 采用数据编号的格式。
特征列 属性值 获取
d = {} with open(f, 'r') as fr: for i in fr: l = i.split('|') for ii in l: ll=ii.split(' ') k=ll[0] if k not in d: d[k]=[] for iii in ll[1:]: iii_=int(iii) if int(iii) not in d[k]: d[k].append(iii_) for k in d: l=sorted(d[k],reverse=False) print(k) print(l)
批处理 减小运行时间
d, reduce_chk_counter, reduce_chk_step = {}, 0, 500000 with open(f, 'r') as fr: for i in fr: l = i.split('|') for ii in l: ll = ii.split(' ') k = ll[0] if k not in d: d[k] = [] for iii in ll[1:]: iii_ = int(iii) d[k].append(iii_) reduce_chk_counter += 1 if reduce_chk_counter == reduce_chk_step: reduce_chk_counter = 0 for k in d: d[k] = list(set(d[k])) l = sorted(d[k], reverse=False) print(k) print(l) for k in d: d[k] = list(set(d[k])) l = sorted(d[k], reverse=False) print(k) print(l) res_f = 'toknowit.txt' with open(res_f, 'w') as fw: for k in d: l = sorted(d[k], reverse=False) print(k) print(l) s = '{} {} '.format(k, ','.join(l)) fw.write(s)
将数据冗余至内存,批处理,去重,释放内存
f = 'userFeature.data' # 确定marriageStatus特征列的值 d, d1 = {}, {} with open(f, 'r') as fr: for i in fr: break l = i.split('|') for ii in l: if 'marriageStatus' in ii: k = len(ii) d[k] = ii k = ii.split('marriageStatus')[-1] d1[k] = ii for k in d: print(k, d[k]) for k in d1: print(k, d1[k]) ''' 17 marriageStatus 11 19 marriageStatus 2 13 20 marriageStatus 13 10 16 marriageStatus 0 21 marriageStatus 2 13 9 22 marriageStatus 12 13 9 23 marriageStatus 12 13 10 11 marriageStatus 11 5 13 marriageStatus 5 13 13 10 marriageStatus 13 10 10 marriageStatus 10 15 marriageStatus 15 0 marriageStatus 0 13 15 marriageStatus 13 15 12 13 marriageStatus 12 13 13 marriageStatus 13 6 13 marriageStatus 6 13 2 13 marriageStatus 2 13 13 9 marriageStatus 13 9 6 13 9 marriageStatus 6 13 9 2 13 9 marriageStatus 2 13 9 5 13 9 marriageStatus 5 13 9 12 13 9 marriageStatus 12 13 9 14 marriageStatus 14 12 13 10 marriageStatus 12 13 10 3 marriageStatus 3 15 10 marriageStatus 15 10 8 marriageStatus 8 6 13 10 marriageStatus 6 13 10 5 13 10 marriageStatus 5 13 10 13 10 9 marriageStatus 13 10 9 13 15 10 marriageStatus 13 15 10 2 13 10 marriageStatus 2 13 10 marriageStatus 0 2 5 6 8 9 10 11 12 13 15 ''' d = {} with open(f, 'r') as fr: for i in fr: break l = i.split('|') for ii in l: ll = ii.split(' ') k = ll[0] if k not in d: d[k] = [] for iii in ll[1:]: iii_ = int(iii) if int(iii) not in d[k]: d[k].append(iii_) d, reduce_chk_counter, reduce_chk_step = {}, 0, 500000 with open(f, 'r') as fr: for i in fr: break l = i.split('|') for ii in l: ll = ii.split(' ') k = ll[0] if k == 'uid': continue if k not in d: d[k] = [] for iii in ll[1:]: iii_ = int(iii) d[k].append(iii_) reduce_chk_counter += 1 if reduce_chk_counter == reduce_chk_step: reduce_chk_counter = 0 for k in d: d[k] = list(set(d[k])) l = sorted(d[k], reverse=False) print(k) print(l) for k in d: break d[k] = list(set(d[k])) l = sorted(d[k], reverse=False) print(k) print(l) res_f = 'toknowit.txt' # with open(res_f, 'w') as fw: # for k in d: # l = sorted(d[k], reverse=False) # print(k) # print(l) # s = '{} {} '.format(k, ','.join([str(i) for i in l])) # fw.write(s) cut_l = [] with open(res_f, 'r') as fr: for i in fr: l = i.replace(' ', '').split(',')[0:200] cut_l.append(l) res_f_cut = 'toknowitCUT.txt' with open(res_f_cut, 'w') as fw: for l in cut_l: s = '{} '.format(','.join([str(i) for i in l])) fw.write(s)
age 0,1,2,3,4,5 gender 0,1,2 marriageStatus 0,2,3,5,6,8,9,10,11,12,13,14,15 education 0,1,2,3,4,5,6,7 consumptionAbility 0,1,2 LBS 0,1,2,3,4,6,7,8,9,10,11,12,13,14,15,16,18,19,20,21,23,25,26,27,29,30,31,32,33,35,36,38,39,40,41,42,43,45,46,47,48,49,50,51,52,53,54,55,56,57,60,61,62,63,64,65,66,67,68,69,70,71,72,73,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,91,92,94,95,97,98,99,100,101,102,103,104,105,106,107,108,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,135,137,138,139,142,143,144,145,146,147,149,150,151,152,153,154,155,157,158,159,160,161,163,165,168,170,171,172,173,174,175,176,177,178,179,180,181,183,184,185,186,188,189,190,191,192,193,194,195,197,198,199,200,201,202,203,204,206,208,209,210,211,212,214,215,216,217,218,219,220,222,223,224,225,227,229,232,233,234,235,236 interest1 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122 interest2 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,78,79,80,81,82 interest5 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136 kw1 2,3,8,13,17,19,21,28,29,39,41,42,43,46,56,59,65,68,69,70,71,72,74,86,87,88,90,92,95,100,101,105,106,109,111,112,113,119,121,123,125,131,133,136,139,141,142,143,145,150,152,156,157,162,163,166,169,172,173,174,176,177,180,181,183,184,185,186,191,199,203,204,209,211,214,216,230,235,240,242,243,246,249,260,263,265,268,269,271,272,278,279,283,284,289,291,292,295,302,303,304,307,313,317,321,322,323,331,336,341,343,344,351,354,357,358,359,366,367,369,370,372,373,375,376,377,378,380,381,382,390,391,393,396,401,402,406,407,408,409,411,414,417,423,429,433,434,437,438,441,442,443,449,456,464,465,468,472,473,475,477,478,480,482,485,486,487,495,496,497,504,506,507,511,513,521,522,526,532,536,541,542,546,547,560,561,563,566,567,575,576,578,581,584,588,592,594,604,605,610 kw2 2,6,7,9,10,11,12,14,21,22,23,25,26,30,34,38,40,41,42,43,44,46,47,50,55,56,62,63,66,69,70,71,72,74,75,76,77,78,80,81,84,85,87,89,90,91,94,95,100,112,114,116,117,118,119,121,123,124,127,128,129,130,133,135,137,142,143,144,148,149,151,153,154,156,157,158,163,168,171,174,176,177,180,183,184,186,192,193,195,196,197,200,202,203,215,216,217,219,221,223,228,229,235,237,238,240,241,246,248,250,255,258,260,263,266,269,272,275,276,278,280,286,287,290,294,295,296,297,301,302,303,305,313,317,321,323,327,330,333,334,338,339,340,341,343,344,345,347,354,358,359,363,366,368,369,371,374,375,377,378,380,383,384,386,391,393,394,395,398,399,400,403,404,405,408,409,412,413,417,418,422,427,433,436,438,440,442,445,447,448,451,453,454,455,456,457,459,461,462,463 topic1 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199 topic2 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199 ct 0,1,2,3,4 os 0,1,2 carrier 0,1,2,3 house 1 interest3 1,2,3,4,5,6,7,8,9,10 kw3 1,7,8,10,15,19,25,27,29,36,50,56,63,68,69,74,77,80,88,93,95,101,117,122,123,124,126,132,133,136,138,149,151,152,153,155,157,164,167,171,173,174,181,186,188,190,192,194,197,198,206,209,213,223,228,233,235,248,249,253,263,273,276,278,280,286,288,295,302,303,311,314,316,323,328,331,332,333,336,343,349,362,364,366,370,372,381,385,391,394,399,401,404,411,412,416,420,425,427,431,453,459,464,465,469,470,474,488,499,504,505,508,512,513,523,530,531,534,539,549,559,560,563,566,568,570,574,581,586,588,598,607,610,617,627,630,633,634,635,636,638,645,650,654,655,657,663,668,676,677,681,685,686,687,691,692,694,695,696,699,701,703,705,707,709,719,722,723,725,734,735,737,739,740,742,745,751,755,763,764,769,771,780,785,788,799,800,805,809,818,821,833,835,836,840,851,853,856,860,862 topic3 1,3,4,8,10,11,14,16,18,19,21,22,23,24,25,27,28,30,31,32,33,34,35,37,39,42,43,44,46,47,49,51,53,54,55,56,58,59,60,62,63,65,66,68,69,70,72,75,76,78,79,81,84,87,88,90,92,95,98,99,100,101,102,103,107,108,109,111,112,113,115,116,117,119,120,121,123,124,126,127,129,130,132,133,136,137,138,139,141,142,143,146,148,150,151,154,157,158,159,161,162,164,165,166,167,168,169,171,174,176,177,178,180,182,183,185,186,187,188,190,191,192,193,194,197,198,199,201,202,205,206,207,209,210,211,212,213,214,215,216,217,218,219,220,221,223,226,227,228,232,233,234,235,237,238,240,241,243,251,252,253,255,256,258,259,260,262,264,265,266,267,268,269,270,271,272,273,274,275,278,279,280,282,283,285,287,288,292,297,298,299,301,304,305,306,307,308,309,312,314 interest4 1,2,3,4,5,6,7,8,9,10 appIdAction 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200 appIdInstall 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200
res_f_cut = 'toknowitCUT.txt' # with open(res_f_cut, 'w') as fw: # s = ' '.join([','.join([str(i) for i in l]) for l in cut_l]) # fw.write(s) sparse_num_drop_max, is_odd_line = 50, True with open(res_f_cut, 'r') as fr: for i in fr: l = i.replace(' ', '').split(',') if is_odd_line == True: is_odd_line = False k = l[0] else: is_odd_line = True if len(l) <= sparse_num_drop_max: for ii in l: s = '{}_{}'.format(k, ii) print(s) else: print(k)
age_0 age_1 age_2 age_3 age_4 age_5 gender_0 gender_1 gender_2 marriageStatus_0 marriageStatus_2 marriageStatus_3 marriageStatus_5 marriageStatus_6 marriageStatus_8 marriageStatus_9 marriageStatus_10 marriageStatus_11 marriageStatus_12 marriageStatus_13 marriageStatus_14 marriageStatus_15 education_0 education_1 education_2 education_3 education_4 education_5 education_6 education_7 consumptionAbility_0 consumptionAbility_1 consumptionAbility_2 LBS interest1 interest2 interest5 kw1 kw2 topic1 topic2 ct_0 ct_1 ct_2 ct_3 ct_4 os_0 os_1 os_2 carrier_0 carrier_1 carrier_2 carrier_3 house_1 interest3_1 interest3_2 interest3_3 interest3_4 interest3_5 interest3_6 interest3_7 interest3_8 interest3_9 interest3_10 kw3 topic3 interest4_1 interest4_2 interest4_3 interest4_4 interest4_5 interest4_6 interest4_7 interest4_8 interest4_9 interest4_10 appIdAction appIdInstall
['uid', 'age', 'gender', 'marriageStatus', 'education', 'consumptionAbility', 'LBS', 'interest1', 'interest2', 'interest3', 'interest4', 'interest5', 'kw1', 'kw2', 'kw3', 'topic1', 'topic2', 'topic3', 'appIdInstall', 'appIdAction', 'ct', 'os', 'carrier', 'house'] ['age_0', 'age_1', 'age_2', 'age_3', 'age_4', 'age_5', 'gender_0', 'gender_1', 'gender_2', 'marriageStatus_0', 'marriageStatus_2', 'marriageStatus_3', 'marriageStatus_5', 'marriageStatus_6', 'marriageStatus_8', 'marriageStatus_9', 'marriageStatus_10', 'marriageStatus_11', 'marriageStatus_12', 'marriageStatus_13', 'marriageStatus_14', 'marriageStatus_15', 'education_0', 'education_1', 'education_2', 'education_3', 'education_4', 'education_5', 'education_6', 'education_7', 'consumptionAbility_0', 'consumptionAbility_1', 'consumptionAbility_2', 'LBS_0', 'interest1_0', 'interest2_0', 'interest3_1', 'interest3_2', 'interest3_3', 'interest3_4', 'interest3_5', 'interest3_6', 'interest3_7', 'interest3_8', 'interest3_9', 'interest3_10', 'interest4_1', 'interest4_2', 'interest4_3', 'interest4_4', 'interest4_5', 'interest4_6', 'interest4_7', 'interest4_8', 'interest4_9', 'interest4_10', 'interest5_0', 'kw1_0', 'kw2_0', 'kw3_0', 'topic1_0', 'topic2_0', 'topic3_0', 'appIdInstall_0', 'appIdAction_0', 'ct_0', 'ct_1', 'ct_2', 'ct_3', 'ct_4', 'os_0', 'os_1', 'os_2', 'carrier_0', 'carrier_1', 'carrier_2', 'carrier_3', 'house_1']
f = 'userFeature.data' ''' 17 marriageStatus 11 19 marriageStatus 2 13 20 marriageStatus 13 10 16 marriageStatus 0 21 marriageStatus 2 13 9 22 marriageStatus 12 13 9 23 marriageStatus 12 13 10 11 marriageStatus 11 5 13 marriageStatus 5 13 13 10 marriageStatus 13 10 10 marriageStatus 10 15 marriageStatus 15 0 marriageStatus 0 13 15 marriageStatus 13 15 12 13 marriageStatus 12 13 13 marriageStatus 13 6 13 marriageStatus 6 13 2 13 marriageStatus 2 13 13 9 marriageStatus 13 9 6 13 9 marriageStatus 6 13 9 2 13 9 marriageStatus 2 13 9 5 13 9 marriageStatus 5 13 9 12 13 9 marriageStatus 12 13 9 14 marriageStatus 14 12 13 10 marriageStatus 12 13 10 3 marriageStatus 3 15 10 marriageStatus 15 10 8 marriageStatus 8 6 13 10 marriageStatus 6 13 10 5 13 10 marriageStatus 5 13 10 13 10 9 marriageStatus 13 10 9 13 15 10 marriageStatus 13 15 10 2 13 10 marriageStatus 2 13 10 marriageStatus 0 2 5 6 8 9 10 11 12 13 15 ''' def fw_s(f, s): with open(f, 'w') as fw: fw.write(s) # d 获取一个特征下有哪些值,如果值个数大于1,则考虑拆分该特征为各个子特征 # k_oreder_l 获取一级特征的顺序 res_f = 'toknowit.txt' res_f_k_order = res_f.replace('.', 'KeyOrder.') res_f_cut, children_val_max = res_f.replace('.', 'Cut.'), 50 to_write = True to_write = False if to_write: d, reduce_chk_counter, reduce_chk_step, k_oreder_l = {}, 0, 500000, [] with open(f, 'r') as fr: for i in fr: l = i.replace(' ', '').split('|') k_order_l_this = [] for ii in l: ll = ii.split(' ') k = ll[0] k_order_l_this.append(k) if k == 'uid': continue if k not in d: d[k] = [] # order -->int for iii in ll[1:]: d[k].append(int(iii)) k_oreder_l.append(k_order_l_this) reduce_chk_counter += 1 print(reduce_chk_counter) if reduce_chk_counter % reduce_chk_step == 0: # reduce_chk_counter = 0 for k in d: d[k] = list(set(d[k])) k_oreder_l = [e for i, e in enumerate(k_oreder_l) if k_oreder_l.index(e) == i] # set() TypeError unhashable type:'list' for k in d: d[k] = sorted(list(set(d[k])), reverse=False) k_oreder_l = [e for i, e in enumerate(k_oreder_l) if k_oreder_l.index(e) == i] s = ' '.join(['{} {}'.format(k, ','.join([str(i) for i in d[k]])) for k in d]) fw_s(res_f, s) s = ' '.join(['{} {}'.format(k, ','.join([str(i) for i in d[k][0:children_val_max]])) for k in d]) fw_s(res_f_cut, s) s = ' '.join(['|'.join(l) for l in k_oreder_l]) fw_s(res_f_k_order, s) with open(res_f_k_order, 'r') as fr: ori_feature_l = [i.replace(' ', '').split('|') for i in fr] feature_after_e_d = {} for l in ori_feature_l: for e in l: if e not in feature_after_e_d: feature_after_e_d[e] = [] feature_after_e_d[e] += l[l.index(e) + 1:] feature_after_e_d[e] = list(set(feature_after_e_d[e])) feature_l = [k for k in sorted(feature_after_e_d, key=lambda e: len(feature_after_e_d[e]), reverse=True)] print(feature_l) import re feature_reduce_l = [i if re.search('d', i) is None else i[0:re.search('d', i).endpos - 1] for i in feature_l] # set 破坏了顺序 print(feature_reduce_l) print(list(set(feature_reduce_l))) feature_reduce_l = [e for i, e in enumerate(feature_reduce_l) if feature_reduce_l.index(e) == i] print(feature_reduce_l) sparse_num_drop_max, is_odd_line = 20, True # 特征的属性值 res_d = {} with open(res_f_cut, 'r') as fr: for i in fr: l = i.replace(' ', '').split(',') if is_odd_line == True: is_odd_line = False k = l[0] res_d[k] = [] else: is_odd_line = True if len(l) <= sparse_num_drop_max: for ii in l: res_d[k].append(ii) else: res_d[k].append(0) feature_expand_l = [] feature_l.pop(feature_l.index('uid')) for k in feature_l: feature_expand_l += ['{}_{}'.format(k, i) for i in res_d[k]] print(feature_expand_l) dd = 5
import re, time f = 'userFeature.data' ''' 17 marriageStatus 11 19 marriageStatus 2 13 20 marriageStatus 13 10 16 marriageStatus 0 21 marriageStatus 2 13 9 22 marriageStatus 12 13 9 23 marriageStatus 12 13 10 11 marriageStatus 11 5 13 marriageStatus 5 13 13 10 marriageStatus 13 10 10 marriageStatus 10 15 marriageStatus 15 0 marriageStatus 0 13 15 marriageStatus 13 15 12 13 marriageStatus 12 13 13 marriageStatus 13 6 13 marriageStatus 6 13 2 13 marriageStatus 2 13 13 9 marriageStatus 13 9 6 13 9 marriageStatus 6 13 9 2 13 9 marriageStatus 2 13 9 5 13 9 marriageStatus 5 13 9 12 13 9 marriageStatus 12 13 9 14 marriageStatus 14 12 13 10 marriageStatus 12 13 10 3 marriageStatus 3 15 10 marriageStatus 15 10 8 marriageStatus 8 6 13 10 marriageStatus 6 13 10 5 13 10 marriageStatus 5 13 10 13 10 9 marriageStatus 13 10 9 13 15 10 marriageStatus 13 15 10 2 13 10 marriageStatus 2 13 10 marriageStatus 0 2 5 6 8 9 10 11 12 13 15 ''' def fw_s(f, s): with open(f, 'w') as fw: fw.write(s) # d 获取一个特征下有哪些值,如果值个数大于1,则考虑拆分该特征为各个子特征 # feature_order_l 获取一级特征的顺序 # 原始数据 特征挖掘 # 各个特征的子特征值,各个特征的子特征个数,各个特征的顺序, f_feature = 'toknowit.txt' f_feature_ele_num = f_feature.replace('.', 'EleNum.') f_feature_incomplete, f_feature_complete = f_feature.replace('.', 'Incomplete.'), f_feature.replace('.', 'Complete.') # 原始数据 加工成生产数据 # 将一级特征的子特征升级为一级特征,但是限定原一级特征的子特征可以升级的特征数最大值;该值需结合算力、算法确定 f_reduce, f_output = f_feature.replace('.', 'Reduce.'), f_feature.replace('.', 'Output.') # <---以上生成的文件无参数,数据恒定 # 这个文件是第一阶段的结果文件,含参数文件,故加上时间戳 f_extend = f_feature.replace('.', 'Extend{}.'.format(int(time.time()))) to_write_immutable_file = True # to_write_immutable_file = False if to_write_immutable_file: feature_d, feature_incomplete_rows_l, reduce_chk_counter, reduce_chk_step, = {}, [], 0, 300000 # 打开GB文件,得到2个集合:获取不完整特征序列的集合、特征-特征值的集合 with open(f, 'r') as fr: for i in fr: l = i.replace(' ', '').split('|') feature_incomplete_rows_l_this = [] for ii in l: ll = ii.split(' ') k = ll[0] feature_incomplete_rows_l_this.append(k) if k == 'uid': continue if k not in feature_d: feature_d[k] = [] # order -->int for iii in ll[1:]: feature_d[k].append(int(iii)) feature_incomplete_rows_l.append(feature_incomplete_rows_l_this) reduce_chk_counter += 1 print(reduce_chk_counter) if reduce_chk_counter % reduce_chk_step == 0: # reduce_chk_counter = 0 #从节约内存的角度,应重置为0,测试阶段观察分析进度和数据总数 for k in feature_d: feature_d[k] = list(set(feature_d[k])) feature_incomplete_rows_l = [e for i, e in enumerate(feature_incomplete_rows_l) if feature_incomplete_rows_l.index(e) == i] # subset TEST break for k in feature_d: feature_d[k] = sorted(list(set(feature_d[k])), reverse=False) feature_incomplete_rows_l = [e for i, e in enumerate(feature_incomplete_rows_l) if feature_incomplete_rows_l.index(e) == i] s = ' '.join([','.join(l) for l in feature_incomplete_rows_l]) fw_s(f_feature_incomplete, s) feature_after_e_d = {} for l in feature_incomplete_rows_l: for e in l: if e not in feature_after_e_d: feature_after_e_d[e] = [] feature_after_e_d[e] += l[l.index(e) + 1:] feature_after_e_d[e] = list(set(feature_after_e_d[e])) # 原始一级特征b feature_complete_l = [k for k in sorted(feature_after_e_d, key=lambda e: len(feature_after_e_d[e]), reverse=True)] print(feature_complete_l) s = ' '.join(feature_complete_l) fw_s(f_feature_complete, s) print(feature_complete_l) feature_d_ = {} for feature in feature_complete_l: if feature == 'uid': continue feature_d_[feature] = feature_d[feature] del feature_d feature_d = feature_d_ s = ' '.join(['{} {}'.format(k, ','.join([str(i) for i in feature_d[k]])) for k in feature_d]) fw_s(f_feature, s) s = ' '.join(['{} {}'.format(k, len(feature_d[k])) for k in feature_d]) fw_s(f_feature_ele_num, s) # 原始数据持久化完毕<--- # --->对原始数据做加工,生成新数据 # 0级别特征,将原始一级特征中"kw1,kw2,"合并 feature_reduce_l = [i if re.search('d', i) is None else i[0:re.search('d', i).endpos - 1] for i in feature_complete_l] # set 破坏了顺序 print(feature_reduce_l) print(list(set(feature_reduce_l))) feature_reduce_l = [e for i, e in enumerate(feature_reduce_l) if feature_reduce_l.index(e) == i] print(feature_reduce_l) s = ' '.join(feature_reduce_l) fw_s(f_reduce, s) relative_, absolute_ = 2 / 3, 50 sparse_num_drop_max = min( [absolute_, max(sorted([len(feature_d[k]) for k in feature_d], reverse=False)[0:int(len(feature_d) * relative_)])]) s = ' '.join( ['{} {}'.format(k, ','.join([str(i) for i in feature_d[k][0:sparse_num_drop_max]])) for k in feature_d]) fw_s(f_output, s) # 特征的属性值 feature_extend_d = {} is_odd_line = True with open(f_output, 'r') as fr: for i in fr: l = i.replace(' ', '').split(',') if is_odd_line == True: is_odd_line = False k = l[0] feature_extend_d[k] = [] else: is_odd_line = True if len(l) <= sparse_num_drop_max: for ii in l: feature_extend_d[k].append(ii) else: feature_extend_d[k].append(0) feature_extend_l = [] feature_complete_l.pop(feature_complete_l.index('uid')) feature_extend_l = '|'.join( ['|'.join(['{}_{}'.format(k, str(i)) for i in feature_extend_d[k]]) for k in feature_extend_d]).split('|') print(feature_extend_l) s = ','.join(feature_extend_l) fw_s(f_extend, s) # 生成缩小的数据集,测试spark join 广告特征做广播 # feature_extend_l, f_extend = [], 'toknowitExtend1526836898.txt' # # with open(f_extend, 'r') as fr: # feature_extend_l = [i.replace(' ', '') for i in fr][0].split(',') d = 8
age_0,age_1,age_2,age_3,age_4,age_5,gender_0,gender_1,gender_2,marriageStatus_0,marriageStatus_2,marriageStatus_3,marriageStatus_5,marriageStatus_6,marriageStatus_9,marriageStatus_10,marriageStatus_11,marriageStatus_12,marriageStatus_13,marriageStatus_14,marriageStatus_15,education_0,education_1,education_2,education_3,education_4,education_5,education_6,education_7,consumptionAbility_0,consumptionAbility_1,consumptionAbility_2,LBS_0,LBS_1,LBS_4,LBS_6,LBS_7,LBS_8,LBS_9,LBS_13,LBS_14,LBS_15,LBS_16,LBS_18,LBS_19,LBS_21,LBS_25,LBS_27,LBS_29,LBS_32,LBS_33,LBS_35,LBS_38,LBS_39,LBS_41,LBS_43,LBS_45,LBS_46,LBS_47,LBS_48,LBS_49,LBS_52,LBS_54,LBS_56,LBS_57,LBS_61,LBS_62,LBS_63,LBS_64,LBS_66,LBS_69,LBS_71,LBS_72,LBS_73,LBS_75,LBS_77,LBS_78,LBS_81,LBS_83,LBS_84,LBS_85,LBS_86,interest1_1,interest1_2,interest1_3,interest1_4,interest1_5,interest1_6,interest1_7,interest1_8,interest1_9,interest1_10,interest1_11,interest1_12,interest1_13,interest1_14,interest1_15,interest1_16,interest1_17,interest1_18,interest1_19,interest1_20,interest1_21,interest1_22,interest1_23,interest1_24,interest1_25,interest1_26,interest1_27,interest1_28,interest1_29,interest1_30,interest1_31,interest1_32,interest1_33,interest1_34,interest1_35,interest1_36,interest1_37,interest1_38,interest1_39,interest1_40,interest1_41,interest1_42,interest1_43,interest1_44,interest1_45,interest1_46,interest1_47,interest1_48,interest1_49,interest1_50,interest2_1,interest2_2,interest2_3,interest2_4,interest2_5,interest2_6,interest2_7,interest2_8,interest2_9,interest2_10,interest2_11,interest2_12,interest2_13,interest2_14,interest2_15,interest2_16,interest2_17,interest2_18,interest2_19,interest2_20,interest2_21,interest2_22,interest2_23,interest2_24,interest2_25,interest2_26,interest2_27,interest2_28,interest2_29,interest2_30,interest2_31,interest2_32,interest2_33,interest2_35,interest2_36,interest2_37,interest2_38,interest2_39,interest2_40,interest2_41,interest2_42,interest2_43,interest2_44,interest2_45,interest2_46,interest2_47,interest2_48,interest2_49,interest2_50,interest2_51,interest3_1,interest3_2,interest3_3,interest3_4,interest3_5,interest3_6,interest3_7,interest3_8,interest3_9,interest3_10,interest4_1,interest4_2,interest4_3,interest4_4,interest4_5,interest4_6,interest4_7,interest4_8,interest4_9,interest4_10,interest5_1,interest5_2,interest5_3,interest5_4,interest5_5,interest5_6,interest5_7,interest5_8,interest5_9,interest5_10,interest5_11,interest5_12,interest5_13,interest5_14,interest5_15,interest5_16,interest5_17,interest5_18,interest5_19,interest5_20,interest5_21,interest5_22,interest5_23,interest5_24,interest5_25,interest5_26,interest5_27,interest5_28,interest5_29,interest5_30,interest5_31,interest5_32,interest5_33,interest5_34,interest5_35,interest5_36,interest5_37,interest5_38,interest5_39,interest5_40,interest5_41,interest5_42,interest5_43,interest5_44,interest5_45,interest5_46,interest5_47,interest5_48,interest5_49,interest5_50,kw1_13,kw1_19,kw1_28,kw1_69,kw1_70,kw1_72,kw1_87,kw1_92,kw1_105,kw1_106,kw1_109,kw1_119,kw1_121,kw1_123,kw1_133,kw1_136,kw1_145,kw1_152,kw1_157,kw1_163,kw1_169,kw1_176,kw1_177,kw1_180,kw1_181,kw1_191,kw1_209,kw1_235,kw1_242,kw1_249,kw1_278,kw1_279,kw1_289,kw1_295,kw1_313,kw1_317,kw1_321,kw1_336,kw1_341,kw1_344,kw1_354,kw1_358,kw1_366,kw1_367,kw1_370,kw1_376,kw1_378,kw1_380,kw1_382,kw1_391,kw2_2,kw2_10,kw2_11,kw2_34,kw2_46,kw2_47,kw2_50,kw2_55,kw2_62,kw2_63,kw2_69,kw2_70,kw2_76,kw2_87,kw2_91,kw2_100,kw2_114,kw2_116,kw2_117,kw2_123,kw2_124,kw2_127,kw2_129,kw2_135,kw2_137,kw2_142,kw2_144,kw2_151,kw2_158,kw2_163,kw2_168,kw2_174,kw2_177,kw2_180,kw2_184,kw2_192,kw2_196,kw2_197,kw2_200,kw2_202,kw2_215,kw2_216,kw2_217,kw2_223,kw2_235,kw2_237,kw2_240,kw2_241,kw2_246,kw2_250,kw3_7,kw3_27,kw3_29,kw3_68,kw3_80,kw3_88,kw3_95,kw3_101,kw3_138,kw3_171,kw3_186,kw3_197,kw3_198,kw3_206,kw3_213,kw3_223,kw3_248,kw3_263,kw3_273,kw3_302,kw3_316,kw3_336,kw3_349,kw3_362,kw3_381,kw3_401,kw3_412,kw3_416,kw3_453,kw3_465,kw3_470,kw3_488,kw3_513,kw3_534,kw3_549,kw3_560,kw3_570,kw3_581,kw3_586,kw3_598,kw3_610,kw3_627,kw3_633,kw3_638,kw3_668,kw3_685,kw3_692,kw3_694,kw3_695,kw3_701,topic1_0,topic1_1,topic1_2,topic1_3,topic1_4,topic1_5,topic1_6,topic1_7,topic1_9,topic1_10,topic1_11,topic1_12,topic1_13,topic1_14,topic1_15,topic1_16,topic1_17,topic1_18,topic1_19,topic1_20,topic1_21,topic1_22,topic1_23,topic1_24,topic1_25,topic1_26,topic1_27,topic1_28,topic1_29,topic1_30,topic1_31,topic1_32,topic1_33,topic1_34,topic1_35,topic1_36,topic1_37,topic1_38,topic1_39,topic1_40,topic1_41,topic1_42,topic1_43,topic1_44,topic1_45,topic1_46,topic1_47,topic1_48,topic1_49,topic1_50,topic2_0,topic2_2,topic2_3,topic2_4,topic2_5,topic2_6,topic2_7,topic2_9,topic2_10,topic2_11,topic2_13,topic2_14,topic2_15,topic2_16,topic2_17,topic2_19,topic2_20,topic2_21,topic2_22,topic2_24,topic2_25,topic2_26,topic2_27,topic2_28,topic2_29,topic2_30,topic2_31,topic2_32,topic2_33,topic2_34,topic2_35,topic2_36,topic2_39,topic2_40,topic2_41,topic2_42,topic2_43,topic2_44,topic2_45,topic2_46,topic2_47,topic2_48,topic2_49,topic2_50,topic2_51,topic2_52,topic2_53,topic2_54,topic2_55,topic2_56,topic3_3,topic3_10,topic3_11,topic3_14,topic3_18,topic3_24,topic3_28,topic3_30,topic3_31,topic3_33,topic3_39,topic3_42,topic3_43,topic3_47,topic3_53,topic3_55,topic3_56,topic3_58,topic3_59,topic3_60,topic3_62,topic3_66,topic3_68,topic3_70,topic3_72,topic3_76,topic3_78,topic3_79,topic3_81,topic3_84,topic3_87,topic3_90,topic3_92,topic3_99,topic3_100,topic3_101,topic3_109,topic3_111,topic3_112,topic3_119,topic3_121,topic3_123,topic3_124,topic3_127,topic3_130,topic3_136,topic3_137,topic3_138,topic3_139,topic3_141,appIdInstall_1,appIdInstall_4,appIdInstall_6,appIdInstall_9,appIdInstall_10,appIdInstall_11,appIdInstall_12,appIdInstall_15,appIdInstall_16,appIdInstall_17,appIdInstall_19,appIdInstall_21,appIdInstall_23,appIdInstall_26,appIdInstall_27,appIdInstall_28,appIdInstall_29,appIdInstall_32,appIdInstall_34,appIdInstall_35,appIdInstall_39,appIdInstall_40,appIdInstall_41,appIdInstall_42,appIdInstall_43,appIdInstall_44,appIdInstall_45,appIdInstall_47,appIdInstall_48,appIdInstall_49,appIdInstall_51,appIdInstall_52,appIdInstall_55,appIdInstall_56,appIdInstall_57,appIdInstall_58,appIdInstall_60,appIdInstall_61,appIdInstall_62,appIdInstall_63,appIdInstall_65,appIdInstall_67,appIdInstall_68,appIdInstall_69,appIdInstall_70,appIdInstall_71,appIdInstall_73,appIdInstall_74,appIdInstall_76,appIdInstall_77,appIdAction_2,appIdAction_4,appIdAction_5,appIdAction_7,appIdAction_8,appIdAction_11,appIdAction_13,appIdAction_14,appIdAction_16,appIdAction_17,appIdAction_27,appIdAction_30,appIdAction_32,appIdAction_33,appIdAction_34,appIdAction_35,appIdAction_36,appIdAction_37,appIdAction_38,appIdAction_39,appIdAction_40,appIdAction_41,appIdAction_43,appIdAction_44,appIdAction_45,appIdAction_47,appIdAction_50,appIdAction_51,appIdAction_52,appIdAction_53,appIdAction_55,appIdAction_56,appIdAction_60,appIdAction_62,appIdAction_65,appIdAction_66,appIdAction_69,appIdAction_70,appIdAction_71,appIdAction_72,appIdAction_74,appIdAction_75,appIdAction_76,appIdAction_77,appIdAction_80,appIdAction_81,appIdAction_83,appIdAction_84,appIdAction_85,appIdAction_91,ct_0,ct_1,ct_2,ct_3,ct_4,os_0,os_1,os_2,carrier_0,carrier_1,carrier_2,carrier_3,house_1
JOIN 操作转移至Spark
import re, time f = 'userFeature.data' ''' 17 marriageStatus 11 19 marriageStatus 2 13 20 marriageStatus 13 10 16 marriageStatus 0 21 marriageStatus 2 13 9 22 marriageStatus 12 13 9 23 marriageStatus 12 13 10 11 marriageStatus 11 5 13 marriageStatus 5 13 13 10 marriageStatus 13 10 10 marriageStatus 10 15 marriageStatus 15 0 marriageStatus 0 13 15 marriageStatus 13 15 12 13 marriageStatus 12 13 13 marriageStatus 13 6 13 marriageStatus 6 13 2 13 marriageStatus 2 13 13 9 marriageStatus 13 9 6 13 9 marriageStatus 6 13 9 2 13 9 marriageStatus 2 13 9 5 13 9 marriageStatus 5 13 9 12 13 9 marriageStatus 12 13 9 14 marriageStatus 14 12 13 10 marriageStatus 12 13 10 3 marriageStatus 3 15 10 marriageStatus 15 10 8 marriageStatus 8 6 13 10 marriageStatus 6 13 10 5 13 10 marriageStatus 5 13 10 13 10 9 marriageStatus 13 10 9 13 15 10 marriageStatus 13 15 10 2 13 10 marriageStatus 2 13 10 marriageStatus 0 2 5 6 8 9 10 11 12 13 15 ''' def fw_s(f, s): with open(f, 'w') as fw: fw.write(s) # d 获取一个特征下有哪些值,如果值个数大于1,则考虑拆分该特征为各个子特征 # feature_order_l 获取一级特征的顺序 # 原始数据 特征挖掘 # 各个特征的子特征值,各个特征的子特征个数,各个特征的顺序, f_feature = 'toknowit.txt' f_feature_ele_num = f_feature.replace('.', 'EleNum.') f_feature_incomplete, f_feature_complete = f_feature.replace('.', 'Incomplete.'), f_feature.replace('.', 'Complete.') # 原始数据 加工成生产数据 # 将一级特征的子特征升级为一级特征,但是限定原一级特征的子特征可以升级的特征数最大值;该值需结合算力、算法确定 f_reduce, f_output = f_feature.replace('.', 'Reduce.'), f_feature.replace('.', 'Output.') # <---以上生成的文件无参数,数据恒定 # 这个文件是第一阶段的结果文件,含参数文件,故加上时间戳 f_extend = f_feature.replace('.', 'Extend{}.'.format(int(time.time()))) to_write_immutable_file = True # to_write_immutable_file = False if to_write_immutable_file: feature_d, feature_incomplete_rows_l, reduce_chk_counter, reduce_chk_step, = {}, [], 0, 300000 # 打开GB文件,得到2个集合:获取不完整特征序列的集合、特征-特征值的集合 with open(f, 'r') as fr: for i in fr: l = i.replace(' ', '').split('|') feature_incomplete_rows_l_this = [] for ii in l: ll = ii.split(' ') k = ll[0] feature_incomplete_rows_l_this.append(k) if k == 'uid': continue if k not in feature_d: feature_d[k] = [] # order -->int for iii in ll[1:]: feature_d[k].append(int(iii)) feature_incomplete_rows_l.append(feature_incomplete_rows_l_this) reduce_chk_counter += 1 print(reduce_chk_counter) if reduce_chk_counter % reduce_chk_step == 0: # reduce_chk_counter = 0 #从节约内存的角度,应重置为0,测试阶段观察分析进度和数据总数 for k in feature_d: feature_d[k] = list(set(feature_d[k])) feature_incomplete_rows_l = [e for i, e in enumerate(feature_incomplete_rows_l) if feature_incomplete_rows_l.index(e) == i] # subset TEST # break for k in feature_d: feature_d[k] = sorted(list(set(feature_d[k])), reverse=False) feature_incomplete_rows_l = [e for i, e in enumerate(feature_incomplete_rows_l) if feature_incomplete_rows_l.index(e) == i] s = ' '.join([','.join(l) for l in feature_incomplete_rows_l]) fw_s(f_feature_incomplete, s) feature_after_e_d = {} for l in feature_incomplete_rows_l: for e in l: if e not in feature_after_e_d: feature_after_e_d[e] = [] feature_after_e_d[e] += l[l.index(e) + 1:] feature_after_e_d[e] = list(set(feature_after_e_d[e])) # 原始一级特征b feature_complete_l = [k for k in sorted(feature_after_e_d, key=lambda e: len(feature_after_e_d[e]), reverse=True)] print(feature_complete_l) s = ' '.join(feature_complete_l) fw_s(f_feature_complete, s) print(feature_complete_l) feature_d_ = {} for feature in feature_complete_l: if feature == 'uid': continue feature_d_[feature] = feature_d[feature] del feature_d feature_d = feature_d_ s = ' '.join(['{} {}'.format(k, ','.join([str(i) for i in feature_d[k]])) for k in feature_d]) fw_s(f_feature, s) s = ' '.join(['{} {}'.format(k, len(feature_d[k])) for k in feature_d]) fw_s(f_feature_ele_num, s) # 原始数据持久化完毕<--- # --->对原始数据做加工,生成新数据 # 0级别特征,将原始一级特征中"kw1,kw2,"合并 feature_reduce_l = [i if re.search('d', i) is None else i[0:re.search('d', i).endpos - 1] for i in feature_complete_l] # set 破坏了顺序 print(feature_reduce_l) print(list(set(feature_reduce_l))) feature_reduce_l = [e for i, e in enumerate(feature_reduce_l) if feature_reduce_l.index(e) == i] print(feature_reduce_l) s = ' '.join(feature_reduce_l) fw_s(f_reduce, s) relative_, absolute_ = 2 / 3, 50 sparse_num_drop_max = min( [absolute_, max(sorted([len(feature_d[k]) for k in feature_d], reverse=False)[0:int(len(feature_d) * relative_)])]) s = ' '.join( ['{} {}'.format(k, ','.join([str(i) for i in feature_d[k][0:sparse_num_drop_max]])) for k in feature_d]) fw_s(f_output, s) # 特征的属性值 feature_extend_d = {} is_odd_line = True with open(f_output, 'r') as fr: for i in fr: l = i.replace(' ', '').split(',') if is_odd_line == True: is_odd_line = False k = l[0] feature_extend_d[k] = [] else: is_odd_line = True if len(l) <= sparse_num_drop_max: for ii in l: feature_extend_d[k].append(ii) else: feature_extend_d[k].append(0) feature_extend_l = [] feature_complete_l.pop(feature_complete_l.index('uid')) feature_extend_l = '|'.join( ['|'.join(['{}_{}'.format(k, str(i)) for i in feature_extend_d[k]]) for k in feature_extend_d]).split('|') print(feature_extend_l) s = ','.join(feature_extend_l) fw_s(f_extend, s) # 生成缩小的数据集,测试spark join 广告特征做广播 ori_l, extend_l = [], [] with open('toknowitComplete.txt', 'r')as fr: ori_l = [i.replace(' ', '') for i in fr] feature_extend_l, f_feature_extend = [], f_extend with open(f_feature_extend, 'r')as fr: extend_l = [i.replace(' ', '').split(',') for i in fr][0] ori_extend_d = {} for ori in ori_l: for extend_ in extend_l: if ori in extend_: if ori not in ori_extend_d: ori_extend_d[ori] = {} extend_d = {extend_: 0} ori_extend_d[ori][extend_] = 0 import copy ori_extend_d_ = copy.deepcopy(ori_extend_d) for i in ori_extend_d_['age']: if 'marriageStatus' in i: del ori_extend_d['age'][i] del ori_extend_d_ ''' 1-生成数据元结构,末端值全为0 2-拿到每行数据,去更新末端值 ''' c_ = 0 rows_d_l = [] with open(f, 'r') as fr: for i in fr: # c_ += 1 # if c_ == 6: # break ori_row_l = i.replace(' ', '').split('|') ori_extend_d_this = copy.deepcopy(ori_extend_d) uid_d = {} for ii in ori_row_l: l = ii.split(' ') print(l) feature_ori, val_l = l[0], l[1:] if feature_ori == 'uid': uid = val_l[0] continue if len(ori_extend_d[feature_ori]) == 1: for feature_sub in ori_extend_d_this[feature_ori]: print(feature_sub) ori_extend_d_this[feature_ori][feature_sub] = 1 if int(val_l[0]) > 0 else 0 else: for val_ in val_l: feature_sub = '{}_{}'.format(feature_ori, val_) print(feature_sub) if feature_sub in ori_extend_d_this[feature_ori]: ###多余的校验 ori_extend_d_this[feature_ori][feature_sub] = 1 # ???? uid_d[uid] = ori_extend_d_this del ori_extend_d_this rows_d_l.append(uid_d) del uid_d s_l = [] f_userdata_extend = f.replace('.data', '{}.data'.format(int(time.time()))) for d in rows_d_l: for uid in d: c_ += 1 l = [] d_ = d[uid] for feature_ in d_: for feature_sub in d_[feature_]: l.append(d_[feature_][feature_sub]) s = '{},{}'.format(uid, ','.join([str(i) for i in l])) s_l.append(s) fw_s(f_userdata_extend, ' '.join(s_l)) print(c_) ''' gen JOIN data FOR DNN ''' f_user = 'userFeature.data' f_ad = 'adFeature.csv' f_user_extend = f_userdata_extend f_train = 'train.csv' f_test = 'test2.csv' ''' gen head ''' csv_head = 'advertiserId,campaignId,creativeId,creativeSize,adCategoryId,productId,productType' f_toknowitExtend = 'toknowitExtend1527038949.txt' try: with open(f_toknowitExtend, 'r') as fr: for i in fr: csv_head = 'label,{},{}'.format(i.replace(' ', ''), csv_head) print(csv_head) except Exception as e: print(e) csv_head = '' # no file ''' get dict ''' ad_d = {} with open(f_ad, 'r') as fr: for i in fr: if 'aid' in i: continue l = i.replace(' ', '').split(',') aid = l[0] ad_d[aid] = ','.join(l[1:]) uid_d = {} with open(f_user_extend, 'r') as fr: for i in fr: if 'aid' in i: continue l = i.replace(' ', '').split(',') uid = l[0] uid_d[uid] = ','.join(l[1:]) ''' gen train data ''' dnn_csvTRAIN = 'dnn_csvTRAIN{}.csv'.format(int(time.time())) with open(dnn_csvTRAIN, 'w') as fa: fa.write(csv_head) with open(f_train, 'r') as fr: for i in fr: if 'aid' in i: continue try: l = i.replace(' ', '').replace(' ', '').split(',') print(l) aid, uid, label = l s = '{},{},{} '.format(label, uid_d[uid], ad_d[aid]) with open(dnn_csvTRAIN, 'a') as fa: fa.write(s) except Exception as e: print(e) ''' gen test data ''' dnn_csvTEST = 'dnn_csvTEST{}.csv'.format(int(time.time())) with open(dnn_csvTEST, 'w') as fa: fa.write(csv_head) with open(f_test, 'r') as fr: for i in fr: if 'aid' in i: continue try: break l = i.replace(' ', '').replace(' ', '').split(',') print(l) # aid, uid, label = l aid, uid = l label = 0 s = '{},{},{} '.format(label, uid_d[uid], ad_d[aid]) with open(dnn_csvTEST, 'a') as fa: fa.write(s) except Exception as e: print(e) dd = 9