import pandas as pd import matplotlib.pyplot as plt import os import numpy as np # Leitura do arquivo main_folder = "./" scenarios = [name for name in os.listdir(main_folder) if os.path.isdir(os.path.join(main_folder, name))] scenarios = sorted( scenarios, key=lambda x: ( x != "no_slicing", int(x.split('_')[-1]) if x.startswith('scen_') and x.split('_')[-1].isdigit() else float('inf') ) ) ue_dataframes = {} for scenario in scenarios: ue_dataframes[scenario] = {} scenario_path = main_folder + scenario cap_confs_list = [name for name in os.listdir(scenario_path) if os.path.isdir(os.path.join(scenario_path, name))] for cap_conf_folder in cap_confs_list: ue_dataframes[scenario][cap_conf_folder] = {} cap_path = scenario_path + '/' + cap_conf_folder ues = [name for name in os.listdir(cap_path) if os.path.isdir(os.path.join(cap_path, name))] for ue in ues: data = [] ue_path = cap_path + '/' + ue + '/' + 'job_1.txt' ##Organização do dataframe with open(ue_path, 'r') as file: count = 0 data.append({ "Interval": 0, "Transfer": 0, "Bandwidth": 0, "Jitter": 0, "PacketsLost": 0, "TotalPackets": 0 }) for line in file: if "[ 3]" in line and "sec" in line and "MBytes" in line: parts = line.split() count += 1 if count < 10: data.append({ "Interval": count, "Transfer": parts[5], "Bandwidth": float(parts[7]), "Jitter": parts[9] if len(parts) > 6 else None, "PacketsLost": int(parts[-2].split("/")[0]) if "/" in parts[-2] else int(parts[-3].split("/")[0]), "TotalPackets": int(parts[-2].split("/")[1]) if "/" in parts[-2] else int(parts[-2]) }) elif count < 60: data.append({ "Interval": count, "Transfer": parts[4], "Bandwidth": float(parts[6]), "Jitter": parts[8] if len(parts) > 6 else None, "PacketsLost": int(parts[-2].split("/")[0]) if "/" in parts[-2] else int(parts[-3].split("/")[0]), "TotalPackets": int(parts[-2].split("/")[1]) if "/" in parts[-2] else int(parts[-2]) }) else: break ue_dataframes[scenario][cap_conf_folder][ue] = pd.DataFrame(data) for scenario in scenarios: conf_list = [] pl_ue1 = [] pl_ue2 = [] scenario_path = main_folder + scenario cap_confs_list = [name for name in os.listdir(scenario_path) if os.path.isdir(os.path.join(scenario_path, name))] ## Configuração da capacidade dos slices cap_confs_list = sorted(cap_confs_list, key=lambda x: (x == 'no_slicing', x)) with open(os.path.join(scenario_path, "scenario_description.txt"), 'r') as file: scenario_file = file.read().split("\n") scenario_info = {item.split(':', 1)[0].strip(): item.split(':', 1)[1].strip() for item in scenario_file if item} for cap_conf_folder in cap_confs_list: cap_path = scenario_path + '/' + cap_conf_folder with open(os.path.join(cap_path, "cap_conf_description.txt"), 'r') as file: cap_conf_description = file.read().split("\n") cap_conf_info = {item.split(':', 1)[0].strip(): item.split(':', 1)[1].strip() for item in cap_conf_description if item} plt.plot(ue_dataframes[scenario][cap_conf_folder]['ue1']["Interval"], ue_dataframes[scenario][cap_conf_folder]['ue1']["Bandwidth"], marker="o", label=f"UE1 (Banda: {scenario_info['UE1_bandwidth']} Mbps)", color='#ff7f0e', linestyle="-") plt.plot(ue_dataframes[scenario][cap_conf_folder]['ue2']["Interval"], ue_dataframes[scenario][cap_conf_folder]['ue2']["Bandwidth"], marker="o", label=f"UE2 (Banda: {scenario_info['UE2_bandwidth']} Mbps)", color='#1f77b4', linestyle="--") y_ticks = np.arange(0, max(ue_dataframes[scenario][cap_conf_folder]['ue2']["Bandwidth"].max(), ue_dataframes[scenario][cap_conf_folder]['ue1']["Bandwidth"].max()) + 10, 10) # Intervalo de 2 Mbps plt.yticks(y_ticks) # Define os valores do eixo Y com intervalos mais detalhados # if cap_conf_info['UE1_slice'] != '-': # plt.title(f"Taxa Efetiva de Usuários Móveis: UE1 no Slice 1 ({cap_conf_info['UE1_slice']}% dos Recursos) e UE2 no Slice 2 ({cap_conf_info['UE2_slice']}% dos Recursos)") # else: # plt.title(f"Taxa Efetiva de Usuários sem configuração dos slices") plt.xlabel("Tempo (s)") plt.ylabel("Taxa efetiva (Mbps)") plt.grid(which="both", linestyle="--", linewidth=0.5, alpha=0.7) # Grelha mais sutil plt.tight_layout() # Garante que todos os elementos estejam visíveis plt.legend() if cap_conf_info['UE1_slice'] != '-' and cap_conf_info['UE2_slice'] != '-': conf_list.append(f"Conf. {cap_conf_info['UE1_slice']}% / {cap_conf_info['UE2_slice']}%") else: conf_list.append(f'Conf. No slice') plt.tight_layout() pl_ue1.append((ue_dataframes[scenario][cap_conf_folder]['ue1']["PacketsLost"].sum()/ue_dataframes[scenario][cap_conf_folder]['ue1']["TotalPackets"].sum())*100) pl_ue2.append((ue_dataframes[scenario][cap_conf_folder]['ue2']["PacketsLost"].sum()/ue_dataframes[scenario][cap_conf_folder]['ue2']["TotalPackets"].sum())*100) plt.show() # Configurar a posição das barras no eixo x x = np.arange(len(conf_list)) # Posições das scenarios largura = 0.4 # Largura das barras # Criar as barras plt.bar(x - largura / 2, pl_ue1, width=largura, label=f"UE1 (Banda: {scenario_info['UE1_bandwidth']} Mbps)", color='#ff7f0e') # Barras para UE1 plt.bar(x + largura / 2, pl_ue2, width=largura, label=f"UE2 (Banda: {scenario_info['UE2_bandwidth']} Mbps)", color='#1f77b4') # Barras para UE2 # Adicionar rótulos e título plt.xlabel('Diferentes configurações de capacidade (Slice 1 / Slice 2)') plt.ylabel('Perda de pacote (%)') # plt.title('Perda de Pacotes (%) para Diferentes Configurações de Capacidade') plt.xticks(x, conf_list) # Ajustar rótulos do eixo x plt.legend() # Adicionar legenda # Exibir o gráfico plt.tight_layout() plt.show()