diff --git a/individual_1.py b/individual_1.py new file mode 100644 index 0000000..718cc66 --- /dev/null +++ b/individual_1.py @@ -0,0 +1,79 @@ +import os +import sys + +import matplotlib.pyplot as plt +import pandas as pd + +import main as mn + +def calculate_team_points(filename): + df = pd.read_csv(filename) + # Считаем очки команд за периоды, овертаймы и булиты + h1, a1 = mn.parse_score(df, 'Период_1') + h2, a2 = mn.parse_score(df, 'Период_2') + h3, a3 = mn.parse_score(df, 'Период_3') + oth, ota = mn.parse_score(df, 'Овертайм') + soh, soa = mn.parse_score(df, 'Буллиты') # Счет по буллитам + + # Складываем очки, получая итоговый счет + home_goals = h1 + h2 + h3 + away_goals = a1 + a2 + a3 + tie = home_goals == away_goals + + # Проверка кто проиграл/выйграл по итогу матча или овертайма, или буллита + home_win = (home_goals > away_goals) | (tie & ((oth > ota) | ((oth == ota) & (soh > soa)))) + away_win = (away_goals > home_goals) | (tie & ((ota > oth) | ((oth == ota) & (soa > soh)))) + + home_overtime_loss = tie & ((ota > oth) | ((oth == ota) & (soa > soh))) + away_overtime_loss = tie & ((oth > ota) | ((oth == ota) & (soh > soa))) + + # Подсчитываем итоговое кол-во очков + home_points = 2 * home_win.astype(int) + home_overtime_loss.astype(int) + away_points = 2 * away_win.astype(int) + away_overtime_loss.astype(int) + + # Соединяем 2 таблицы + points = pd.concat([ + pd.DataFrame({'Команда': df['Команда_1'], 'О': home_points}), + pd.DataFrame({'Команда': df['Команда_2'], 'О': away_points}), + ]) + + # Собираем таблицу с помощью groupby, + return points.groupby('Команда')['О'].sum().sort_values(ascending=False) + + +def show_points_histogram(filename, output=None): + points = calculate_team_points(filename) # Получаем очки + + plt.figure(figsize=(12, 7)) # Создаем таблицу 12 на 7 дюймов + plt.bar(points.index, points.values, color='steelblue') # Строим столбчатую диаграмму, по очкам по y + plt.title('Гистограмма набранных командами очков') + plt.xlabel('Команда') + plt.ylabel('Очки') + plt.xticks(rotation=75, ha='right') # Чтобы не накладывались подписи, мы выравниваем и вращаем их + plt.grid(axis='y', alpha=0.3) # Отображение координатной сетки + plt.tight_layout() # Автоматическая настройка отступов + + # Сохранение если указан нужный аргумент + if output: + plt.savefig(output, dpi=200) + print(f'Гистограмма сохранена в файл: {output}') + else: + plt.show() + + +def main(): + if len(sys.argv) not in (2, 3): + print('Использование: python3 individual_1.py [файл_для_сохранения]') + sys.exit(1) + + filename = sys.argv[1] + output = sys.argv[2] if len(sys.argv) == 3 else None + + if not os.path.isfile(filename): + raise FileNotFoundError(f'Файл не найден: {filename}') + + show_points_histogram(filename, output) + + +if __name__ == '__main__': + main()