Counter Strike
Популярное оружие в Counter-Strike
В этом уроке вы напишете код, который покажет, какое оружие встречается чаще всего в датасете csgo_round_snapshots.csv.
Что считаем "популярностью"
В датасете есть столбцы:
ct_weapon_X- сколько единиц оружияXу команды Counter-Terrorists в раундеt_weapon_X- сколько единиц оружияXу команды Terrorists в раунде
Мы будем считать популярность так:
- Берём все столбцы
ct_weapon_*иt_weapon_*. - Делаем очистку данных: убираем пистолеты (стартовое оружие раунда).
- Складываем значения по всем строкам.
- Сортируем по убыванию.
- Берём топ оружия.
В рамках курса считаем, что одна строка в файле - это один раунд.
Важный этап работы Data Engineer
Исключение лишних категорий (в нашем случае пистолетов) - это этап очистки данных.
Это нормальная часть цикла работы Data Engineer:
сбор данных → очистка → преобразование → расчёты и проверка результата.
Упражнение 1. Найти столбцы оружия
Добавьте в counterstrike.py функцию:
PISTOL_WEAPONS = {
'glock',
'usps',
'p2000',
'p250',
'fiveseven',
'tec9',
'deagle',
'elite',
'cz75auto',
'r8revolver',
}
def is_non_pistol_weapon_column(column_name: str) -> bool:
if not (column_name.startswith('ct_weapon_') or column_name.startswith('t_weapon_')):
return False
weapon_name = column_name.replace('ct_weapon_', '').replace('t_weapon_', '')
return weapon_name not in PISTOL_WEAPONS
def get_weapon_columns():
with open('csgo_round_snapshots.csv', 'r', encoding='utf-8') as file:
reader = csv.reader(file)
header = next(reader)
ct_weapon_columns = [
col for col in header if col.startswith('ct_weapon_') and is_non_pistol_weapon_column(col)
]
t_weapon_columns = [
col for col in header if col.startswith('t_weapon_') and is_non_pistol_weapon_column(col)
]
print("Исключаем пистолеты как стартовое оружие раунда.")
print(f"Counter-Terrorists weapon columns (без пистолетов): {len(ct_weapon_columns)}")
print(f"Terrorists weapon columns (без пистолетов): {len(t_weapon_columns)}")
return ct_weapon_columns, t_weapon_columnsЗапуск:
python counterstrike.py get_weapon_columnsОжидаемо: столбцов станет меньше, потому что пистолеты будут исключены.
Упражнение 2. Посчитать популярность оружия для Counter-Terrorists и Terrorists
Добавьте функцию:
def calculate_weapon_totals():
with open('csgo_round_snapshots.csv', 'r', encoding='utf-8') as file:
reader = csv.DictReader(file)
ct_cols, t_cols = get_weapon_columns()
totals = {}
for row in reader:
for col in ct_cols:
weapon = col.replace('ct_weapon_', '')
totals[weapon] = totals.get(weapon, 0) + int(float(row[col]))
for col in t_cols:
weapon = col.replace('t_weapon_', '')
totals[weapon] = totals.get(weapon, 0) + int(float(row[col]))
return totalsУпражнение 3. Вывести топ-10 самого популярного оружия
Добавьте функцию:
def top_10_weapons():
totals = calculate_weapon_totals()
sorted_totals = sorted(totals.items(), key=lambda item: item[1], reverse=True)
print("Топ-10 самого популярного оружия:")
for idx, (weapon, count) in enumerate(sorted_totals[:10], start=1):
print(f"{idx}. {weapon}: {count}")Запуск:
python counterstrike.py top_10_weaponsУпражнение 4 (дополнительно). Сравнить Counter-Terrorists и Terrorists отдельно
Сделайте две отдельные функции:
top_weapons_ct()top_weapons_t()
Идея:
- в первой учитывайте только
ct_weapon_*и исключайте пистолеты; - во второй только
t_weapon_*и исключайте пистолеты.
Это покажет, отличается ли популярное оружие по сторонам.
Мини-чеклист
- Скрипт запускается через
python counterstrike.py <имя_функции>. - В коде используются только нужные столбцы
ct_weapon_*иt_weapon_*, без пистолетов. - Вы видите топ оружия в терминале.
- Вы можете объяснить, как считается популярность оружия по раундам.