96 lines
3.7 KiB
Python
96 lines
3.7 KiB
Python
from latencyPlots import plot_delay_histogram_with_ci, plot_horizontal_hist_with_ci, plot_point_cloud
|
||
from latencyData import LatencyData
|
||
from confidence import compare_confidence_intervals
|
||
import argparse
|
||
import glob, logging, yaml, os
|
||
import numpy as np
|
||
|
||
logging.basicConfig(level=logging.INFO,
|
||
format='%(asctime)s - %(levelname)s - %(message)s')
|
||
|
||
def parse_args():
|
||
parser = argparse.ArgumentParser()
|
||
parser.add_argument('-f', '--file',
|
||
type=str,
|
||
help='Path to the csv or yml file, depends on the mode',
|
||
required=True)
|
||
parser.add_argument('-m', '--mode',
|
||
type=int,
|
||
default=0,
|
||
help='Mode of the script; 0 - one file, 1 - dir')
|
||
return parser.parse_args()
|
||
|
||
def one_file_run():
|
||
csv_file = parse_args().file
|
||
path_splitted = csv_file.split('/')
|
||
title = path_splitted[len(path_splitted) - 1].split('.')[0]
|
||
print("АНАЛИЗ ДОВЕРИТЕЛЬНЫХ ИНТЕРВАЛОВ ДЛЯ ЗАДЕРЖЕК")
|
||
print("=" * 50)
|
||
l = None
|
||
try:
|
||
l = LatencyData(csv_file, confidence_level=0.99)
|
||
except FileNotFoundError:
|
||
print(f"✗ Ошибка: Файл '{csv_file}' не найден")
|
||
exit(1)
|
||
|
||
results = plot_delay_histogram_with_ci(
|
||
save_to_file=True,
|
||
show_plot=False,
|
||
title=title,
|
||
l=l
|
||
)
|
||
|
||
print("\n" + "=" * 50)
|
||
|
||
compare_results = compare_confidence_intervals(
|
||
csv_file, [0.90, 0.95, 0.99])
|
||
|
||
if results:
|
||
print("\n--- ИНТЕРПРЕТАЦИЯ РЕЗУЛЬТАТОВ ---")
|
||
print(f"С вероятностью 95% истинное среднее значение задержки ")
|
||
print(
|
||
f"находится в интервале от {results['ci_lower']:.2f} до {results['ci_upper']:.2f} мс.")
|
||
print(f"Это означает, что если бы мы повторили эксперимент много раз,")
|
||
print(f"95% вычисленных таким образом интервалов содержали бы истинное среднее значение.")
|
||
|
||
def validate_csv_list(csv_arr: list, dirConfig: dict) -> bool:
|
||
is_colors_valid = all(file in dirConfig['colors'].keys() for file in csv_arr)
|
||
is_labels_valid = all(file in dirConfig['labels'].keys() for file in csv_arr)
|
||
if not is_labels_valid:
|
||
logging.error("Labels in yaml is not fully valid")
|
||
if not is_colors_valid:
|
||
logging.error("Colors in yaml is not fully valid")
|
||
return is_colors_valid & is_labels_valid
|
||
|
||
def dir_run():
|
||
dirConfig = None
|
||
with open(parse_args().file + '/dir.yml') as f:
|
||
dirConfig = yaml.safe_load(f)
|
||
if dirConfig is None:
|
||
raise Exception("File not found or not loaded")
|
||
|
||
title = parse_args().file.split('/')[1]
|
||
all_csv_in_dir = glob.glob(parse_args().file + '/*.csv')
|
||
logging.info(f"Found {len(all_csv_in_dir)} csv files in directory {parse_args().file}")
|
||
lDataArr = {os.path.basename(file): LatencyData(file) for file in all_csv_in_dir}
|
||
|
||
validate_csv_list([os.path.basename(file) for file in all_csv_in_dir], dirConfig)
|
||
plot_point_cloud(lDataArr,
|
||
dirConfig['colors'],
|
||
dirConfig['labels'],
|
||
float(dirConfig['point_cloud']['dT']),
|
||
title=title)
|
||
|
||
plot_horizontal_hist_with_ci(lDataArr,
|
||
dirConfig['colors'],
|
||
dirConfig['labels'],
|
||
title=title)
|
||
|
||
|
||
if __name__ == "__main__":
|
||
args = parse_args()
|
||
mode = args.mode
|
||
if mode == 0:
|
||
one_file_run()
|
||
elif mode == 1:
|
||
dir_run() |