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

代码块待更新~

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值