Форум программистов, компьютерный форум, киберфорум
Python: Решение задач
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
1 / 1 / 0
Регистрация: 07.10.2022
Сообщений: 12

Мини Когортный анализ

06.10.2024, 00:49. Показов 599. Ответов 2

Студворк — интернет-сервис помощи студентам
Пожалуйста помогите найти ошибку в моем решение. Вот условие:
Однажды тимлиду стартапа «Успешный успех» попалась на глаза статья про когортный анализ и у него появилась идея разделить пользователей на группы в зависимости от месяца регистрации на маркетплейсе и проанализировать динамику совершения покупок пользователями каждой когорты в отдельности. В ходе аналитической проработки данной задачи командой стартапа были выработаны детальные требования к расчету:

1)Для удобства решили присвоить когортам наименования вида YYYY-MM (четыре цифры года и две цифры месяца формирования), например, 2022-02 (февраль 2022 г.).
2)Считать днем регистрации пользователя дату самой ранней записи в логе, относящуюся к данному пользователю, округленную до дня (без учета часов и минут).
3)Засчитывать в GMV все суммы заказов по всем событиям оформления заказа.
4)GMV каждого пользователя разбить на группы по неделям, прошедшим со дня регистрации пользователя. Так, например, если между датой регистрации пользователя, округленной до суток, и моментом оформления заказа прошло от 0 до 6 полных дней (включительно), GMV таких событий засчитывается в первую неделю, если пользователь оформил заказ с 7-го по 13-й день с даты регистрации — GMV засчитывается во вторую неделю, и т.д.
5)Просуммировать GMV всех пользователей из одной и той же когорты по неделям и округлить до целых миллионов рублей.
Формат ввода
Входной файл log.tsv имеет формат TSV с заголовком и содержит следующие поля данных:

- userid — идентификатор пользователя;
- timestamp — дата и время события в формате ISO;
- action — действие, совершенное пользователем, может принимать одно из значений:
- mainpage — вход на главную страницу сайта;
- search — поиск товаров в каталоге;
- product — открытие страницы с карточкой продукта;
- category — открытие страницы с карточкой категории;
- cart — страница добавления товара в корзину;
- checkout — оформление заказа;
- confirmation — подтверждение заказа;
- value — стоимость добавляемого товара (для события cart), либо сумма заказа (для событий checkout и confirmation) в рублях;
- testids — идентификаторы тестовых выборок, в которых находится пользователь.
Все поля за исключением поля testids гарантированно заполнены для каждой записи лога. Значение поля testids может быть пустым.

Формат вывода
Выведите GMV по когортам в разбивке по неделям со дня регистрации пользователя. Каждая строка выводимых данных должна иметь следующий формат (\t - символ табуляции):

<когорта>\t|\t<GMV 1-й недели>\t<GMV 2-й недели>\t<GMV 3-й недели>\t<GMV 4-й недели>
Строки должны быть упорядочены по возрастанию наименований когорт.

Выводимые значения GMV округлите до целых миллионов рублей. Например, значение 40532342.0 должно быть округлено до 41.

Для файла log.tsv из примера вывод должен быть таким:

2022-02 | 72 33 25 19
2022-03 | 29 16 13 13
2022-04 | 23 10 10 9
2022-05 | 21 8 8 7
2022-06 | 16 5 5 5
2022-07 | 15 2 2 0
Так же прикрепил кусочек данного файла. Я не прошу решить за меня, но может кто-то увидит мой косяк, если взять второй месяц первую неделю у меня получается только 69 вместо 72...Код:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import csv
 
with open('log.tsv', 'r') as f:
    file = csv.reader(f, delimiter='\t')
    d = {}
    next(file)
    flag = 1
    month = ''
    ar = [[], [], [], []]
    for i in file:
        if flag:
            flag = 0
            month = i[1].split('T')[0].split('-')[1]
        if month != i[1].split('T')[0].split('-')[1]:
            print(f'2022-{month}\t|\t{sum(ar[0])}\t{sum(ar[1])}\t{sum(ar[2])}\t{sum(ar[3])}')
            d = {}
            ar = [[], [], [], []]
        if len(d.get(i[0], [])) == 0:
            d[i[0]] = i[1].split('T')[0].split('-')[-1]
        if i[2] == 'checkout':
            if 0 <= int(i[1].split('T')[0].split('-')[2]) - int(d.get(i[0])) <= 6:
                ar[0] = ar[0] + [(int(i[3].split('.')[0]))]
            if 7 <= int(i[1].split('T')[0].split('-')[2]) - int(d.get(i[0])) <= 13:
                ar[1] = ar[1] + [(int(i[3].split('.')[0]))]
            if 14 <= int(i[1].split('T')[0].split('-')[2]) - int(d.get(i[0])) <= 20:
                ar[2] = ar[2] + [(int(i[3].split('.')[0]))]
            if 21 <= int(i[1].split('T')[0].split('-')[2]) - int(d.get(i[0])) <= 27:
                ar[3] = ar[3] + [(int(i[3].split('.')[0]))]
        month = i[1].split('T')[0].split('-')[1]
Вложения
Тип файла: txt logis.txt (18.3 Кб, 6 просмотров)
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
06.10.2024, 00:49
Ответы с готовыми решениями:

Зависает windows 7 x64 и мини-тема на счёт видеокарты(мини во вторую очередь)
В общем проблема такая: каждый день либо bsod(дампы в архиве) либо комп просто останавливается и всё(то-есть всё застывает ни звуков...

Мини-дрель, мини-шлифмашина, ProsKit PT-5501I
Знаю, что подобный инструмент весьма востребован. Но он либо дорогой (Dremel), либо очень некачественный. У ProsKit появилась очень...

Мини-библиотека или мини-прокат
Добрый день! Ищу мини-библиотеку или мини-прокат в версии 8.2. Хочу разобрать её по частям и на основе её сделать нужную мне программу....

2
Заблокирован
06.10.2024, 01:18
Python
1
int(i[1].split('T')[0].split('-')[2]) - int(d.get(i[0]))
Тут похоже проблема, что вы отнимаете числа, а не дату, например если пользователь зарегистрировался 28 февраля, а событие произошло 1 марта ваша разница будет 1 - 28 = -27 что неверно. Нужно использовать datetime, остальное по мелочи
1
1 / 1 / 0
Регистрация: 07.10.2022
Сообщений: 12
06.10.2024, 16:49  [ТС]
Спасибо, действительно так сделать лучше, но мне все равно до конца непонятно почему в самый первый месяц, первую неделю у меня не досчитывает, по крайней мере вначале должно совпадать.
А получается если пользователь зарегистрировался в апреле, а оформил заказ в июне, мы вообще не можем включить его ни в какую группу, потому что прошло более 27 дней?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
06.10.2024, 16:49
Помогаю со студенческими работами здесь

Мини-библиотека или мини-прокат
Добрый день! Ищу мини-библиотеку или мини-прокат в версии 8.2. Хочу разобрать её по частям и на основе её сделать нужную мне программу....

Анализ ценных бумаг (построить Гистограмму и провести анализ)
Здравствуйте! Помогите пожалуйста разобраться с заданием. Для исходных данных нужно определить влияние даты покупки ценной бумаги...

Анализ сетевого трафика используя регрессионный анализ
Не знал, куда написать, MatLAb очень близок этому инструменту (Weka) Многие в курсе, что из сетевого пакета можно достать 41 атрибут для...

анализ св-ва DataSource, анализ *.frm & *.frx
есть уже готовая прога, где связь с БД сделана через DAO и надо выяснить как таблица на форме связана с БД. Например - есть формочка с...

Мини ап PR
То, что есть глобальные изменения в отношении PR страниц, это и так понятно... Интересует вопрос такого характера: есть ли в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru