Загрузка данных


import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

df = pd.read_excel('Олимпиада_Уникум.xlsx')

print(df)
print("\n")

for col in df.columns:
    print(f"\n{col}:")
    print(df[col].values)

task_cols = [col for col in df.select_dtypes(include='number').columns if col != 'id']

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)

stats_data = []
for col in task_cols:
    stats_data.append({
        'Задача': col,
        'Среднее': df[col].mean(),
        'Сумма': df[col].sum(),
        'Минимум': df[col].min(),
        'Максимум': df[col].max(),
        'Медиана': df[col].median()
    })

pd.DataFrame(stats_data).to_excel('Статистика_по_задачам.xlsx', index=False)

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()