/
urfu_itis_tasks
/
debug_101-Reyy
Обзор
Документация
Войти
/
urfu_itis_tasks
/
debug_101-Reyy
Код
Запросы
1
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
master
scripts/analyze_tasks.py
111 строк
4 KB
urfu_itis_tasks
Initial commit
27 окт 2025, 23:59
27 окт 2025, 23:59
c1603f3
Код
Авторство
О чём код?
#!/usr/bin/env python3 """ Анализ базы заданий для проверки покрытия """ import os import sys import pandas as pd from collections import Counter def analyze_tasks(): """Анализирует что есть в базе заданий""" # Ищем CSV файл possible_paths = [ os.path.join(os.path.dirname(__file__), '100_vibe_coding_tasks.csv'), os.path.join(os.path.dirname(__file__), '..', 'scripts', '100_vibe_coding_tasks.csv'), os.path.join(os.getcwd(), '100_vibe_coding_tasks.csv'), os.path.join(os.getcwd(), 'scripts', '100_vibe_coding_tasks.csv'), ] csv_path = None for path in possible_paths: if os.path.exists(path): csv_path = path break if not csv_path: print("❌ CSV файл не найден!") return df = pd.read_csv(csv_path) print("\n" + "="*80) print("АНАЛИЗ БАЗЫ ЗАДАНИЙ (100_vibe_coding_tasks.csv)") print("="*80) print(f"\n📊 ОБЩАЯ СТАТИСТИКА:") print(f" Всего заданий: {len(df)}") print(f" Уровней: {df['level'].nunique()}") print(f" Тем: {df['topic'].nunique()}") # По уровням print(f"\n📋 ПО УРОВНЯМ:") for level in ['Базовый', 'Средний', 'Сложный']: count = len(df[df['level'] == level]) print(f" {level}: {count}") # По темам print(f"\n🏷️ ПО ТЕМАМ:") topics = df['topic'].value_counts() for topic, count in topics.items(): print(f" {topic}: {count}") # Анализ ошибок print(f"\n🔍 АНАЛИЗ ОШИБОК:") all_errors = [] for errors in df['errors']: if pd.notna(errors): error_list = [e.strip() for e in str(errors).split(';')] all_errors.extend(error_list) error_counts = Counter(all_errors) print(f"\n Всего уникальных типов ошибок: {len(error_counts)}") print(f"\n ТОП-20 ОШИБОК:") for error, count in error_counts.most_common(20): print(f" • {error}: {count}") # Ищем замену на среднее print(f"\n🔎 ПОИСК СПЕЦИФИЧНЫХ ОШИБОК:") # Замена на среднее mean_tasks = df[df['errors'].str.contains('среднее|mean|среднему', case=False, na=False)] print(f" Замена на среднее: {len(mean_tasks)}") if len(mean_tasks) > 0: print(f" Номера заданий: {list(mean_tasks['id'])}") # Замена на медиану median_tasks = df[df['errors'].str.contains('медиана|median', case=False, na=False)] print(f" Замена на медиану: {len(median_tasks)}") if len(median_tasks) > 0: print(f" Номера заданий: {list(median_tasks['id'])}") # Нормализация norm_tasks = df[df['errors'].str.contains('нормализ|normali', case=False, na=False)] print(f" Нормализация: {len(norm_tasks)}") # Data leakage leakage_tasks = df[df['errors'].str.contains('leakage|утечка', case=False, na=False)] print(f" Data leakage: {len(leakage_tasks)}") # Shift shift_tasks = df[df['errors'].str.contains('shift', case=False, na=False)] print(f" Ошибки shift: {len(shift_tasks)}") # Показываем примеры print(f"\n📖 ПРИМЕРЫ ЗАДАНИЙ:") print(f"\n Случайное задание про замену на среднее:") if len(mean_tasks) > 0: task = mean_tasks.iloc[0] print(f" ID: {task['id']}") print(f" Уровень: {task['level']}") print(f" Описание: {task['description']}") print(f" Ошибки: {task['errors']}") else: print(f" ❌ Не найдено!") print("\n" + "="*80) if __name__ == "__main__": analyze_tasks()