学生数据集关联规则挖掘:AND条件实现、Python方案及结果表格化需求
关联规则挖掘实现方案(针对学生数据集)
一、核心问题解答:关联规则中的AND条件
首先明确:关联规则天生支持AND逻辑。比如当你挖掘出规则{Grade:A, SUB:sub1} → {Rating:3},它的含义就是Grade=A AND SUB=sub1 → Rating=3——项集里的多个元素就是同时满足的条件,完全符合你需要的AND场景。
二、正确的Python实现步骤
你之前的代码问题在于把所有字段(包括Id、Sem这些不需要的字段)的原始值直接作为项,导致输出无意义。我们需要只针对Grade、Rating、SUB三个字段,把每个字段的"字段名:值"作为独立项,这样挖掘出的规则才有业务意义。
1. 数据预处理(以你的示例数据为例)
import pandas as pd # 示例数据集 data = { 'Id': [1,1,2], 'Sem': [2,4,2], 'Grade': ['A','C','B'], 'Rating': [3,1,2], 'SUB': ['sub1','sub2','sub1'] } dfrslt = pd.DataFrame(data) # 仅保留目标字段,转换为「字段名:值」的格式(避免不同字段值混淆) records = [] for _, row in dfrslt.iterrows(): item_set = [ f"Grade:{row['Grade']}", f"Rating:{row['Rating']}", f"SUB:{row['SUB']}" ] records.append(item_set)
2. 关联规则挖掘(使用apyori库)
从你的输出格式判断,你用的是apyori库,这里设置合理的阈值参数(可根据实际数据集大小调整):
from apyori import apriori # 挖掘关联规则 association_rules = apriori( records, min_support=0.3, # 支持度最小值(示例数据量小,设为0.3) min_confidence=0.5, # 置信度最小值 min_lift=1.0, # 提升度最小值 min_length=2 # 规则至少包含2个项(前件+后件) )
三、将RelationRecord转换为易懂的表格格式
apyori的原生输出确实不够直观,我们可以用pandas把规则提取成结构化表格:
# 提取规则核心信息到列表 rule_list = [] for rule in association_rules: # 提取支持度 support = round(rule.support, 4) # 遍历每个规则的有序统计量(一个规则可能对应多个前件后件组合) for stat in rule.ordered_statistics: # 格式化前件(AND条件集合) antecedents = ', '.join(stat.items_base) if stat.items_base else '无' # 格式化后件 consequents = ', '.join(stat.items_add) # 提取置信度和提升度 confidence = round(stat.confidence, 4) lift = round(stat.lift, 4) # 加入结果列表 rule_list.append([antecedents, consequents, support, confidence, lift]) # 转换为DataFrame表格 rule_df = pd.DataFrame( rule_list, columns=['前件(AND条件)', '后件', '支持度', '置信度', '提升度'] ) # 打印或导出表格 print(rule_df) # 导出为CSV(可选) # rule_df.to_csv('关联规则结果.csv', index=False, encoding='utf-8-sig')
输出示例(针对你的样例数据)
| 前件(AND条件) | 后件 | 支持度 | 置信度 | 提升度 |
|---|---|---|---|---|
| Grade:A | SUB:sub1 | 0.3333 | 1.0000 | 1.5000 |
| SUB:sub1 | Grade:A | 0.3333 | 0.5000 | 1.5000 |
| Grade:A | Rating:3 | 0.3333 | 1.0000 | 3.0000 |
四、关键注意事项
- 你之前得到的
frozenset({'0'})是因为错误地将所有字段(包括Id、Sem)的原始值作为项,甚至可能包含无关数值/缺失值,导致规则完全失去业务意义,按上述方法处理数据后即可解决。 - 阈值参数需根据数据集大小调整:数据量越大,
min_support可设得越小;若想得到更可靠的规则,可适当提高min_confidence。 - 「字段名:值」的格式是关键:避免把不同字段的相同值(比如Rating的3和Sem的3)混淆,保证规则的可解释性。
内容的提问来源于stack exchange,提问作者Sample Test
相关产品推荐
相关产品推荐

