Я пытаюсь проанализировать поведение пользователя на основе журнала пользователя в системе. Журнал с сервера имеет несколько столбцов, как показано ниже (упрощенно):
user_id - время - service_type
1 --- 1534889600 --- A
2 --- 1534889696 --- B
2 --- 1534890148 --- B
1 --- 1534890243 --- А
1 --- 1534890496 --- A
1 --- 1534890516 --- B
2 --- 1534890924 --- A
1 --- 1534891115 --- A
1 --- 1534891136 --- А * * тысяча двадцать-одна
* 2 * 1 022 --- 1534891372 --- B * * тысячу двадцать-три
«время» соответствует времени Unix, а «тип_службы» - это услуга, которую пользователь приобрел за определенную отметку времени (зарегистрированную как «время»). После окончания периода использования пользователям необходимо повторно выкупить. Пользователи не могут одновременно использовать две разные услуги - им нужно переключаться.
Я пытаюсь получить максимальное время пребывания в одной и той же службе конкретным пользователем. Например, это для user_id == 1
user_id - время - service_type
1 --- 1534889600 --- A
1 --- 1534890243 --- A
1 --- 1534890496 --- A
1 --- 1534890516 --- B
1 --- 1534891115 --- A
1 --- 1534891136 --- A
Таблица возврата должна быть:
user_id - service_type - longest_stay
1 --- --- 916
1 --- B --- 599
916 рассчитывается по времени [3] - время [0], а 599 рассчитывается по времени [4] - время [3]. Существует другой временной интервал времени [5] - время [4] для услуги A, но значение равно 21, следовательно, не самое длительное пребывание для службы A (предположим, что последняя запись очень близка к текущей отметке времени). Ожидается, что окончательный результат для всего анализа будет следующим:
user_id - service_type - longest_stay
1 --- --- 916
1 --- B --- 599 * * одна тысяча пятьдесят-семь
* +1058 * 2 --- --- х
2 --- B --- х
* * 3 тысячи шестьдесят-два --- --- х
3 --- B --- х
Я всего несколько месяцев в Python, поэтому изо всех сил пытаюсь справиться с этим спор данных. Набор данных содержит более миллиона строк, 150k уникальных user_id и дюжину service_type. Стартап слишком мал, чтобы иметь профессионального исследователя данных. Основатель спросил, могу ли я временно надеть шляпу в этот период :(.
Я пробовал группировать по методу, используя agg. Хорошо сочетается с простыми вычислениями, такими как count, sum, max. Тем не менее, я не знаю, как проверить, есть ли изменение в службе, чтобы инициировать вычисление того, как долго пользователь оставался в той же службе до переключения.
Существует также сложная вещь для первой записи пользователя, где нет предыдущей записи для сравнения, если есть разница в услугах.
Я нашел близкую тему, которая в некоторой степени относится к моей. Этот счетчик рассчитывает самые долгие дни использования пользователя.
Найти самый длинный ряд последовательных нулей для каждого пользователя в кадре данных
Буду очень признателен за любые указания и объяснения.