Skip to content

Cubetutor и Data Mining

25/02/2014

Недавно решил сделать очередной мини-проект — скачать все кубы с Cubetutor.com и найти там связанные «блоки», из которых кубы строятся — комбо, мана-фиксинг и т.п. Скачать листы оказалось делом несложным — я экспортировал один из кубов в текстовом виде, скопировал curl-вызовы в консоли Chrome (оказалось что нужен и запрос к странице и POST-запрос на сохранение) и подставил их в цикл в bash-скрипте. Задержку между скачиваниями я поставил в 6 секунд, поэтому все кубы по айдишникам экспортировались почти сутки. После этого из получившихся текстовых файлов я удалил те, в которых были страницы ошибок (удалённые кубы, видимо).

Подготовка данных и майнинг

В результате получилось примерно 6000 текстовых файлов, в которых на каждой строке было название карты. Теперь надо было найти часто встречающиеся комбинации карт. Вначале я думал обойтись только Питоном. Я с помощью простого скриптика преобразовал эти файлы в строки одного большого CSV-файла, нашёл реализацию алгоритма Apriori на Питоне и скормил туда csv-шку, задав дефолтные значения support и confidence. Результата я так и не дождался. Потом уже понял что задал слишком низкий support и скрипт просто вылетал когда кончалась память.

Было решено взять какое нибудь другое решение для самого майнинга. Остановился на SPMF — написанном на Java фреймворке для дата-майнинга. Но SPMF принимает данные только в строго определённом формате — работает только с числами, разделёнными пробелами. Надо было конвертировать всю эту кучу файлов в новый вид. В результате был написан скриптик на Питоне, который читал файлы по одному, составлял по ходу дела словарь встреченных карт и записывал наборы айдишников строками в исходный файл для майнинга. Словарь «айдишник — имя карты» дампился потом отдельно.

На получившемся файлике получилось сделать и Apriori (часто встречающиеся наборы), и FPGrowth (то же самое, но быстрее), и получение ассоциативных правил в стиле «если в наборе уже есть девять шоклендов, с большой вероятностью встретится и десятый». Собственно, полный результат последнего майнинга оказался таким огромным, что я решил ограничиться только правилами с confidence > 90.

Собственно правила из набора извлекаются следующим образом. Фреймворку передаётся файл с исходными данными, название алгоритма (FPGrowth_association_rules), значение support (в какой доле исходных наборов должна встречаться комбинация, чтобы мы обратили на неё внимание) и confidence (с какой минимальной вероятностью должно выполняться найденное правило). В целом вызов выглядит так:

java -jar spmf.jar run FPGrowth_association_rules cubes.txt output.txt 35% 90%

Опытным путём было установлено, что если попросить support меньше 30, файл наборов разрастается больше трёх гигабайт. В результате получается набор правил следующего вида:

1044 1069 1212 ==> 1307 #SUP: 2050 #CONF: 0,94776

На питоне я сделал скриптик, который подгружал созданный на первом шаге словарь айдишников и преобразовывал эти ответы во что то более читаемое:

(2050) "Path to Exile" "Shriekmaw" "Mother of Runes" ==> Vampire Nighthawk

В результате в получившихся правилах на первом месте оказались, как и ожидалось, шокленды, потом — Зендикаровские фечки, потом фечки из Onslaught. Потом шло огромное количество правил в стиле «что бы в кубе ни лежало, положи Oblivion Ring / Lightning Bolt / Swords to Plowshares.» В результате было решено отсеивать некоторые карты ещё на этапе подготовки, чтобы не засоряли таблицу правил. Комбо-наборы, которые я ожидал увидеть (Pestermite/Deceiver Exarch, например) найти таким образом не получилось — слишком в малом количестве кубов они лежат вместе. Это я уже проверил отдельным скриптиком. Для своего куба я пока не нашёл каких то интересных запчастей, поэтому продолжаю бросать туда более-менее стандартный картон :).

Реклама

From → Uncategorized

Добавить комментарий

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s

%d такие блоггеры, как: