用Python在Mysql的帮助下简单实现Apriori

尽管这个方法很老,但是很适合入门先体验一下XD 而且效率还是可以的,结果也令人满意。

1 建表

首先打开Mysql


create table if not exists fc_project_tags(
    project_id int(11) not null default '0',
    tag_name varchar(50) not null default '0',
    primary key (project_id,tag_name)
)engine=MyISAM default Charset=latin1;

这里用到了一个engine=MyISAM。即指定了储存引擎

这里写图片描述
这里可以详见https://blog.csdn.net/redbloodbody/article/details/58185240,写的十分详细了。
数据库的具体文件在:
https://github.com/megansquire/masteringDM/blob/master/ch2/fc_project_tags.sql.gz
这里书中作者推荐用source命令导入。懒得打字,详见百度。

2 检阅一下这个表

可以先简单查询一下

select count(*)
from fc_project_tags;

353400

select count(DISTINCT project_id)
from fc_project_tags;

46510

select count(DISTINCT tag_name)
from fc_project_tags;

11006

select tag_name ,count(project_id)
from fc_project_tags
group by 1
having count(project_id) >= 2325
order by 2 desc;

注意这里的having,不能用where,见本博客的某篇MYSQL文章。
具体来说,where子句中是不能用聚集函数作为条件表达式的。
以及,这里的group by 1是指以选择的第一列进行groupby聚集
以下是运行的结果的截取

tag_name, count(project_id)

‘GPL’, ‘21182’
‘POSIX’, ‘16875’
‘Linux’, ‘16288’
‘C’, ‘10292’
‘OS Independent’, ‘10180’
‘Software Development’, ‘9619’
……
Scientific/Engineering 2679
Games/Entertainment 2528
BSD 2497
Desktop Environment 2335

3 开始分析

准备工作:
代码在https://github.com/megansquire/masteringDM/tree/master/ch2
这段程序是为了计算总的篮子的数量(可以通过最小支持阈值的有关联的组合,bzw.有序对,的数量)
多一嘴,这段程序和书中有些许不同的是他更新了了一小部分,导入了getpass标准库。

同时之前的pip重新下了一个版本,所以path忘记重新配置了,提醒一定要加入系统变量。为此装第三方库的时候折腾了好久。
关于用到的itertools库可以看这个。https://blog.csdn.net/c465869935/article/details/51598388
提供了包括但不限于count容器,十分好用。

开始运行:
1)首先应该输入的参数是MINSUPPORTPCT,default是5%,这里的支持度设置的够高的话可以省掉很多时间,同时也会忽略一些不是特别明显的组合,换句话说可能会漏掉一些有价值的信息。

# set threshold as a percent (example, 5% of Freecode baskets is about 2325)
MINSUPPORTPCT = 5

2)链接数据库需要的相关参数

dbhost = 'localhost'
dbschema = 'test'
dbuser = 'root'
dbpasswd = 'xxxxxx'
dbport = 3306
dbcharset = 'utf8mb4'

port注意一下,如果没有特殊需求就选3306就好了。
3)这里定义了找出size=2的频繁项的函数,用到了之前通过最低阈值的size=1的频繁项。这里的数学原理是:如果一个项的任何一个子项不是频繁项,那么它也一定不是一个频繁项。所以只需要check size=1里已经保存好的项并将其组合就可以了,并且计算、保存他的support和confidence。同样的,这里应该删去一部分confidence不高/由于各种原因并不可靠的关联,这个confidence的阈值同样可以调整。这里用到了一些intertoos里的函数,具体作用见上面的链接里的文章。

def findDoubletons():
    print("======")
    print("Frequent doubletons found:")
    print("======")
    # use the list of allSingletonTags to make the doubleton candidates
    doubletonCandidates = list(itertools.combinations(allSingletonTags, 2))
    
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值