Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import os
- from collections import Counter
- import numpy as np
- import pandas as pd
- import requests
- """Заменяем player_id на свой"""
- player_id = 177411785
- file = f'{player_id}_data.csv'
- """
- Проверяется наличие файла {player_id}_data.csv, чтобы не делать повторный запрос к API
- Из ответа на запрос формируется pandas-таблица и сохраняется в csv-файл.
- API не предоставляет инфу о победах/поражениях, но есть данные о победе Radiant и о слоте игрока
- Слоты 0-4 -- Radiant
- Слоты 128-132 -- Dire
- На основе этой инфы определяются результаты матчей
- Таблица сохраняется в файл
- """
- if not os.path.exists(file):
- link = f'https://api.opendota.com/api/players/{player_id}/matches'
- request = requests.get(link)
- data = request.json()
- df = pd.DataFrame(data)
- conditions = [
- (df['radiant_win'] == True) & (df['player_slot'] <= 4),
- (df['radiant_win'] == True) & (df['player_slot'] >= 128),
- (df['radiant_win'] == False) & (df['player_slot'] >= 128),
- (df['radiant_win'] == False) & (df['player_slot'] <= 4),
- ]
- choices = ['win', 'lose', 'win', 'lose']
- df['result'] = np.select(condlist=conditions, choicelist=choices)
- df.to_csv(file, index_label='n')
- """
- Считываются данные из файла
- Применяется фильтр по типу лобби (7 = Ranked)
- Создаётся список всех результатов (win/lose)
- """
- matches = pd.read_csv(file, index_col=0)
- ranked_matches = matches[matches["lobby_type"] == 7]
- results = [match.result for match in ranked_matches.iloc]
- def subsamples(matches_results):
- """Генератор, разбивающий выборку на группы по 50 результатов"""
- for i in range(0, len(matches_results), 50):
- yield matches_results[i:i + 50]
- """
- Генерируется список побед на каждые 50 матчей
- Последняя подвыборка длиной меньше 50 не учитывается
- """
- wins = [Counter(sample)['win'] for sample in subsamples(results) if len(sample) == 50]
- """Последний штрих -- расчёт и вывод среднеквадратичного отклонения"""
- print(np.std(wins))
Add Comment
Please, Sign In to add comment