Используя Python, я нахожу оптимальные комбинации оружия, которые, надеюсь, помогут вам выиграть желанный куриный ужин.

Некоторое время назад я скачал PUBG Mobile из любопытства, чтобы посмотреть, о чем идет речь. Чтобы дать общее представление о том, как работает игра: вы спускаетесь с парашютом с самолета, затем вы бежите в здания и начинаете искать защитное снаряжение, боеприпасы и оружие, затем вы либо убиваете других, либо вас убивают другие, и последняя команда, которая выжила выигрывает Куриный ужин. Идея звучит достаточно просто, да? Затем вы вбегаете в здание и обнаруживаете, что смотрите на пять разных пушек, названия которых не дают представления о том, чем они отличаются друг от друга. Каждый игрок может вооружиться двумя пушками, но откуда мне было знать, какое из двух выбрать? Я, вероятно, выбирал неправильные, потому что мои противники продолжали убивать меня, хотя во многих случаях я начинал стрелять первым. Поэтому я решил, почему бы не воспользоваться этой возможностью, чтобы освежить свои навыки в Python (вы знаете, что вы действительно устали, когда вам действительно нужно использовать горячие клавиши Google для запуска кода на Python), и, надеюсь, найти что-то, что могло бы дать мне лучшее шанс забрать домой куриный ужин? Просто небольшое усмотрение: прошло почти два года с тех пор, как я в последний раз работал над проектом с использованием Python, поэтому предложения о том, как лучше кодировать, определенно приветствуются! Как всегда, мой код размещен на GitHub.

Веб-парсинг набора данных

Я искал готовые наборы данных по статистике оружия PUBG, но не нашел ни одного (Kaggle имеет набор данных по статистике игроков, полученный из официального API, который может служить интересным набором данных для других анализов). Тем не менее, я нашел веб-сайты, которые предоставляли статистику по оружию, поэтому я приступил к парсингу официальной PUBG Wiki с помощью BeautifulSoup. Я не буду вдаваться в подробности процесса парсинга веб-страниц, потому что я хотел бы больше сосредоточиться на частях анализа данных, поэтому я выделю только некоторые части.

Хотя есть страница со статистикой для всего оружия, я хотел иметь возможность классифицировать их по соответствующим типам (например, были ли они штурмовые винтовки или легкие пулеметы), поэтому я закончил соскребать с соответствующей страницы для каждого типа оружия перед объединением 8 фреймов данных в один фрейм данных.

Я также удалил недостающие и странные данные, заменив их данными с других сайтов (см. Титры в конце этой статьи), в которых указаны сопоставимые значения для другого оружия, которое не требовало замены в текущем наборе данных.

После этого я преобразовал все числовые столбцы в тип данных с плавающей запятой, чтобы разрешить арифметические операции в последующем анализе данных, прежде чем экспортировать фрейм данных в виде файла csv.

Особенности оружия

Ниже приводится краткое описание того, что означает каждая функция (информация скопирована и вставлена ​​из PUBG Wiki с минимальными изменениями).

  • DMG (урон от удара)

Прямой урон наносится до брони и других смягчающих факторов

  • SPD (начальная скорость пули)

Скорость, с которой пуля выходит из дула, в метрах в секунду. Более высокие значения означают, что против удаленных движущихся целей требуется меньше упреждения.

  • PWR (мощность удара по телу)

Сколько силы приложено к тряпичной кукле, когда в нее стреляют. Более высокие значения означают более сильный толчок.

  • МАГНИТ (боеприпасы на магазин)

Максимальное количество боеприпасов, которое может храниться в магазине.

  • TBS (время между кадрами)

Минимальное время в секундах, которое должно пройти, прежде чем из оружия можно будет выстрелить снова.

  • Режим (режимы стрельбы)

Режимы, которые может выбрать это оружие. Оружие с пометкой «Одиночный» , «Авто» в этом поле указывает, что оно может выбирать между режимом одиночного огня или автоматическим режимом стрельбы.

  • BSHT (серийная съемка)

Если возможно, сколько выстрелов делается за одну серию.

  • BDEL (задержка пакета)

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

  • Боеприпасы (тип боеприпасов)

Тип боеприпасов, которые принимает оружие.

  • CAP (емкость)

Также известен как объем или объем занимаемого инвентарного пространства.

  • ATTCH (вложения)

Что крепится к самому оружию. Примеры приспособлений включают прицел, который позволяет вести снайперскую стрельбу на большие расстояния.

  • БДМГ 0, БДМГ 1, БДМГ 2, БДМГ 3 (уровень повреждения тела 0, уровень повреждения тела 1, уровень повреждения тела 2, уровень повреждения тела 3)

Сумма урона, нанесенного телу при: экипировке без доспехов, в жилете 1-го уровня, в жилете 2-го уровня и в жилете 3-го уровня, соответственно.

  • HDMG 0, HDMG 1, HDMG 2, HDMG 3 (уровень повреждения головы 0, уровень повреждения головы 1, уровень повреждения головы 2, уровень повреждения головы 3)

Сумма урона, нанесенного голове, когда: не экипирована броня, экипирована броня 1-го уровня, экипирована броня 2-го уровня и экипирована броня 3-го уровня, соответственно.

  • Тип

Переменная, которую я создал, чтобы отразить, к какому типу оружия она принадлежит.

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

Исследовательский анализ данных

Теперь, когда все мельчайшие детали сглажены, пришло время повеселиться. Давайте попробуем найти некоторые тенденции среди различных функций, построив корреляционную матрицу.

Быстрый взгляд на корреляционную матрицу показывает, что повреждения тела разных уровней идеально коррелируют друг с другом, как и повреждения головы разных уровней. Следовательно, мы можем просто выбрать один из уровней для просмотра, давайте просто воспользуемся BDMG 1 и HDMG 1. Повреждение тела и повреждение головы также сильно коррелируют друг с другом, что определенно не удивительно, но пока мы будем продолжать обе переменные в нашей корреляционной матрице на всякий случай. Что удивительно, так это низкая корреляция между повреждениями и повреждениями тела и головы. Поскольку повреждения тела и головы являются факторами, которые напрямую влияют на здоровье игрока, мы просто удалим повреждения из корреляционной матрицы.

Глядя на «очищенную» корреляционную матрицу, кажется, что существует компромисс между повреждением и временем между выстрелами (у оружия с более высоким уроном время между выстрелами больше), уроном и скоростью (у оружия с большим уроном меньше скорость пули), уроном и боеприпасов на магазин (оружие с более высоким уроном может нести меньше боеприпасов на магазин). Среди этих трех компромиссов первые два более важны для победы в бою, поэтому мы сосредоточимся на них. Кроме того, учитывая, что повреждение тела и повреждение головы сильно взаимосвязаны, я еще больше упросту ситуацию, с этого момента и далее буду рассматривать только повреждение головы. Вкратце, мы рассмотрим 3 переменных: уровень повреждения головы 1 (HDMG 1), начальную скорость пули (SPD) и время между выстрелами (TBS).

Сначала построим тепловую карту по типу оружия. Прежде чем показать настоящую тепловую карту, я кратко резюмирую сокращения различных типов оружия.

  • Штурм: штурмовые винтовки
  • Лук: арбалеты
  • DMR: специализированная стрелковая винтовка
  • LMG: легкий пулемет
  • SG: Дробовик
  • SMG: Пистолеты-пулеметы
  • SR: Снайперские винтовки

Это еще раз подтверждает тенденции, которые мы обнаружили ранее - оружие с более высоким уроном, как правило, имеет более медленную скорость пули и большее время между выстрелами (мы можем просто взять дробовики в качестве примера). Как упоминалось в начале этой статьи, каждый игрок может вооружиться двумя пушками, поэтому я хотел выяснить, какие пары наиболее выгодны в свете этих двух компромиссов.

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

Как мы видим, самый большой компромисс между уроном и временем между выстрелами, за которым следуют урон и скорость.

Парето эффективность

Когда речь идет о компромиссах, лучшими комбинациями являются те, которые эффективны по Парето. Что именно является эффективным по Парето? Проще говоря, если у вас есть две цели, комбинация, эффективная по Парето, - это комбинация, при которой вы не можете добиться улучшения одной цели, не ухудшая себе положение в другой. Предположим, у вас есть 2 цели, X и Y, где существует компромисс между этими двумя целями.

Точка A не является эффективной по Парето, потому что существует точка (например, A ’), в которой вам лучше по крайней мере по одной из целей, но хуже по другой. Точки A ’и A’ ’являются эффективными по Парето, потому что невозможно получить более высокое значение для одной цели, не ухудшая положение в другой. Например, переходя от точки A ’к A’ ’, мы получаем больший X, но меньший Y. Фронт Парето просто соединяет все точки, эффективные по Парето.

В нашем случае у нас есть 2 компромисса, поэтому давайте рассмотрим их отдельно. Мы начнем с большего компромисса между уроном и временем между выстрелами.

Как видно выше, эффективными по Парето комбинациями являются:

  1. Арбалет и пистолеты-пулеметы
  2. Арбалет и ручные пулеметы
  3. Арбалет и специальные стрелковые винтовки
  4. Дробовик и пистолеты-пулеметы
  5. Арбалет и дробовики

Мы не можем сказать, что одна из этих комбинаций лучше, чем другая, но если мне нужна комбинация, которая дает примерно одинаковые результаты как по урону, так и по времени между выстрелами, возможно, было бы неплохо выбрать комбинацию 2 или 3.

А как насчет компромисса между уроном и скоростью?

В этом случае эффективными по Парето комбинациями являются:

  1. Штурмовые винтовки и ручные пулеметы
  2. Штурмовые винтовки и снайперские винтовки
  3. Легкие пулеметы и снайперские винтовки
  4. Специальные стрелковые и снайперские винтовки
  5. Штурмовые винтовки и дробовики
  6. Легкие пулеметы и дробовики
  7. Дробовики и снайперские винтовки
  8. Арбалет и дробовики

Опять же, мы не можем сделать вывод, что одна из этих комбинаций лучше, чем другая, но если я хочу, чтобы комбинация была одинаково эффективна как по урону, так и по скорости, было бы неплохо выбрать комбинацию 5 или 6.

В конце концов, это действительно зависит от того, хотите ли вы расставить приоритеты между уроном и временем между выстрелами или между уроном и начальной скоростью пули. Затем анализ эффективности по Парето предоставит несколько комбинаций оружия, из которых вы можете выбрать, в зависимости от того, предпочитаете ли вы комбинацию, которая лучше справляется с одной целью по сравнению с другой, или с той, которая одинаково работает с обеими задачами. Я бы выбрал второе, так как моя цель проведения этого анализа - найти пару орудий, которые дополняют друг друга, имея разные сильные стороны.

При этом я надеюсь, что этот анализ поможет вам выиграть куриный ужин!

Кредиты за набор данных

Кредит за предоставление ссылочного кода для очистки веб-страниц

Кредит для пограничного кода Парето