在 Redshift 上创建 Apriori 项集
Create Apriori itemset on Redshift
我的目标是使用 Apriori 算法从在 AWS Redshift 上创建的购买 table 中找出有趣的见解。购买 table 如下所示 table。
-------------
ID | product
1 A
1 B
1 C
2 A
2 C
我能够计算产品的频率并过滤掉那些频率较低的观察结果。但是,我很难在 AWS Redshift 环境中创建项目集的规则。这就是我想要得到的:
------------------
itemset | count(*)
A,B 1
A,C 2
B,C 1
购买中有 1000 多种产品 table 所以我想学习如何编写有效且高效的查询来解决这个问题。谢谢。
使用自连接:
select t1.product, t2.product, count(*)
from t t1 join
t t2
on t1.id = t2.id and t1.product < t2.product
group by t1.product, t2.product;
这会将项目集分为两列。您也可以将它们连接在一起:
select t1.product || ',' || t2.product, count(*)
from t t1 join
t t2
on t1.id = t2.id and t1.product < t2.product
group by t1.product, t2.product
order by t1.product || ',' || t2.product;
Here 是 SQL Fiddle 说明代码有效。
我的目标是使用 Apriori 算法从在 AWS Redshift 上创建的购买 table 中找出有趣的见解。购买 table 如下所示 table。
-------------
ID | product
1 A
1 B
1 C
2 A
2 C
我能够计算产品的频率并过滤掉那些频率较低的观察结果。但是,我很难在 AWS Redshift 环境中创建项目集的规则。这就是我想要得到的:
------------------
itemset | count(*)
A,B 1
A,C 2
B,C 1
购买中有 1000 多种产品 table 所以我想学习如何编写有效且高效的查询来解决这个问题。谢谢。
使用自连接:
select t1.product, t2.product, count(*)
from t t1 join
t t2
on t1.id = t2.id and t1.product < t2.product
group by t1.product, t2.product;
这会将项目集分为两列。您也可以将它们连接在一起:
select t1.product || ',' || t2.product, count(*)
from t t1 join
t t2
on t1.id = t2.id and t1.product < t2.product
group by t1.product, t2.product
order by t1.product || ',' || t2.product;
Here 是 SQL Fiddle 说明代码有效。