[apyori]关联分析:症状关联分析

关联分析可以了解数据集中的项之间的关联程度,可以挖掘出“某些事件可能会引起另外一些事情的发生”之类的规则,从而有助于做出一些关联性的推断或预测。生成的结果类似于"炸鸡>>啤酒",由前项和后项组成。

导入数据

(数据集见评论)

import pandas as pd
df = pd.read_excel('/kaggle/input/diseases-of-traditional-chinese-medicine/Diseases of Traditional Chinese Medicine.xlsx')
df.head()

运行结果:

[apyori]关联分析:症状关联分析_第1张图片


处理为双重列表结构

# 转换为双重列表结构
symptoms = []
for i in df['病人症状'].tolist():
    symptoms.append(i.split(','))

代码详解:

[] 表示创建一个空列表symptoms;

df['病人症状']是一个Series对象,tolist()函数将该Series对象转换为一个Python列表;

split()函数用于拆分字符串,split(',')表示以逗号为分隔符进行拆分;

i 代表df['病人症状']里的每一个元素,i.split(',')函数作用于每一个元素里的逗号;

append()用于在列表的末尾添加一个元素,append(i)将该字符串作为一个新元素添加到symptoms列表的末尾;

运行结果:

[apyori]关联分析:症状关联分析_第2张图片


调包建模

# 安装apyori包
pip install apyori

# 调用apyori库中的apriori()函数对病症列表symptoms进行关联关系分析
from apyori import apriori
rules = apriori(symptoms, min_support=0.1, min_confidence=0.7)
results = list(rules)

代码详解:

min_support:表示最小支持度,即频繁项集在数据集中出现的最小比例。0.1则表示频繁项集在数据集中至少出现10%的次数。

min_confidence:表示最小置信度,即关联规则的最小置信度。0.7表示关联规则的置信度至少为70%。

list()可以将元组、列表、集合等转换为列表。方便我们使用列表的方法和属性来访问和处理关联规则的元素。

运行结果:

[apyori]关联分析:症状关联分析_第3张图片

 


提取规则

# 提取results中的关联规则,并通过字符串拼接更好地呈现关联规则
for i in results:  # 遍历results中的每一个频繁项集
   for j in i.ordered_statistics:  # 获取频繁项集中的关联规则
       X = j.items_base  # 关联规则的前件
       Y = j.items_add  # 关联规则的后件
       x = ', '.join([item for item in X])  # 连接前件中的元素
       y = ', '.join([item for item in Y])  # 连接后件中的元素
       if x != '':  # 防止出现关联规则前件为空的情况
           print(x + ' >> ' + y)  # 通过字符串拼接更好地呈现结果

代码详解:

`i.ordered_statistics`是一个属性,它返回频繁项集`i`中的关联规则。
每个关联规则都包含以下信息:
- `items_base`:关联规则的前件,即规则的前半部分。
- `items_add`:关联规则的后件,即规则的后半部分。
- `confidence`:关联规则的置信度,表示在前件出现的情况下,后件也会出现的概率。

join()可以把列表、元组里的元素连成一个字符串;

', '.join()表示把列表里的元素用逗号和空格分隔开,并将它们连接成一个字符串。

运行结果:

[apyori]关联分析:症状关联分析_第4张图片

 

结果解读:“便秘 >> 消化不良” 表示在数据集中经常同时出现 "便秘" 和 "消化不良" 这两个项,其他项也同理。

注意:关联分析只能找到项之间的相关性,并不能确定因果关系哦。


你可能感兴趣的:(Python机器学习,python,开发语言)