Guest User

Untitled

a guest
Jul 26th, 2021
216
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.52 KB | None | 0 0
  1. import os
  2. from collections import Counter
  3.  
  4. import numpy as np
  5. import pandas as pd
  6. import requests
  7.  
  8.  
  9. """Заменяем player_id на свой"""
  10. player_id = 177411785
  11. file = f'{player_id}_data.csv'
  12.  
  13.  
  14. """
  15. Проверяется наличие файла {player_id}_data.csv, чтобы не делать повторный запрос к API
  16. Из ответа на запрос формируется pandas-таблица и сохраняется в csv-файл.
  17.  
  18. API не предоставляет инфу о победах/поражениях, но есть данные о победе Radiant и о слоте игрока
  19. Слоты 0-4 -- Radiant
  20. Слоты 128-132 -- Dire
  21.  
  22. На основе этой инфы определяются результаты матчей
  23. Таблица сохраняется в файл
  24. """
  25. if not os.path.exists(file):
  26.     link = f'https://api.opendota.com/api/players/{player_id}/matches'
  27.  
  28.     request = requests.get(link)
  29.     data = request.json()
  30.  
  31.     df = pd.DataFrame(data)
  32.  
  33.     conditions = [
  34.         (df['radiant_win'] == True) & (df['player_slot'] <= 4),
  35.         (df['radiant_win'] == True) & (df['player_slot'] >= 128),
  36.         (df['radiant_win'] == False) & (df['player_slot'] >= 128),
  37.         (df['radiant_win'] == False) & (df['player_slot'] <= 4),
  38.     ]
  39.  
  40.     choices = ['win', 'lose', 'win', 'lose']
  41.     df['result'] = np.select(condlist=conditions, choicelist=choices)
  42.  
  43.     df.to_csv(file, index_label='n')
  44.  
  45.  
  46. """
  47. Считываются данные из файла
  48. Применяется фильтр по типу лобби (7 = Ranked)
  49. Создаётся список всех результатов (win/lose)
  50. """
  51. matches = pd.read_csv(file, index_col=0)
  52. ranked_matches = matches[matches["lobby_type"] == 7]
  53. results = [match.result for match in ranked_matches.iloc]
  54.  
  55.  
  56. def subsamples(matches_results):
  57.     """Генератор, разбивающий выборку на группы по 50 результатов"""
  58.     for i in range(0, len(matches_results), 50):
  59.         yield matches_results[i:i + 50]
  60.  
  61.  
  62. """
  63. Генерируется список побед на каждые 50 матчей
  64. Последняя подвыборка длиной меньше 50 не учитывается
  65. """
  66. wins = [Counter(sample)['win'] for sample in subsamples(results) if len(sample) == 50]
  67.  
  68. """Последний штрих -- расчёт и вывод среднеквадратичного отклонения"""
  69. print(np.std(wins))
Add Comment
Please, Sign In to add comment