Spaces:
Sleeping
Sleeping
| import pandas as pd | |
| import matplotlib.pyplot as plt | |
| from collections import Counter | |
| import numpy as np | |
| import os | |
| import warnings | |
| warnings.filterwarnings('ignore') | |
| # Настройка отображения | |
| plt.style.use('default') | |
| plt.rcParams['font.family'] = 'DejaVu Sans' | |
| def load_and_analyze_data(): | |
| """Загрузка тестовых данных""" | |
| file_path = 'test_data.csv' | |
| try: | |
| df = pd.read_csv(file_path, encoding='utf-8', delimiter=';') | |
| print("✅ Тестовый файл загружен успешно") | |
| except Exception as e: | |
| print(f"❌ Ошибка загрузки: {e}") | |
| print("Убедитесь, что файл test_data.csv находится в той же папке") | |
| return None | |
| print("=" * 60) | |
| print("ТЕСТОВЫЙ АНАЛИЗ AI-ОЦЕНОК") | |
| print("=" * 60) | |
| print(f"Размер данных: {df.shape[0]} строк, {df.shape[1]} колонок") | |
| print(f"Колонки: {list(df.columns)}") | |
| print(f"\nПервые 3 строки:") | |
| print(df.head(3)) | |
| return df | |
| def basic_statistics(df): | |
| """Базовая статистика""" | |
| print("\n" + "=" * 40) | |
| print("БАЗОВАЯ СТАТИСТИКА") | |
| print("=" * 40) | |
| print("AI оценки (pred_score):") | |
| print(f" Среднее: {df['pred_score'].mean():.3f}") | |
| print(f" Медиана: {df['pred_score'].median():.3f}") | |
| print(f" Стандартное отклонение: {df['pred_score'].std():.3f}") | |
| print(f" Минимум: {df['pred_score'].min():.3f}") | |
| print(f" Максимум: {df['pred_score'].max():.3f}") | |
| print("\nОценки экзаменатора:") | |
| print(f" Среднее: {df['Оценка экзаменатора'].mean():.3f}") | |
| print(f" Медиана: {df['Оценка экзаменатора'].median():.3f}") | |
| print(f" Стандартное отклонение: {df['Оценка экзаменатора'].std():.3f}") | |
| print("\nРаспределение оценок экзаменатора:") | |
| распределение = df['Оценка экзаменатора'].value_counts().sort_index() | |
| for оценка, count in распределение.items(): | |
| print(f" {оценка}: {count} ответов ({count / len(df) * 100:.1f}%)") | |
| def calculate_correlations(df): | |
| """Расчет корреляций""" | |
| print("\n" + "=" * 40) | |
| print("КОРРЕЛЯЦИИ И РАСХОЖДЕНИЯ") | |
| print("=" * 40) | |
| correlation = df[['Оценка экзаменатора', 'pred_score']].corr().iloc[0, 1] | |
| print(f"Корреляция между оценками: {correlation:.3f}") | |
| df['разница'] = df['pred_score'] - df['Оценка экзаменатора'] | |
| df['abs_разница'] = abs(df['разница']) | |
| print(f"Средняя абсолютная разница: {df['abs_разница'].mean():.3f}") | |
| print(f"Максимальная разница: {df['abs_разница'].max():.3f}") | |
| print(f"Минимальная разница: {df['abs_разница'].min():.3f}") | |
| # Анализ согласованности | |
| print("\nСОГЛАСОВАННОСТЬ ОЦЕНОК:") | |
| for порог in [0.1, 0.3, 0.5, 1.0]: | |
| согласованные = df[df['abs_разница'] < порог].shape[0] | |
| процент = (согласованные / len(df)) * 100 | |
| print(f" Разница < {порог}: {согласованные} ответов ({процент:.1f}%)") | |
| def create_visualizations(df): | |
| """Создание графиков""" | |
| print("\n" + "=" * 40) | |
| print("СОЗДАНИЕ ГРАФИКОВ") | |
| print("=" * 40) | |
| os.makedirs('graphs', exist_ok=True) | |
| # 1. Scatter plot | |
| plt.figure(figsize=(10, 6)) | |
| scatter = plt.scatter(df['Оценка экзаменатора'], df['pred_score'], | |
| c=df['abs_разница'], cmap='viridis', alpha=0.7, s=60) | |
| plt.colorbar(scatter, label='Абсолютная разница') | |
| plt.plot([0, 2], [0, 2], 'r--', alpha=0.5, label='Идеальное соответствие') | |
| plt.xlabel('Оценка экзаменатора') | |
| plt.ylabel('AI оценка (pred_score)') | |
| plt.title('Сравнение человеческой и AI оценки') | |
| plt.legend() | |
| plt.grid(True, alpha=0.3) | |
| plt.savefig('graphs/test_scatter.png', dpi=300, bbox_inches='tight') | |
| plt.close() | |
| # 2. Гистограмма разниц | |
| plt.figure(figsize=(10, 6)) | |
| plt.hist(df['разница'], bins=15, alpha=0.7, edgecolor='black', color='skyblue') | |
| plt.xlabel('Разница (AI - Человек)') | |
| plt.ylabel('Количество ответов') | |
| plt.title('Распределение разниц оценок') | |
| plt.grid(True, alpha=0.3) | |
| plt.axvline(x=0, color='red', linestyle='--', alpha=0.8, label='Нулевая разница') | |
| plt.legend() | |
| plt.savefig('graphs/test_histogram.png', dpi=300, bbox_inches='tight') | |
| plt.close() | |
| print("✅ Графики сохранены в папку 'graphs/'") | |
| def analyze_explanations(df): | |
| """Анализ объяснений""" | |
| print("\n" + "=" * 40) | |
| print("АНАЛИЗ ОБЪЯСНЕНИЙ") | |
| print("=" * 40) | |
| все_объяснения = ' '.join(df['объяснение_оценки'].dropna().astype(str)) | |
| слова = [word.strip() for word in все_объяснения.split() if len(word.strip()) > 2] | |
| частотность = Counter(слова) | |
| print("Топ-10 характеристик в объяснениях:") | |
| for слово, count in частотность.most_common(10): | |
| print(f" {слово}: {count}") | |
| def main(): | |
| """Основная функция""" | |
| df = load_and_analyze_data() | |
| if df is None: | |
| return | |
| basic_statistics(df) | |
| calculate_correlations(df) | |
| create_visualizations(df) | |
| analyze_explanations(df) | |
| print("\n" + "=" * 60) | |
| print("✅ ТЕСТОВЫЙ АНАЛИЗ ЗАВЕРШЕН!") | |
| print("=" * 60) | |
| print("📊 Созданные файлы:") | |
| print(" • graphs/test_scatter.png") | |
| print(" • graphs/test_histogram.png") | |
| if __name__ == "__main__": | |
| main() |