203 lines
8.2 KiB
Python
203 lines
8.2 KiB
Python
import helper
|
|
import csv
|
|
import dao
|
|
|
|
__author__ = 'mac'
|
|
|
|
|
|
def analysis_process(project_id,method):
|
|
project_name = project_id
|
|
path = 'result/'+project_name+'/'+method+'/'
|
|
path_analysis = path + 'analysis/'
|
|
# path_data = path + 'data/'
|
|
|
|
csv_result = file(path_analysis + 'precision_method.csv', 'rb')
|
|
result_reader = csv.reader(csv_result)
|
|
csv_analysis = file(path_analysis + 'analysis.csv', 'wb')
|
|
writer_analysis = csv.writer(csv_analysis)
|
|
# writer_classifier.writerow(['classifier infomation for project:',repr(project_name)])
|
|
|
|
|
|
break_count = 20 # cut the different, len(threshold)
|
|
change_break = 20 # cut the condition for changing class
|
|
|
|
|
|
count_base = [0]*break_count
|
|
right_base = [0]*break_count
|
|
count_base2 = [0]*break_count
|
|
right_base2 = [0]*break_count
|
|
|
|
right_mine1 = [([0] * change_break) for i in range(break_count)]
|
|
right_mine2 = [([0] * change_break) for i in range(break_count)]
|
|
right_mine3 = [([0] * change_break) for i in range(break_count)]
|
|
right_mine4 = [([0] * change_break) for i in range(break_count)]
|
|
|
|
result_set = [count_base,right_base,count_base2,right_base2,right_mine1,right_mine2,right_mine3,right_mine4]
|
|
|
|
status = [-1,0]
|
|
|
|
# get data from line according to status
|
|
def get_data_from_line(line_info,status):
|
|
if status[0] == 0:
|
|
result_set[0] = [each for each in line_info]
|
|
elif status[0] == 1:
|
|
result_set[1] = [each for each in line_info]
|
|
elif status[0] == 2:
|
|
result_set[2] = [each for each in line_info]
|
|
elif status[0] == 3:
|
|
result_set[3] = [each for each in line_info]
|
|
elif status[0] == 4:
|
|
result_set[4][status[1]] = [each for each in line_info]
|
|
elif status[0] == 5:
|
|
result_set[5][status[1]] = [each for each in line_info]
|
|
elif status[0] == 6:
|
|
result_set[6][status[1]] = [each for each in line_info]
|
|
elif status[0] == 7:
|
|
result_set[7][status[1]] = [each for each in line_info]
|
|
|
|
|
|
|
|
def handle_line(line, status):
|
|
if line[0] == "base count for all:":
|
|
status[0]=0
|
|
status[1]=0
|
|
elif line[0]=="base right count for all:":
|
|
status[0]=1
|
|
status[1]=0
|
|
elif line[0]=="base count for threshold:":
|
|
status[0]=2
|
|
status[1]=0
|
|
elif line[0]=="base right count for threshold:":
|
|
status[0]=3
|
|
status[1]=0
|
|
elif line[0]=="right count of mine method 1 for each threshold:":
|
|
status[0]=4
|
|
status[1]=0
|
|
elif line[0]=="right count of mine method 2 for each threshold:":
|
|
status[0]=5
|
|
status[1]=0
|
|
elif line[0]=="right count of mine method 3 for each threshold:":
|
|
status[0]=6
|
|
status[1]=0
|
|
elif line[0]=="right count of mine method 4 for each threshold:":
|
|
status[0]=7
|
|
status[1]=0
|
|
else:
|
|
get_data_from_line(line,status)
|
|
status[1]=status[1]+1
|
|
|
|
for line in result_reader:
|
|
handle_line(line,status)
|
|
|
|
# print(result_set[4])
|
|
right_max = []
|
|
right_max_index = []
|
|
right_max_methold_index = []
|
|
final_threshold = 0
|
|
for ind_threshold in range(break_count):
|
|
count_base_temp = result_set[2][ind_threshold]
|
|
right_base_temp = result_set[3][ind_threshold]
|
|
index_for_methold = []
|
|
right_methold_1 = max([int(i) for i in result_set[4][ind_threshold]])
|
|
index_for_methold.append([int(i) for i in result_set[4][ind_threshold]].index(right_methold_1))
|
|
right_methold_2 = max([int(i) for i in result_set[5][ind_threshold]])
|
|
index_for_methold.append([int(i) for i in result_set[5][ind_threshold]].index(right_methold_2))
|
|
right_methold_3 = max([int(i) for i in result_set[6][ind_threshold]])
|
|
index_for_methold.append([int(i) for i in result_set[6][ind_threshold]].index(right_methold_3))
|
|
right_methold_4 = max([int(i) for i in result_set[7][ind_threshold]])
|
|
index_for_methold.append([int(i) for i in result_set[7][ind_threshold]].index(right_methold_4))
|
|
# get max right count
|
|
right_methold_max = max([right_methold_1,right_methold_2,right_methold_3,right_methold_4])
|
|
# record max right count
|
|
right_max.append(right_methold_max)
|
|
# record methold index of max right count
|
|
right_max_methold_index.append([right_methold_1,right_methold_2,right_methold_3,right_methold_4].index(right_methold_max))
|
|
# record index of methold for max right count
|
|
right_max_index.append(index_for_methold[right_max_methold_index[ind_threshold]])
|
|
|
|
if right_methold_max > int(right_base_temp):
|
|
final_threshold = ind_threshold
|
|
|
|
diff = [0]*break_count
|
|
temp = 0
|
|
final_threshold_temp = 0
|
|
max_temp = 0
|
|
hard_count = helper.read_hard_count(project_id,method)[0]
|
|
for ind_threshold in range(final_threshold+1):
|
|
temp = temp +int(right_max[ind_threshold]) - int(result_set[3][ind_threshold])
|
|
diff[ind_threshold] = temp
|
|
|
|
# if int(result_set[2][ind_threshold]) == 0 or (int(right_max[ind_threshold]) - int(result_set[3][ind_threshold]))*1.0/int(result_set[2][ind_threshold]) >= 0.05:
|
|
# final_threshold_temp = ind_threshold
|
|
if int(result_set[0][ind_threshold]) < int(hard_count):
|
|
final_threshold_temp = ind_threshold + 1
|
|
|
|
|
|
count_improve = max(diff[0:final_threshold_temp+1])
|
|
final_threshold = final_threshold_temp
|
|
|
|
writer_analysis.writerow(['precision improve:', count_improve*1.0/int(result_set[0][-1])])
|
|
writer_analysis.writerow(['count improve:', count_improve])
|
|
writer_analysis.writerow(['final threshold:', final_threshold])
|
|
writer_analysis.writerow(['final method right count:'])
|
|
writer_analysis.writerow([i for i in right_max])
|
|
writer_analysis.writerow(['final methold index for right count:'])
|
|
writer_analysis.writerow([i for i in right_max_methold_index])
|
|
writer_analysis.writerow(['final index of methold for right count:'])
|
|
writer_analysis.writerow([i for i in right_max_index])
|
|
if int(result_set[0][final_threshold]) == 0:
|
|
r1 = 0
|
|
else:
|
|
r1 = count_improve*1.0/int(result_set[0][final_threshold])
|
|
return count_improve*1.0/int(result_set[0][-1]),r1,\
|
|
result_set[0][-1],result_set[0][final_threshold]
|
|
|
|
def handle_project(line,method):
|
|
# method = 'svm2'
|
|
final_path = 'final2/'
|
|
helper.mkdir(final_path)
|
|
f_all_precision = file(final_path + 'precision_'+method+'.csv','a')
|
|
writer_final = csv.writer(f_all_precision)
|
|
precision_improve = []
|
|
precision_machine = []
|
|
p_id = []
|
|
|
|
print(line[0])
|
|
p_id.append(line[0])
|
|
temp = analysis_process(line[0],method)
|
|
precision_improve.append(temp)
|
|
precision_machine.append(helper.get_precision(line[0],method))
|
|
proj_infos = dao.get_proj_name_by_id(line[0])
|
|
|
|
|
|
for proj_info in proj_infos:
|
|
proj_name = proj_info[0]
|
|
# nb = helper.get_result_by_classifier('nb-result',line[0])
|
|
# rf = helper.get_result_by_classifier('rf-result',line[0])
|
|
# lrl1 = helper.get_result_by_classifier('lrl1-result',line[0])
|
|
# lrl2 = helper.get_result_by_classifier('lrl2-result',line[0])
|
|
# et = helper.get_result_by_classifier('nb-result',line[0])
|
|
# et_1000 = helper.get_result_by_classifier('nb-result',line[0])
|
|
# adaboost = helper.get_result_by_classifier('nb-result',line[0])
|
|
# data = (line[0],line[1],proj_name,analysis_process(line[0]),helper.get_precision(line[0]),et,et_1000,rf,nb,lrl1,lrl2,adaboost)
|
|
data = (line[0],line[1],proj_name,temp[0],temp[1],helper.get_precision(line[0],method),temp[2],temp[3])
|
|
writer_final.writerow(data)
|
|
# classifier_process(line[0])
|
|
f_all_precision.close()
|
|
|
|
f_proj_id = file('proj_id.csv', 'r')
|
|
reader = csv.reader(f_proj_id)
|
|
# line = ['6','500']
|
|
method = 'svm'
|
|
final_path = 'final2/'
|
|
helper.mkdir(final_path)
|
|
f_all_precision = file(final_path + 'precision_'+method+'.csv','a')
|
|
writer_final = csv.writer(f_all_precision)
|
|
writer_final.writerow(['proj_id','issue_count','proj_name','improve_prec','improve_prec_part','mechine_prec','num_sample','num_hard'])
|
|
f_all_precision.close()
|
|
for line in reader:
|
|
writer_final = csv.writer(f_all_precision)
|
|
|
|
handle_project(line,method)
|
|
|
|
f_proj_id.close() |