数据挖掘:关联分析—Apriori算法

@TOC
数据挖掘:关联分析—Apriori算法_第1张图片


前言

关联分析是用于发掘数据间关联度的分析技术,即通过发掘事务数据集内每项数据组合出现的概率。
广泛应用日常各领域,例如,在生物信息学中的功能基因定位、医疗领域的病症关联分析、快消领域等多个方面。


一、Apriori算法原理

在关联分析的过程中用到的三个指标:支持度、置信度、提升度。

    每项数据组合都有自己的支持度,支持度就是数据组合项出现的次数占事务数据集总项数的比例【支持度=数据组合项出现的次数/事务数据集总项数】。支持度最高为一,最低为零。在分析过程中,根据数据的具体情况人为设置最小支持度度(0.1~0.2),遵循数据组合项的支持度 < 最小值尺度时,是非频繁项集;数据组合项的支持度 >= 最小值尺度时,是频繁项集,来筛选每项数据组合的受欢迎程度。

    关联规则是由频繁项集的前件与后件组成,而置信度是衡量关联规则的可靠程度指标, 关联规则的置信度,表示频繁项集的前件出现的情况下,频繁项集的后件同时出现 的概率【置信度=频繁项集的支持度/前件的支持度】,置信度越高,关联规则的可靠性 越强。在分析过程中,根据数据的具体情况人为设置最小置信度,来筛选每项关联规则 的可靠程度,遵循数据频繁项集的置信度 < 最小值尺度时,是弱关联规则;频繁项集 的置信度 >= 最小值尺度时,是强关联规则的原则分析关联规则。

    提升度表示频繁项集前件的出现对后件出现的影响程度,也就是频繁项集的置信度和频繁后件的支持度的比值【提升度=频繁项集的置信度/频繁项集后件的支持度】遵循数据组合项的提升度 < 1时,是抑制关联规则;数据组合项的提升度 > 1时,是促进关联规则,数据组合项的提升度 = 1时,是前后件相互独立。

二、实战案例

这是一份校园Python相关宣传的阅读统计。运用Apriori算法,挖掘分析数据

​​数据挖掘:关联分析—Apriori算法_第2张图片

分析步骤

(一)关系记录的生成

1.apriori函数产生关联规则
2.遍历出规则中的关系记录
3.关系记录的提取

(二)关系记录的提取

1.提取支持度
2.提取前件和后件
3.提取置信度和提升度

(三)提取信息的加工和可视化

1.数据标准化
2.数据可视化

(四)根据促进和抑制关系,提出建议

三、代码

import pandas as pd
from apyori import apriori
import matplotlib.pyplot as plt
print('----------------------------------------------------------------------')
path1=r'F:\\数据分析\\Apriori(关联分析模型)\\UserViews.csv'
UserViews=pd.read_csv(path1)

articles=[]
for a in UserViews['文章类型']:
    article=a.split(',')
    articles.append(article)
#创建apriori分析算法规则,设置信度最小值与支持度最小值,计算items、support、ordered_statistics={relates_category={items_base、items_add}、confidence、lift}
rules=apriori(articles,min_support=0.1,min_confidence=0.6)
#提取结果
Extract_Result=[]
for rule in rules:
    support=round(rule.support,3)
    for a in rule.ordered_statistics:
        head_set=list(a.items_base)
        tail_set=list(a.items_add)
        if head_set==[]:
            continue
        relates_category=str(head_set)+'→'+str(tail_set)
        confidence=round(a.confidence,3)
        lift=round(a.lift,3)
        Extract_Result.append([relates_category,support,confidence,lift])
Rule_DF=pd.DataFrame(Extract_Result,columns=['RelationshipRule','Support','Confidence','Lift'])


plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False
#描述促进关系的强关联规则
Promoted_Rule_DF=Rule_DF[Rule_DF['Lift']>1]
Promoted_Rule_DF.plot.bar('RelationshipRule',['Confidence','Lift'],rot=0,fontsize=16,label=['置信度','支持度'])
plt.xlabel(
            '\n结论:1. 当“头条”文章是介绍“SQL”的内容时,可以提高“Python”的“次条”排布。                                                                                    \n2. 当“数据分基础”类的文章成为“头条”时,不妨考虑搭配“数据分析进阶”的“次条”,还可以在文章末尾,继续添加“数据分析进阶”相关的拓展链接,提升浏览量。'
            ,fontsize=12)
plt.yticks(Promoted_Rule_DF['Lift'])
plt.title('促进关系的强关联规则',fontsize=25)
plt.tight_layout()
#描述抑制关系的强关联规则
Restricted_Rule_DF=Rule_DF[Rule_DF['Lift']<1]
Restricted_Rule_DF.plot.bar('RelationshipRule',['Confidence','Lift'],rot=0,fontsize=16,label=['置信度','支持度'])
plt.xlabel(
            '\n结论:1. “爬虫”和“Python”类的文章成为“头条”时,可以适当降低“数分进阶”的“次条”排布。'
            ,fontsize=12)
plt.yticks(Restricted_Rule_DF['Lift'])
plt.title('抑制关系的强关联规则',fontsize=25)
plt.tight_layout()
plt.show()


path2=r'F:\\数据分析\\Apriori(关联分析模型)\\Rule_DF.xlsx'
with pd.ExcelWriter(path2)as writer:
    Promoted_Rule_DF.to_excel(writer,sheet_name='Promoted_Rule_DF')
    Restricted_Rule_DF.to_excel(writer,sheet_name='Restricted_Rule_DF')
print('ok')

四、结果分析

(一)输出数据表结果

数据挖掘:关联分析—Apriori算法_第3张图片

(二)数据可视化

数据挖掘:关联分析—Apriori算法_第4张图片
数据挖掘:关联分析—Apriori算法_第5张图片

(三)分析总结

(一)情况描述

(1)促进关联规则:
1 大概有10%的人了解SQL宣传的同时,一定了去解Python宣传,SQL宣传对Python宣传有促进作用
2 大概有20%的人了解数据基础分析宣传的同时,一定了去解数据进阶分析宣传,数据基础分析宣传对数据进阶分析宣传有促进作用

(2)抑制关联规则:
1 大概有32%的人了解Python宣传的同时,有70%的可能去了解数据进阶分析宣传,Python宣传对数据进阶分析宣传有抑制作用
2 大概有21%的人了解爬虫宣传的同时,有63%的可能去了解数据进阶分析宣传, 爬虫宣传对数据进阶分析宣传有抑制作用
3 大概有10%的人了解爬虫和Python宣传组合的同时,有66%的可能去了解数据进阶分析宣传,爬虫和Python宣传组合对数据进阶分析宣传有抑制作用

(二)宣传对策

1 加强SQL与Python的联合配套工作。当“头条”文章是介绍“SQL”的内容时,可以提高 “Python”的“次条”排布。
2 推进数据基础分析与进阶分析的联合配套工作。当“数据分基础”类的文章成为“头条” 时,不妨考虑搭配“数据分析进阶”的“次条”,还可以在文章末尾,继续添加“数据分析进阶”相关的拓展链接,提升浏览量。
3 提升Python与数据基础分析的关联度。开展Python与数据基础分析的联合活动。
4 降低爬虫与数据进阶分析的联合配套工作。“爬虫”和“Python”类的文章成为“头条” 时,可以适当降低“数分进阶”的“次条”排布。

你可能感兴趣的:(数据分析,数据挖掘,算法,机器学习)