示例#1
0
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)
示例#2
0
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)
示例#7
0
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)