import pandas as pd import numpy as np from confidence import calculate_confidence_interval class LatencyData: def __init__(self, filepath, delimiter=',', confidence_level=0.99): self.df = pd.read_csv(filepath, delimiter=delimiter, header=None, names=['index', 'delay_ms']) self.__parse(confidence_level) def __parse(self, confidence_level): self.delays = np.array(self.df['delay_ms'].values) self.confidence_level = confidence_level # Вычисление базовой статистики self.mean_delay = np.mean(self.delays) self.median_delay = np.median(self.delays) self.std_delay = np.std(self.delays) self.min_delay = np.min(self.delays) self.max_delay = np.max(self.delays) # Вычисление доверительного интервала self.mean_ci, self.ci_lower, self.ci_upper, self.std_error = calculate_confidence_interval( self.delays, confidence_level) self.__output_data() @property def err(self): return (self.ci_upper - self.ci_lower)/2 def __output_data(self): # Вывод статистики print("=" * 60) print("АНАЛИЗ ЗАДЕРЖЕК С ДОВЕРИТЕЛЬНЫМ ИНТЕРВАЛОМ") print("=" * 60) print(f"Количество измерений (n): {len(self.delays)}") print(f"Уровень доверия: {self.confidence_level*100}%") print("\n--- ОСНОВНАЯ СТАТИСТИКА ---") print(f"Минимальная задержка: {self.min_delay:.2f} мс") print(f"Максимальная задержка: {self.max_delay:.2f} мс") print(f"Средняя задержка: {self.mean_delay:.2f} мс") print(f"Медианная задержка: {self.median_delay:.2f} мс") print(f"Стандартное отклонение: {self.std_delay:.2f} мс") print(f"Стандартная ошибка: {self.std_error:.4f} мс") print(f"\n--- ДОВЕРИТЕЛЬНЫЙ ИНТЕРВАЛ {self.confidence_level*100}% ---") print(f"Точечная оценка среднего: {self.mean_ci:.2f} мс") print(f"Доверительный интервал: [{self.ci_lower:.2f}, {self.ci_upper:.2f}] мс") print(f"Ширина интервала: {self.ci_upper - self.ci_lower:.2f} мс") print(f"Погрешность: ±{(self.ci_upper - self.ci_lower)/2:.2f} мс") # Дополнительные метрики cv = (self.std_delay / self.mean_delay) * 100 # Коэффициент вариации print(f"\n--- ДОПОЛНИТЕЛЬНЫЕ МЕТРИКИ ---") print(f"Коэффициент вариации: {cv:.1f}%") print(f"Q1 (25-й перцентиль): {np.percentile(self.delays, 25):.2f} мс") print(f"Q3 (75-й перцентиль): {np.percentile(self.delays, 75):.2f} мс") print( f"IQR (межквартильный размах): {np.percentile(self.delays, 75) - np.percentile(self.delays, 25):.2f} мс")