Подготовка данных для алгоритма правил ассоциации (apriori) - PullRequest
0 голосов
/ 18 февраля 2020

Мне нужна помощь в подготовке данных для проекта, над которым я работаю. У меня есть 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

(это всего лишь образец, который я сделал .. У меня есть 70 тыс. Строк). Любая помощь будет потрясающей. SQL / Python / excel - инструменты, с которыми я знаю, как работать. Так что, если это возможно, ответ в одном из них будет лучшим. Спасибо!

Ответы [ 2 ]

0 голосов
/ 18 февраля 2020

Это невероятно просто с 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
0 голосов
/ 18 февраля 2020

Вы можете использовать ROW_NUMBER () OVER (PARTITION BY NUMBER ORDER BY LETTER) (внутренний запрос), затем, используя подзапросы, вы можете выбрать буквы в виде столбцов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...