60 lines
3.1 KiB
Python
60 lines
3.1 KiB
Python
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} мс")
|