Проблема с группировкой данных о кликах по идентификатору пользователя - PullRequest
0 голосов
/ 01 мая 2020

У меня есть таблица, которая показывает каждый клик из писем за прошлый год, импортированных с pandas, который выглядит следующим образом (фиктивные данные):

|  User ID   | Url Clicked |  UTM Keyword |
|:-----------|------------:|:------------:|
| 5c6d252    | http://web..|    Banana    |
| 5d67h1a    | http://web..|    orange    |
| 6jd79d2    | http://web..|     NaN      |
| 6i8x678    | http://web..|     Apple    |
| 5c6d252    | http://web..|     Apple    |
| 6dd79d2    | http://web..|    Banana    |

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

Например, пользователь '5c6d252' нажимал ссылки с ключевым словом 'Banana' 5 раз, но щелкнул «Orange» 2 раза.

Это фрейм данных с более чем 1,8 млн строк и 150 различными ключевыми словами, поэтому я не уверен, как к этому подойти, особенно если не знаком с использованием Python.

Первоначально я пытался использовать этот запрос в SQL, но с 150 различными ключевыми словами это не показалось эффективным.

WITH fruit_clicks AS (
SELECT UserID,
CASE 
    WHEN UTMKeyword = 'Banana' THEN 1
    ELSE 0
END AS 'banana_click',
CASE 
    WHEN UTMKeyword = 'Orange' THEN 1
    ELSE 0
END AS 'orange_click',
CASE 
    WHEN UTMKeyword = 'Apple' THEN 1
    ELSE 0
END AS 'apple_click',
CASE 
    WHEN UTMKeyword = 'Mango' THEN 1
    ELSE 0
END AS 'mango_click',
CASE 
    WHEN UTMKeyword IS NULL THEN 1
    ELSE 0
END AS 'no_fruit_click'
FROM 2019_table)

SELECT UserID, SUM(banana_click), SUM(orange_click), SUM(apple_click), SUM(mango_click), SUM(no_fruit_click)
FROM fruit_clicks
GROUP BY UserID;

1 Ответ

0 голосов
/ 01 мая 2020

Ваш запрос немного многословен. Вы можете использовать:

SELECT UserID,
       SUM(CASE WHEN UTMKeyword = 'Banana' THEN 1 ELSE 0 END),
       SUM(CASE WHEN UTMKeyword = 'Orange' THEN 1 ELSE 0 END),
       SUM(CASE WHEN UTMKeyword = 'Apple' THEN 1 ELSE 0 END),
       . . .
FROM 2019_table
GROUP BY UserID;

В некоторых базах данных вы можете упростить это до:

SELECT UserID,
       SUM(UTMKeyword = 'Banana'),
       SUM(UTMKeyword = 'Orange'),
       SUM(UTMKeyword = 'Apple'),
       . . .
FROM 2019_table
GROUP BY UserID;

Вы можете сгенерировать строки SUM(), используя электронную таблицу, Python или запрос по базе данных. Например:

select distinct '       sum(case when UTMKeyword = ''' || UTMKeyword || ''' then 1 else 0 end) as ' || cnt_UTMKeyword
from 2019_table;

|| - стандартный оператор конкатенации. Ваша база данных может использовать что-то другое.

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