【问题标题】:Data preparation for association rules algorithm (apriori)关联规则算法的数据准备(先验)
【发布时间】:2020-02-18 14:15:05
【问题描述】:

我在为我正在进行的项目准备数据方面需要帮助。 我有 2 列 csv 文件,一列包含订单号,第二列包含购买的商品。

这是我所拥有的示例:

1 A
1 B
1 C
2 A 
2 D 
3 F
3 G
3 K

我需要将其转换为:

1 A B C
2 A D
3 F G K

(这只是我制作的一个示例。我有 70k 行) 任何帮助都会很棒。 SQL / Python / excel 是我知道如何使用的工具。因此,如果可能的话,其中之一的答案将是最好的。 谢谢!

【问题讨论】:

  • 如果是SQL,你用的是哪个dbms?
  • 我可以使用 SQL server 或 Jupyter (Ptyhon 3) notebook 进行工作流

标签: python sql dataframe


【解决方案1】:

您可以使用ROW_NUMBER () OVER (PARTITION BY NUMBER ORDER BY LETTER)(内部查询),然后使用子查询您可以选择字母作为列。

【讨论】:

    【解决方案2】:

    这对于 Python 和 collections.defaultdict 来说非常简单:

    import collections
    order_to_products = collections.defaultdict(list)
    with open('input.csv') as inp:
       for l in inp:
          order_id, *products = l.split()
          order_to_products[order_id].extend(products)
    for order_id, products in order_to_products.items():
       print(order_id, ' '.join(products))
    

    (作为额外的奖励,这实际上支持具有多个产品的输入行。)

    例如

    $ cat > input.csv
    1 A
    1 B
    1 C
    2 A
    2 D
    3 F
    3 G
    3 K
    $ python3
    >>> import collections
    >>> order_to_products = collections.defaultdict(list)
    >>> with open('input.csv') as inp:
    ...    for l in inp:
    ...       order_id, *products = l.split()
    ...       order_to_products[order_id].extend(products)
    ...
    >>> for order_id, products in order_to_products.items():
    ...    print(order_id, ' '.join(products))
    ...
    1 A B C
    2 A D
    3 F G K
    

    【讨论】:

    • @YoavBarzilai 它给了我准确的预期输出;我在运行日志中进行了编辑。
    • 嘿,感谢您的快速回复,但这是我得到的脚本输出:“defaultdict(, {'ן»¿basket,item_code': [] , '1890,535': [], '1890,527': [], '1890,593': [], '1890,569': [], '1890,503': [], '1890,501 ': [], '1890,1': [], '1891,8.41E+12': [], '1891,7.29E+12': [], '1891,1': [], '1891, 565': [], '1891,569': [], '1891,571': [], '1892,529': [],"
    • 显然您的数据不是空格分隔的,那么,正如您在原始帖子中所暗示的那样。使用l.split(',') 而不是l.split() 以逗号分隔。此外,从8.41E+12 来看,数据已经损坏(长数字已转换为科学计数法)。
    • 谢谢,真的帮了我。现在我有一个 txt 文件,其中包含我需要的列表列表。 (每个列表都是一个订单,属性用','分隔)。你知道我如何将它作为行放在熊猫数据框中吗? (每一行都假设是一个订单,每个单元格都是数字(产品)。?
    • @YoavBarzilai 这是另一个问题,但pandas.pydata.org/pandas-docs/stable/reference/api/… 会有所帮助。
    猜你喜欢
    • 2023-04-01
    • 1970-01-01
    • 2020-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-11
    • 2016-01-12
    • 1970-01-01
    相关资源
    最近更新 更多