예제 #1
0
def buildRules():
    level = ['优', '良', '中', '差']
    apr = Apriori()
    db = DatabaseOperations()
    ans = []
    for item in level:
        data = load_data(item)
        L, supportData = apr.apriori(data, minSupport=0.5)
        rules = apr.generateRules(L, supportData, minConf=0.6)
        rules = list(rules)
        i = 0
        # sort the convidence about rules and print top 3 rules
        sorted_rules = sorted(rules, key=lambda x: float(x[2]), reverse=True)
        for rule in sorted_rules:
            pre_course_num = ''
            pre_course_name = ''
            for item in list(list(rule)[0]):
                # ans = db.search_course(item[:-2])
                pre_course_num += item[:-2] + ','
                pre_course_name += db.search_course(
                    item[:-2])[0][1] + ' ~ ' + item[-1:] + ','
            # pre_name = db.search_course(pre_course_num[:-2])
            last_course_num = ''
            last_course_name = ''
            for item in list(list(rule)[1]):
                last_course_num += item[:-2] + ','
                last_course_name += db.search_course(
                    item[:-2])[0][1] + ' ~ ' + item[-1:] + ','
            # last_name = db.search_course(last_course_num[:-2])
            # print(pre_course_num+"-->"+last_course_num+"    "+str(list(rule)[2]))
            ans.append([
                pre_course_num, pre_course_name, last_course_num,
                last_course_name,
                str(list(rule)[2])
            ])
            i += 1
            if i >= 3: break
    return ans