import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
df = pd.read_excel('Олимпиада_Уникум.xlsx', engine='openpyxl')
print("=== ИСХОДНЫЕ ДАННЫЕ ===")
print(df)
print("\n")
print("=== ДАННЫЕ ИЗ СТОЛБЦОВ ===")
for col in df.columns:
print(f"\n{col}:")
print(df[col].values)
task_cols = ['Задача 1', 'Задача 2', 'Задача 3', 'Задача 4']
print("\n=== СТАТИСТИКА ПО ЗАДАЧАМ ===")
for col in task_cols:
print(f"\n{col}:")
print(f" Среднее: {df[col].mean():.2f}")
print(f" Сумма: {df[col].sum():.2f}")
print(f" Мин: {df[col].min():.2f}")
print(f" Макс: {df[col].max():.2f}")
print(f" Медиана: {df[col].median():.2f}")
df['Общий балл'] = df[task_cols].sum(axis=1)
rating_table = df.sort_values('Общий балл', ascending=False).reset_index(drop=True)
print("\n=== РЕЙТИНГОВАЯ ТАБЛИЦА ===")
print(rating_table[['id', 'фамилия', 'имя', 'класс', 'Общий балл']])
rating_table.to_excel('Рейтинговая_таблица.xlsx', index=False, engine='openpyxl')
stats_data = []
for col in task_cols:
stats = {
'Задача': col,
'Среднее': df[col].mean(),
'Сумма': df[col].sum(),
'Минимум': df[col].min(),
'Максимум': df[col].max(),
'Медиана': df[col].median()
}
stats_data.append(stats)
stats_df = pd.DataFrame(stats_data)
stats_df.to_excel('Статистика_по_задачам.xlsx', index=False, engine='openpyxl')
plt.figure(figsize=(12, 6))
plt.subplot(1, 2, 1)
plt.hist(df['Общий балл'], bins=10, edgecolor='black', alpha=0.7)
plt.xlabel('Общий балл')
plt.ylabel('Количество участников')
plt.title('Распределение общих баллов')
plt.grid(True, alpha=0.3)
plt.subplot(1, 2, 2)
df[task_cols].mean().plot(kind='bar', color='skyblue', edgecolor='black')
plt.xlabel('Задача')
plt.ylabel('Средний балл')
plt.title('Средние баллы по задачам')
plt.xticks(rotation=45)
plt.grid(True, alpha=0.3)
plt.tight_layout()
plt.savefig('Гистограмма_баллов.png', dpi=300)
plt.show()