Объединить два файла CSV и сопоставить данные

У меня есть два файла CSV, первый такой:

Книга1:

ID,TITLE,SUBJECT
0001,BLAH,OIL
0002,BLAH,HAMSTER
0003,BLAH,HAMSTER
0004,BLAH,PLANETS
0005,BLAH,JELLO
0006,BLAH,OIL
0007,BLAH,HAMSTER
0008,BLAH,JELLO
0009,BLAH,JELLO
0010,BLAH,HAMSTER
0011,BLAH,OIL
0012,BLAH,OIL
0013,BLAH,OIL
0014,BLAH,JELLO
0015,BLAH,JELLO
0016,BLAH,HAMSTER
0017,BLAH,PLANETS
0018,BLAH,PLANETS
0019,BLAH,HAMSTER
0020,BLAH,HAMSTER

А затем второй CSV с элементами, связанными с первым списком, где идентификатор является общим атрибутом между ними.

Книга2:

ID,ITEM
0001,PURSE
0001,STEAM
0001,SEASHELL
0002,TRUMPET
0002,TRAMPOLINE
0003,PURSE
0003,DOLPHIN
0003,ENVELOPE
0004,SEASHELL
0004,SERPENT
0004,TRUMPET
0005,CAR
0005,NOODLE
0006,CANNONBALL
0006,NOODLE
0006,ORANGE
0006,SEASHELL
0007,CREAM
0007,CANNONBALL
0007,GUM
0008,SERPENT
0008,NOODLE
0008,CAR
0009,CANNONBALL
0009,SERPENT
0009,GRAPE
0010,SERPENT
0010,CAR
0010,TAPE
0011,CANNONBALL
0011,GRAPE
0012,ORANGE
0012,GUM
0012,SEASHELL
0013,NOODLE
0013,CAR
0014,STICK
0014,ORANGE
0015,GUN
0015,GRAPE
0015,STICK
0016,BASEBALL
0016,SEASHELL
0017,CANNONBALL
0017,ORANGE
0017,TRUMPET
0018,GUM
0018,STICK
0018,GRAPE
0018,CAR
0019,CANNONBALL
0019,TRUMPET
0019,ORANGE
0020,TRUMPET
0020,CHERRY
0020,ORANGE
0020,GUM

Настоящие наборы данных — это миллионы записей, поэтому заранее извиняюсь за мой простой пример.

Проблема, которую мне нужно решить, заключается в объединении и сопоставлении данных таким образом, чтобы я мог видеть, какие группы элементов чаще всего появляются вместе с одним и тем же идентификатором. (например, ВИНОГРАД, ЖЕСТЬ, РАКУШКА встречаются вместе 340 раз, АПЕЛЬСИН и ПАЛКА 89 раз и т. д.)

Затем мне нужно посмотреть, есть ли какие-либо изменения/отклонения в общих результатах общего вида при группировке по ТЕМЕ.

Инструменты, с которыми я знаком, — это Excel и SQL, но в моем распоряжении также есть PowerBI и Alteryx.

Полное раскрытие: не домашнее задание или работа, а волонтерский проект, поэтому я не знаком с такого рода манипуляциями с данными.

Заранее спасибо.


person A New Guy    schedule 26.04.2018    source источник
comment
Ожидаете ли вы, что после слияния три строки с ID 1: Blah и Oil совпадут с каждым из Purse, Stream и Seashell? Если это так, то в Alteryx это будет просто объединение по идентификатору, а затем агрегация (инструмент суммирования), группирующая по трем другим и подсчитывающая отдельные идентификаторы для каждой группы. Надеюсь, это поможет.   -  person johnjps111    schedule 26.04.2018
comment
PowerQuery в Excel может прекрасно выполнять слияние и суммирование. Можете ли вы привести пример того, как вы хотите, чтобы ваш вывод выглядел?   -  person Alexis Olson    schedule 26.04.2018


Ответы (4)


Решение Alteryx:

  1. Перетащите два файла .csv на свой холст (на моем рисунке они показаны как book1.csv и book2.csv; Alteryx создаст для вас инструменты «Ввод»).
  2. Перетащите инструмент «Объединить» и соедините два файла .csv с его входами; выберите «ID» в качестве поля соединения; отменить выбор «Right_ID» в качестве вывода, поскольку это просто дубликат «ID»
  3. Перетащите инструмент «Сводка» и соедините выход инструмента «Объединить» с входом инструмента «Сводка»; выберите все три выхода и добавьте как «группу по»... затем добавьте столбец идентификатора с «количеством»
  4. Перетащите инструмент обзора и соедините выходные данные сводки с входными данными инструмента обзора.
  5. запустить рабочий процесс

После всего этого щелкните инструмент обзора, и вы должны увидеть то, что видно на моем снимке экрана: (на котором показаны только первые десять строк вывода):

введите здесь описание изображения

person johnjps111    schedule 26.04.2018

+1 за участие в волонтерском проекте - я думаю, что любой, кто знает данные, может оказать большое влияние в поддержку своей любимой группы или дела.

Я бы просто вытащил 2 файла в Power BI как 2 отдельные таблицы (получить данные/из файла). Создайте связь между двумя таблицами на основе идентификатора (он может быть сгенерирован автоматически). Должно быть один ко многим.

Затем я бы добавил вычисляемый столбец в таблицу Book1, чтобы объединить связанные значения ITEM, например.

Items =
CALCULATE (
    CONCATENATEX (
        DISTINCT ( 'Book2'[ITEM] ),
        'Book2'[ITEM],
        ", ",
        'Book2'[ITEM], ASC
    )
)

Теперь вы можете использовать это поле Элементы в визуальных элементах (например, в таблице) вместе с Количество идентификаторов, чтобы получить частоту.

Добавление темы к копии таблицы (например, в поле столбцов матрицы) создаст ваш сгруппированный сценарий, или вы можете добавить слайсер темы.

Поскольку вы будете сравнивать подмножества разного размера, я бы изменил Количество идентификаторов на Показать значение как % от общей суммы.

person Mike Honey    schedule 26.04.2018

Немного другое решение с использованием Alteryx.

В этом наборе данных очень мало повторяющихся групп из 3 или 4 элементов. Вы можете выполнить анализ сходства двух элементов и получить вероятность групп из 3 или 4 элементов, или вы можете посчитать группы из 3 и 4 элементов по отдельности. Я полагаю, что вам нужно последнее, поскольку вероятность получить виноград с апельсинами может зависеть от того, есть ли у вас бананы в тележке или нет.

Во всяком случае, я не присоединялся к теме, пока не нашел все свои комбинации. Я нашел все комбинации, взяв декартово соединение двух, затем трех, затем четырех из исходного набора. Затем я удалил все дубликаты, следя за тем, чтобы элементы всегда располагались в алфавитном порядке в каждой строке. Затем я подсчитал появление каждой комбинации. По тому же шаблону можно добавить больше объединений для подсчета групп из 5, 6, 7...

Как только у вас будет подсчет вхождений, я присоединюсь к испытуемым, проведу этот анализ для каждой группы и сравним с общими результатами.

Аффинный анализ с помощью Alteryx

  • Я должен сообщить, что работаю на Alteryx.
person Ben    schedule 26.04.2018

Прежде всего, если вы используете Windows, просто перейдите в каталог, содержащий CSV, и напишите следующую команду:

copy pattern newfileName.csv
#example 
copy *.csv merged.csv

теперь вы создали один CSV-файл, файл слишком велик, теперь вы не можете его обработать один раз, в зависимости от вашего языка программирования вы можете использовать соответствующий способ, для python вы можете использовать генераторы для обработки построчно или панды, вы можете читать фрагмент по частям будет легко.

Я надеюсь, что это поможет вам.

person Ahmed Ghazey    schedule 01.08.2019
comment
Разве это не объединяет заголовки, если в каждом файле они были в первой строке? - person Sunny Patel; 07.10.2019
comment
Я думаю, что да, он объединяет заголовки - person Ahmed Ghazey; 27.10.2019