如何在 RapidMiner 中为关联规则挖掘准备交易数据集?

how to prepare transactional dataset for association rule mining in RapidMiner?

我有这样的数据集:

abelia,fl,nc
esculentus,ct,dc,fl,il,ky,la,md,mi,ms,nc,sc,va,pr,vi
abelmoschus moschatus,hi,pr*

dataset link:

我的数据集没有任何属性声明。我想在我的数据集上应用关联规则。我想像这个数据集一样。

plant   fl  nc  ct  dc  .....
abelia  1   1   0   0
.....

ELKI 包含一个 parser 可以按原样读取输入。也许 Rapidminer 也这样做——或者你应该为这种格式编写一个解析器!使用 ELKI 参数

-dbc.in /tmp/plants.data
-dbc.parser SimpleTransactionParser -parser.colsep ,
-algorithm itemsetmining.associationrules.AssociationRuleGeneration
-itemsetmining.minsupp 0.10
-associationrules.interestingness Lift
-associationrules.minmeasure 7.0
-resulthandler ResultWriter -out /tmp/rules

我们可以找到所有支持度>=10%,提升度>=7.0的关联规则,写入文件夹/tmp/rules(目前没有可视化 ELKI 中的关联规则数):

比如这个找到规则

sc, va, ga: 3882 --> nc, al: 3529 : 7.065536626573297
va, nj: 4036 --> md, pa: 3528 : 7.206260507764794

所以出现在南卡罗来纳州、弗吉尼亚州和佐治亚州的植物也将出现在北卡罗来纳州和阿拉巴马州。 NC 并不令人感到意外,因为它介于 SC 和 VA 之间,但阿拉巴马州很有趣。

第二条规则是弗吉尼亚州和新泽西州暗示马里兰州(介于两者之间)和宾夕法尼亚州。也是一个非常合理的规则,得到 3528 个案例的支持。

我用这个 python 脚本完成了我的工作:

import csv

abbrs = ['states', 'ab', 'ak', 'ar', 'az', 'ca', 'co', 'ct',
     'de', 'dc', 'of', 'fl', 'ga', 'hi', 'id', 'il', 'in',
     'ia', 'ks', 'ky', 'la', 'me', 'md', 'ma', 'mi', 'mn',
     'ms', 'mo', 'mt', 'ne', 'nv', 'nh', 'nj', 'nm', 'ny',
     'nc', 'nd', 'oh', 'ok', 'or', 'pa', 'pr', 'ri', 'sc',
     'sd', 'tn', 'tx', 'ut', 'vt', 'va', 'vi', 'wa', 'wv',
     'wi', 'wy', 'al', 'bc', 'mb', 'nb', 'lb', 'nf', 'nt',
     'ns', 'nu', 'on', 'qc', 'sk', 'yt']

with open("plants.data.txt", encoding = "ISO-8859-1") as f1, open("plants.data.csv", "a") as f2:
csv_f2 = csv.writer(f2, delimiter=',')
csv_f2.writerow(abbrs)
csv_f1 = csv.reader(f1)
for row in csv_f1:
    new_row = [row[0]]
    for abbr in abbrs:
        if abbr in row:
            new_row.append(1)
        else:
            new_row.append(0)
    csv_f2.writerow(new_row)

如果所有的值都是单个词,可以使用Rapidminer中的文本挖掘扩展将它们转化为变量,然后运行对它们进行关联规则挖掘