python关联分析代码_1行代码实现关联分析(Apriori)算法
本文不涉及关联分析算法的计算原理,只注重代码实现。
最近公司分了个任务,要求写一篇面向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)算法相关推荐
- python数学公式编辑工具_1行代码搞定Latex公式编写,这个4.6M的Python小插件,堪称论文必备神器...
原标题:1行代码搞定Latex公式编写,这个4.6M的Python小插件,堪称论文必备神器 来源:量子位 关注前沿科技 萧箫 发自 凹非寺 量子位 报道 | 公众号 QbitAI 萧箫 发自 凹非寺 ...
- python数据分析图表展示_1行代码实现Python数据分析:图表美观清晰,自带对比功能丨开源...
公众号关注 "视学算法" 设为 "星标",DLCV消息即可送达! 萧箫 发自 凹非寺 转自 | 量子位 你是否也在朋友圈看过这样的小广告: 「你要悄悄学Pyth ...
- python编程小游戏代码-Python小游戏之300行代码实现俄罗斯方块
前言 本文代码基于 python3.6 和 pygame1.9.4. 俄罗斯方块是儿时最经典的游戏之一,刚开始接触 pygame 的时候就想写一个俄罗斯方块.但是想到旋转,停靠,消除等操作,感觉好像很 ...
- python小游戏源码-Python小游戏之300行代码实现俄罗斯方块
Python小游戏之300行代码实现俄罗斯方块 来源:中文源码网 浏览: 次 日期:2019年11月5日 [下载文档: Python小游戏之300行代码实现俄罗斯方块.txt ] (友情提示:右键点上 ...
- python写百行代码可运行_56 岁潘石屹学俩月 Python ,写下百行代码
原标题:56 岁潘石屹学俩月 Python ,写下百行代码 By 超神经 内容导读:跨界王潘石屹在近期迷上了编程,不仅高调宣布学习 Python,拜老师,还隔三差五晒出自己的「编程课作业」,和网友进行 ...
- python 数据比对 函数_1行代码实现Python数据分析:图表美观清晰,自带对比功能丨开源...
原标题:1行代码实现Python数据分析:图表美观清晰,自带对比功能丨开源
- tex中让公式和文字在一行_1行代码搞定LaTeX公式编写,这个4.6M的Python小插件,堪称论文必备神器...
点击上方"深度学习工坊",选择加"星标" 重磅干货,第一时间送达 萧箫 发自 凹非寺 本文转载自:量子位(QbitAI) 写论文时,手敲成堆的计算公式,被虐到头 ...
- 爬虫python代码-Python爬虫教程:200行代码实现一个滑动验证码
Python爬虫教程:教你用200行代码实现一个滑动验证码 做网络爬虫的同学肯定见过各种各样的验证码,比较高级的有滑动.点选等样式,看起来好像挺复杂的,但实际上它们的核心原理还是还是很清晰的,本文章大 ...
- python爬虫代码-Python爬虫教程:200行代码实现一个滑动验证码
Python爬虫教程:教你用200行代码实现一个滑动验证码 做网络爬虫的同学肯定见过各种各样的验证码,比较高级的有滑动.点选等样式,看起来好像挺复杂的,但实际上它们的核心原理还是还是很清晰的,本文章大 ...
最新文章
- Oracle 10g R2 RAC手动打补丁PSU(10.2.0.5.19)
- web前端技术分享:详解模块化require 和 import的区别
- 求生2本地服务器怎么修改参数,《求生之路2》服务器指令及难度参数设置(难度篇)...
- codeUp 2031 To fill or not to fill 复杂贪心
- matlab案例_基于matlab和frost平台的cassie案例足式机器人运动学和动力学计算实现过程...
- 简述计算机通信网络的技术指标,计算机网络基础知识之数据通信中的主要技术指标...
- python中如何移动图形工作站_如何在Python中使用Kriging插入工作站数据?
- 计算机集群用什么网络,什么是计算机系统集群?
- Coaching 企业教练
- 旧版sai笔刷_最详细的SAI笔刷设置教程,非常全面详细!
- 进行日常记账后,怎样导出表格
- 公众号敏感词检测工具
- 基于照片标记的广州市旅游流特征简单分析(上)
- 使用EditPlus替换文件中的某一字符为换行符
- 区块链钱包开发(Android篇)
- 配音兼职平台有那些,配音兼职靠谱的平台?
- BZOJ3838 : [Pa2013]Raper
- AE 二次开发。请考虑更改其中一个程序集的“嵌入互操作类型”属性。
- AT、CVT、双离合有什么优缺点?
- 177本名著浓缩成了177句话 http://sns.linuxpk.com/space-57013-do-blog-id-16689.html
热门文章
- Linux 系统必须掌握的文件_【all】
- 10.05 最初对Linux的了解,对Shell的认识
- percentiles of live data capture
- android设备不自带sqlite3问题(sqlite3 not found)
- SQL2005合理的索引设计
- LINQ : 如何为LINQ TO SQL实现自定义业务逻辑
- 解决使用Navicat等工具进行连接登录mysql的1130错误,无法使用Ip远程连接的问题(mysql为8.0版本)
- React Native Android启动白屏的一种解决方案上
- CORS跨域实现思路及相关解决方案
- GET和POST提交乱码解决方案