本文不涉及关联分析算法的计算原理,只注重代码实现。

最近公司分了个任务,要求写一篇面向python初学者的关联分析演习材料。遇到这种情况,我的解决办法当然是优先使用已有模块,然后写一篇模块使用方法指南,最后10行以内的代码搞定啦。

出于习惯,我先用中文搜了一下,发现大部分人都是直接自己上手编写,很简单,毕竟也就4个步骤:导入数据,并将数据预处理

计算频繁项集

根据各个频繁项集,分别计算支持度和置信度

根据提供的最小支持度和最小置信度,输出满足要求的关联规则

代码写起来确实很简单,但是我的目标客户可是python初学者(甲方爸爸们),要求他们动手编程显然是不实际的。

中文输入搜索时,基本没有找到直接使用已有模块的样例。这么古老的算法,不应该呀!于是切换到英文输入~找到啦~

apyori模块提供了apriori算法:apyori: Simple Apriori algorithm Implementation.​pypi.org

使用pip即可立即安装。

(虽然官网说只支持Python 2.7 和 3.3 - 3.5,但我的python是3.6版,目测完全没有问题)

pip install apyori

安装好后,使用import即可调用。

from apyori import apriori

apriori算法一行搞定~

附python源代码:

# -*- coding: utf-8 -*-

import pandas as pd

header = ['user_id', 'item_id', 'rating', 'timestamp']

df = pd.read_csv('../data/ml-1m/ratings.dat', sep='::', names=header,engine='python')

# 考虑到执行时间,只选取前10000行作为输入数据

df = df.iloc[:10000]

# 用户种类

users = df['user_id'].unique()

# 电影种类

items = df['item_id'].unique()

# 用户种类数

users_num = users.shape[0]

# 电影种类数

items_num = items.shape[0]

print('用户种类数: ' + str(users_num) + ' \n电影种类数: ' + str(items_num))

# 输入数据格式转换

# apyori.apriori模块要求输入数据的格式为list的list

# 例如:[[itemA, itemB], [itemA, itemC], [itemD, itemE]]

from functools import partial

def items_to_list(data, user_id):

item_list = data.loc[data['user_id']==user_id]['item_id'].tolist()

return item_list

func = partial(items_to_list, df)

item_list_list = list(map(func, users))

# 使用apyori.apriori模块

from apyori import apriori

associations = apriori(item_list_list, min_support = 0.2, min_confidence = 1.0, min_lift = 4)

rule = list(associations)

# 查看规则

itemA = list(rule[0][2][0][0])

itemB = list(rule[0][2][0][1])

print(f'关联规则: \n\t观看 电影{itemA} 的人会观看 电影{itemB}')

print(f'评估结果:\n\tSupport: {rule[0][1]:.3}\n\tConfidence: {rule[0][2][0][2]:.3}\n\tLift : {rule[0][2][0][3]:.3}')

itemC = list(rule[1][2][0][0])

itemD = list(rule[1][2][0][1])

print(f'\n关联规则: \n\t观看 电影{itemC} 的人会观看 电影{itemD}')

print(f'评估结果:\n\tSupport: {rule[1][1]:.3}\n\tConfidence: {rule[1][2][0][2]:.3}\n\tLift : {rule[1][2][0][3]:.3}')

后记:

被前辈指出这个apyori模块的star数和contributor数比较少,而且文档也不是很全面,最近更新为2018年3月,比较久远。

建议使用mlxtend模块:star数和contributor数远多于apyori模块,文档总结很全面,而且指标中不止支持度、置信度、lift值,还增加了leverage和conviction。

安装也很简单,pip直接安装:

pip install mlxtend

或使用anaconda:

conda install mlxtend --channel conda-forge

代码块待更新~

python关联分析代码_1行代码实现关联分析(Apriori)算法相关推荐

  1. python数学公式编辑工具_1行代码搞定Latex公式编写,这个4.6M的Python小插件,堪称论文必备神器...

    原标题:1行代码搞定Latex公式编写,这个4.6M的Python小插件,堪称论文必备神器 来源:量子位 关注前沿科技 萧箫 发自 凹非寺 量子位 报道 | 公众号 QbitAI 萧箫 发自 凹非寺 ...

  2. python数据分析图表展示_1行代码实现Python数据分析:图表美观清晰,自带对比功能丨开源...

    公众号关注 "视学算法" 设为 "星标",DLCV消息即可送达! 萧箫 发自 凹非寺 转自 | 量子位 你是否也在朋友圈看过这样的小广告: 「你要悄悄学Pyth ...

  3. python编程小游戏代码-Python小游戏之300行代码实现俄罗斯方块

    前言 本文代码基于 python3.6 和 pygame1.9.4. 俄罗斯方块是儿时最经典的游戏之一,刚开始接触 pygame 的时候就想写一个俄罗斯方块.但是想到旋转,停靠,消除等操作,感觉好像很 ...

  4. python小游戏源码-Python小游戏之300行代码实现俄罗斯方块

    Python小游戏之300行代码实现俄罗斯方块 来源:中文源码网 浏览: 次 日期:2019年11月5日 [下载文档: Python小游戏之300行代码实现俄罗斯方块.txt ] (友情提示:右键点上 ...

  5. python写百行代码可运行_56 岁潘石屹学俩月 Python ,写下百行代码

    原标题:56 岁潘石屹学俩月 Python ,写下百行代码 By 超神经 内容导读:跨界王潘石屹在近期迷上了编程,不仅高调宣布学习 Python,拜老师,还隔三差五晒出自己的「编程课作业」,和网友进行 ...

  6. python 数据比对 函数_1行代码实现Python数据分析:图表美观清晰,自带对比功能丨开源...

    原标题:1行代码实现Python数据分析:图表美观清晰,自带对比功能丨开源

  7. tex中让公式和文字在一行_1行代码搞定LaTeX公式编写,这个4.6M的Python小插件,堪称论文必备神器...

    点击上方"深度学习工坊",选择加"星标" 重磅干货,第一时间送达 萧箫 发自 凹非寺 本文转载自:量子位(QbitAI) 写论文时,手敲成堆的计算公式,被虐到头 ...

  8. 爬虫python代码-Python爬虫教程:200行代码实现一个滑动验证码

    Python爬虫教程:教你用200行代码实现一个滑动验证码 做网络爬虫的同学肯定见过各种各样的验证码,比较高级的有滑动.点选等样式,看起来好像挺复杂的,但实际上它们的核心原理还是还是很清晰的,本文章大 ...

  9. python爬虫代码-Python爬虫教程:200行代码实现一个滑动验证码

    Python爬虫教程:教你用200行代码实现一个滑动验证码 做网络爬虫的同学肯定见过各种各样的验证码,比较高级的有滑动.点选等样式,看起来好像挺复杂的,但实际上它们的核心原理还是还是很清晰的,本文章大 ...

最新文章

  1. Oracle 10g R2 RAC手动打补丁PSU(10.2.0.5.19)
  2. web前端技术分享:详解模块化require 和 import的区别
  3. 求生2本地服务器怎么修改参数,《求生之路2》服务器指令及难度参数设置(难度篇)...
  4. codeUp 2031 To fill or not to fill 复杂贪心
  5. matlab案例_基于matlab和frost平台的cassie案例足式机器人运动学和动力学计算实现过程...
  6. 简述计算机通信网络的技术指标,计算机网络基础知识之数据通信中的主要技术指标...
  7. python中如何移动图形工作站_如何在Python中使用Kriging插入工作站数据?
  8. 计算机集群用什么网络,什么是计算机系统集群?
  9. Coaching 企业教练
  10. 旧版sai笔刷_最详细的SAI笔刷设置教程,非常全面详细!
  11. 进行日常记账后,怎样导出表格
  12. 公众号敏感词检测工具
  13. 基于照片标记的广州市旅游流特征简单分析(上)
  14. 使用EditPlus替换文件中的某一字符为换行符
  15. 区块链钱包开发(Android篇)
  16. 配音兼职平台有那些,配音兼职靠谱的平台?
  17. BZOJ3838 : [Pa2013]Raper
  18. AE 二次开发。请考虑更改其中一个程序集的“嵌入互操作类型”属性。
  19. AT、CVT、双离合有什么优缺点?
  20. 177本名著浓缩成了177句话 http://sns.linuxpk.com/space-57013-do-blog-id-16689.html

热门文章

  1. Linux 系统必须掌握的文件_【all】
  2. 10.05 最初对Linux的了解,对Shell的认识
  3. percentiles of live data capture
  4. android设备不自带sqlite3问题(sqlite3 not found)
  5. SQL2005合理的索引设计
  6. LINQ : 如何为LINQ TO SQL实现自定义业务逻辑
  7. 解决使用Navicat等工具进行连接登录mysql的1130错误,无法使用Ip远程连接的问题(mysql为8.0版本)
  8. React Native Android启动白屏的一种解决方案上
  9. CORS跨域实现思路及相关解决方案
  10. GET和POST提交乱码解决方案