【问题标题】:Building the “transactions” Class for Association Rule Mining in SparkR using arules and apriori使用 arules 和 apriori 在 SparkR 中为关联规则挖掘构建“事务”类
【发布时间】:2019-03-22 08:57:18
【问题描述】:

我正在使用 SparkR 并尝试将“SparkDataFrame”转换为“事务”以挖掘项目/产品的关联。

我在此链接https://blog.aptitive.com/building-the-transactions-class-for-association-rule-mining-in-r-using-arules-and-apriori-c6be64268bc4 上找到了一个类似的示例,但这仅适用于您使用 R data.frame 的情况。我目前有这种格式的数据;

CUSTOMER_KEY_h PRODUCT_CODE

    1   SAVE
    1   CHEQ
    1   LOAN
    1   LOAN
    1   CARD
    1   SAVE
    2   CHEQ
    2   LOAN
    2   CTSAV
    2   SAVE
    2   CHEQ
    2   SAVE
    2   CARD
    2   CARD
    3   LOAN
    3   CTSAV
    4   SAVE
    5   CHEQ
    5   SAVE
    5   CARD
    5   LOAN
    5   CARD
    6   CHEQ
    6   CHEQ

并希望得到这样的结果;

CUSTOMER_KEY_h  PRODUCT_CODE
    1          {SAVE, CHEQ, LOAN, LOAN , CARD, SAVE}
    2          {CHEQ, LOAN, CTSAV, SAVE, CHEQ, SAVE, CARD, CARD}
    3          {LOAN, CTSAV}
    4          {SAVE}
    5          {CHEQ, SAVE, CARD, LOAN, CARD}
    6          {CHEQ, CHEQ}

或者,如果我可以在 SparkR 中获得这个 R 脚本的等价物 df2 <- apply(df,2,as.logical) 这会很有帮助。

【问题讨论】:

    标签: r apache-spark sparkr apriori arules


    【解决方案1】:

    arules 包与 SparkR 不兼容。如果你想探索 Spark 上的关联规则,你应该使用它自己的实用程序。先用collect_set合并记录:

    library(magrittr)
    
    df <- createDataFrame(data.frame(
      CUSTOMER_KEY_h = c(
        1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 4, 5, 5, 5, 5, 5, 6, 6),
      PRODUCT_CODE = c(
        "SAVE","CHEQ","LOAN","LOAN","CARD","SAVE","CHEQ","LOAN","CTSAV","SAVE",
        "CHEQ","SAVE","CARD","CARD","LOAN","CTSAV","SAVE","CHEQ","SAVE","CARD","LOAN",
        "CARD","CHEQ","CHEQ")
    ))
    
    baskets <- df %>% 
      groupBy("CUSTOMER_KEY_h") %>% 
      agg(alias(collect_set(column("PRODUCT_CODE")), "items"))
    

    适合模型(请查看spark.fpGrowth docs 以获取可用选项的完整列表):

    fpgrowth <- spark.fpGrowth(baskets)
    

    并用它来提取关联规则:

    arules <- fpgrowth <- spark.fpGrowth(baskets)
    
    arules %>% head()
    
            antecedent consequent confidence lift                                   
    1       CARD, LOAN       SAVE          1  1.5
    2       CARD, LOAN       CHEQ          1  1.5
    3 LOAN, SAVE, CHEQ       CARD          1  2.0
    4       SAVE, CHEQ       LOAN          1  1.5
    5       SAVE, CHEQ       CARD          1  2.0
    6       CARD, SAVE       LOAN          1  1.5
    

    如果你使用 Spark

    alias(collect_set(column("PRODUCT_CODE")), "items")
    

    expr("collect_set(PRODUCT_CODE) AS items")
    

    【讨论】:

      猜你喜欢
      • 2015-05-21
      • 1970-01-01
      • 2016-03-03
      • 2015-04-29
      • 2011-10-26
      • 2014-11-11
      • 2018-06-25
      • 2015-02-13
      • 1970-01-01
      相关资源
      最近更新 更多