def divide_manually(): boundary = request.form.get("boundary") variable_name = request.form.get("variable_name") branch = request.form.get("branch") model_name = request.form.get("model_name") type = request.form.get("type") df_map = global_value.get_value(model_name + "_" + branch) df_train = df_map['df_train'] boundary_list = [] if type == "true": for s in boundary.split(","): temp = [] temp.extend(map(cmm.transfer, s.split("|"))) boundary_list.append(temp) columns = ['bin_num', variable_name, 'bads', 'goods', 'total', 'total_perc', 'bad_rate', 'woe', 'type'] else: for s in boundary.split(","): boundary_list.append(float(s)) columns = ['bin_num', 'min', 'max', 'min_boundary', 'max_boundary', 'bads', 'goods', 'total', 'total_perc', 'bad_rate', 'woe', 'type'] target = tool_model_service.load_model(model_name=model_name, model_branch=branch)[0]["model_target"] result = bf.adjust_bin(df_train, type == "true", variable_name, boundary_list , target=target, expected_column={variable_name}) iv = result['IV'].sum() df = pd.DataFrame(result, columns=columns) data = generate_response(variable_name, df, iv) return rest.responseto(data=data)
def init(): """ 初始化binning record :return: dict 格式: {variable_name1 -var_table -var_params(province,goods,bads...) -is_selected -iv variable_name2...} """ name = request.form.get("modelName") branch = request.form.get("branch") # 根据key从内存中获取已上传文件的相关参数 df_map = global_value.get_value(name + "_" + branch) result = tool_model_service.load_model(model_name=name, model_branch=branch) # selected_list在数据库中是json格式,在python中是一个dict,格式为:select_variable:index(变量的位置) selected_list_json = json.loads(result[0].selected_list) selected_list = selected_list_json.keys() min_val = 0 df = df_map['df_train'] init_result = get_init(df, target=result[0].model_target, valid=selected_list) # 根据init_result获得变量的区间 out = get_boundary(init_result, min_val) # 根据iv排序 out_sorted_iv = sort_iv(out) return rest.responseto(data=out_sorted_iv)
def init_model_name(): """ training文件变量初始化页面,将会初始化各个模型的条目供用户选择 :return: [model_name1,model_name2,model_name3] """ result = tool_model_service.load_model(is_deleted=0) # only get model_name form result result = list(set(map(lambda x: x.model_name, result))) return rest.responseto(result)
def get_branch_name(): """ 根据模型名称获得分支信息和文件路径 :param: model_name :return: model_name file_path """ model_name = request.args.get("modelName") result = tool_model_service.load_model(model_name=model_name) # get model_branch and file_path from result result = list(map(lambda x: x.model_branch, result)) return rest.responseto(result)
def create_model_name(): model_name = request.args.get("model_name") if tool_model_service.load_model(model_name=model_name, model_branch="master") is None: if tool_model_service.create_branch(): return rest.responseto({ "model_name": model_name, "model_branch": "master" }) else: return rest.responseto("create fail", success=False) return rest.responseto("name exist", success=False)
def parse(): # 对train文件进行转换,分析 model_name = request.form.get("modelName") branch = request.form.get("branch") # 用户指定的文件相对路径 file_path = request.form.get("filePath") target = request.form.get("target") root_path = app.config["ROOT_PATH"] path = root_path + "/" + file_path # 以模型名称和分支名作为唯一的key key = model_name + "_" + branch # df_train = None # 流程继续下去的前提就是路径是真实存在的 if os.path.exists(path): # 检查是否已经加载过了 if global_value.has_key(key) is False: # 重新加载资源 df_all = pd.read_excel(path) df_train = df_all[df_all['dev_ind'] == 1] df_test = df_all[df_all['dev_ind'] == 0] df_map = { model_name + "_" + branch: { "df_all": df_all, "df_train": df_train, "df_test": df_test } } global_value.set_value(**df_map) else: df_map = global_value.get_value(key) df_train = df_map['df_train'] df = ba.get_df_summary(df_train) # 得到df_train,将dataframe转换为用于展示前端展示的数据 data_map = cmm.df_for_html(df) result = tool_model_service.load_model(model_name=model_name, model_branch=branch) branches = [] v = result[0] for n in result: branches.append(n.model_branch) # data_map["current_model"] = model_name data_map["branches"] = branches data_map["selected_list"] = v.selected_list data_map["target"] = v.model_target return rest.responseto(data=data_map) else: return rest.responseto(message="file not exist", success=False)
def checkout(): model_name = request.values.get("model_name") branch = request.values.get("branch") result = tool_model_service.load_model(model_name=model_name, model_branch = branch) return rest.responseto(data=result[0])
def get_branch_info(): """ 根据模型名称和分支名称获得target和文件路径 :param:model_name :return: """ model_name = request.args.get("modelName") branch = request.args.get("branch") original_branch = request.args.get("originalBranch") result = tool_model_service.load_model(model_name=model_name, model_branch=branch) ##数据库找不到对应当前分支的数据,用户希望创建一个新分支 if result.first() == None: try: # tool_model_service.create_branch(model_name=model_name, model_branch=branch) result = tool_model_service.load_binning_record( model_name, original_branch) list = [] for record in result: obj = ModelContent(model_name=model_name, model_branch=branch, variable_name=record["variable_name"], variable_iv=record["variable_iv"], binning_record=record["binning_record"], is_selected=record["is_selected"]) list.append(obj) record = tool_model_service.load_model( model_name=model_name, model_branch=original_branch)[0] result = [record] if tool_model_service.create_branch( model_name=model_name, model_branch=branch, model_target=record["model_target"], remove_list=record["remove_list"], selected_list=record["selected_list"]): tool_model_service.save_binning_record(list) except Exception: return rest.responseto(success=False, data="添加分支失败") target = result.first().model_target path = result.first().file_path # df_map = global_value.get_value(model_name+"_"+branch) selected_file = None # if path is not None and \ # global_value.has_key(model_name+"_"+branch) is not True\ # and os.path.exists(path): # df_all = pd.read_excel(path) # df_train = df_all[df_all['dev_ind'] == 1] # df_test = df_all[df_all['dev_ind'] == 0] # df_map = {model_name + "_" + branch: # {"df_all": df_all, # "df_train": df_train, # "df_test": df_test}} # global_value.set_value(**df_map) if path is not None: selected_file = path.replace(app.config["ROOT_PATH"] + "/", "") files = simple_util.listFile(app.config["ROOT_PATH"], absolute=False) data = {"target": target, "selected_file": selected_file, "files": files} return responseto(data)