Под впечатлением от знакомства с новой для себя областью анализа данных по имени
Process mining решил применить это на практике. Выяснилось много сюрпризов.
Для анализа есть готовые тулзы, например, бесплатный и мощный ProM или упрощённый юзер-френдли, но платный, Disco. Всё написано на джаве, кстати. К обеим программам, я так понимаю, имеет отношение автор курса. Я решил использовать ProM, потому что ключ к Disco, выданный всем на курсе, скоро протухнет, а ProM останется. К тому же вроде как более мощный.
Первое дело - загрузка логов, чтобы затем построить по ним модель процесса и получить много разных радостей. Сюрприз! ProM не умеет загружать CSV. Ну то есть в теории умеет, и демонстрационные логи загружает, но что-то своё - фиг. Проблема общеизвестная, народ на форумах ищет ответ постоянно. Есть хак под названием “замена запятой на точку с запятой” и иногда он помогает. Но только иногда. Мне не помог. Притом что мой файл был весьма тупого вида, без изысков с многострочными записями, хитрых типов данных или экранирования символов. Падает с непонятными ошибками в джаве.
Авторы курса рекомендуют для этого использовать Disco (платную), которая всё нормально загружает и может выгрузить в формате XES, понятный ПроМу. Диско с ключом для участников курса, кстати, имеет лимит на 1 миллион записей. На самом деле 1 миллион записей - это немного, мои не бог весть какие датасеты содержат порядка 2-3 миллионов, так что из лимита я вылез моментально и не смог нормально всё загрузить.
Ещё у них же есть специальная программа Nitro, за 500 евро в месяц делающая нужную конвертацию. При этом она всё равно ограничена 10 миллионами записей, если нужно больше - плати 2000 евро в месяц. 10 миллионов - это тоже не так много, мои данные имеют шанс быстро разрастись до этого лимита. Короче, всё как бы вынуждает.
В теории есть ещё некий ProM Import Framework, но я не добился от него успешной конвертации за внятное время. Вроде не падает, в лог пишет, что работает. Но судя по скорости появления там записей, он обрабатывает каждую строку секунд по 10. Это как надо было написать программу, чтобы она так работала? Конвертация коротких текстовых строк по 10 секунд на запись??? Значит миллион строк будет конвертировать 11 дней? Спасибо. Тоже, кстати, на джаве написана.
Хотел сам сконвертить свой CSV в XES, благо последний - всего лишь XML формат, и даже есть питоновский модуль, который его умеет создавать. Думал, сейчас сделаю простенький конвертер, выложу на github, пусть обломаются. Но нифига. Конвертер я написал, файлик сгенерил, никаких явных ошибок внутри не заметил, но (magic!) ProM отказывается его загружать. Тоже с непонятной ошибкой. Содержательно и структурно мой файл не отличается от экспорта из Disco, есть разница в порядке некоторых полей или нескольких технических полях типа названия программы (будет время, попробую тупо все технические поля из экспорта Disco перенести в свой файл и найти тот самый набор, который делает файл понятным, но это потом). Вот и гадай, чего именно не так.
Прекрасная история, вроде как основной формат для сырых логов невозможно загрузить в программу, цель которой обработка и анализ логов событий.
На текущий момент я плюнул на эти разбирательства с экспортом и просто проредил свой файл, во-первых, выкинув явно не нужные мне события, а во-вторых, сделав случайную выборку по пользователям. И в таком режиме я провёл анализ, который хотел. Но глобально это всё равно не выход.
Такие вот радости процесс майнинга. Обнаружите способ обхода таких проблем, дайте знать.
Отдельное издевательство - десктопные программы для дата майнинга, написанные на Java. Которая сама по себе в десктопном варианте тормозна и жрёт кучу памяти. Как раз всё то, что критично в анализе данных.