-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.py
More file actions
99 lines (77 loc) · 4.07 KB
/
Copy pathmain.py
File metadata and controls
99 lines (77 loc) · 4.07 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
A/B-тестирование эффективности новой инструкции для мультимедийных систем
Петербургский политехнический университет
"""
import sys
from pathlib import Path
# Добавляем путь к нашим модулям
sys.path.insert(0, str(Path(__file__).parent))
from src.config import config
from src.data_loader import JiraDataLoader
from src.analysis import ABTestAnalyzer
from src.visualization import ABTestVisualizer
from src.utils import save_results, print_header, print_success, print_warning, print_error
def main():
"""Запуск анализа A/B-теста"""
print_header("A/B-TEST: Анализ эффективности новой инструкции")
print("Петербургский политехнический университет\n")
# ===== ШАГ 1: ЗАГРУЗКА ДАННЫХ =====
print("📁 ШАГ 1: Загрузка данных...")
loader = JiraDataLoader(config)
try:
df = loader.load_data()
except FileNotFoundError as e:
print_error(f"Файл не найден: {e}")
print("\nСкопируйте ваши CSV файлы в папку 'data':")
print(" - jira_simple_export.csv")
print(" - jira_daily_stats.csv (если есть)")
return
# Загружаем ежедневную статистику
df_daily = loader.load_daily_data()
# ===== ШАГ 2: ОЧИСТКА ДАННЫХ =====
print("\n🧹 ШАГ 2: Очистка данных...")
df_clean = loader.clean_data()
# ===== ШАГ 3: ПОДГОТОВКА К АНАЛИЗУ =====
print("\n📊 ШАГ 3: Подготовка данных для анализа...")
classroom_stats, category_stats = loader.prepare_for_analysis()
# Проверяем, что данные загружены
if len(loader.group_a_tickets) == 0 or len(loader.group_b_tickets) == 0:
print_error("Не удалось получить данные по группам!")
return
print_success(f"Группа A: {len(loader.group_a_tickets)} аудиторий")
print_success(f"Группа B: {len(loader.group_b_tickets)} аудиторий")
# ===== ШАГ 4: СТАТИСТИЧЕСКИЙ АНАЛИЗ =====
print("\n🔬 ШАГ 4: Статистический анализ...")
analyzer = ABTestAnalyzer(config)
results = analyzer.run_full_analysis(
loader.group_a_tickets,
loader.group_b_tickets,
category_stats
)
# ===== ШАГ 5: ВИЗУАЛИЗАЦИЯ =====
print("\n🎨 ШАГ 5: Создание графиков...")
visualizer = ABTestVisualizer(config)
# Создаем все графики
visualizer.plot_ticket_comparison(loader.group_a_tickets, loader.group_b_tickets)
visualizer.plot_category_heatmap(category_stats)
if loader.df_daily is not None:
visualizer.plot_daily_trends(loader.df_daily)
visualizer.plot_effect_size(results)
visualizer.create_dashboard(loader, analyzer)
# ===== ШАГ 6: СОХРАНЕНИЕ РЕЗУЛЬТАТОВ =====
print("\n💾 ШАГ 6: Сохранение результатов...")
save_results(results, "ab_test_results.json")
# ===== ШАГ 7: ВЫВОД РЕЗУЛЬТАТОВ =====
print("\n📋 ШАГ 7: Результаты анализа:")
analyzer.print_summary()
print("\n" + "="*70)
print("✅ ПРОЕКТ УСПЕШНО ЗАВЕРШЕН!")
print("="*70)
print("\n📁 Созданные файлы:")
print(" • reports/figures/ - все графики")
print(" • reports/ab_test_results.json - результаты в JSON")
print("\n👉 Откройте папку reports/figures/ чтобы увидеть визуализации!")
if __name__ == "__main__":
main()