Newer
Older
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", # Garante que "no_slicing" venha no final
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 = [name for name in os.listdir(scenario_path) if os.path.isdir(os.path.join(scenario_path, name))] ## Configuração da capacidade dos slices
for cap_conf in cap_confs:
ue_dataframes[scenario][cap_conf] = {}
cap_path = scenario_path + '/' + cap_conf
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,
})
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])
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][ue] = pd.DataFrame(data)
pl_ue1 = []
pl_ue2 = []
for scenario in scenarios:
scenario_path = main_folder + scenario
cap_confs = [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 = sorted(cap_confs, key=lambda x: (x == 'no_slicing', x))
for cap_conf in cap_confs:
plt.plot(ue_dataframes[scenario][cap_conf]['ue2']["Interval"], ue_dataframes[scenario][cap_conf]['ue2']["Bandwidth"], marker="o", label="UE2", color = "blue")
plt.plot(ue_dataframes[scenario][cap_conf]['ue1']["Interval"], ue_dataframes[scenario][cap_conf]['ue1']["Bandwidth"], marker="o", label="UE2", color = "red")
y_ticks = np.arange(0, max(ue_dataframes[scenario][cap_conf]['ue2']["Bandwidth"].max(),
ue_dataframes[scenario][cap_conf]['ue1']["Bandwidth"].max()) + 10, 2) # Intervalo de 2 Mbps
plt.yticks(y_ticks) # Define os valores do eixo Y com intervalos mais detalhados
plt.title(scenario)
plt.xlabel("Time (s)")
plt.ylabel("Bandwidth (Mbps)")
plt.grid(True)
plt.legend()
plt.tight_layout()
pl_ue1.append((ue_dataframes[scenario][cap_conf]['ue1']["PacketsLost"].sum()/ue_dataframes[scenario][cap_conf]['ue1']["TotalPackets"].sum())*100)
pl_ue2.append((ue_dataframes[scenario][cap_conf]['ue2']["PacketsLost"].sum()/ue_dataframes[scenario][cap_conf]['ue2']["TotalPackets"].sum())*100)
# Configurar a posição das barras no eixo x
x = np.arange(len(cap_confs)) # Posições das scenarios
print(x)
largura = 0.4 # Largura das barras
# Criar as barras
plt.bar(x - largura / 2, pl_ue1, width=largura, label='UE1', color='red') # Barras para UE1
plt.bar(x + largura / 2, pl_ue2, width=largura, label='UE2', color='blue') # Barras para UE2
plt.title('Packet Loss for each capacity configuration')
plt.xticks(x, cap_confs) # Ajustar rótulos do eixo x
plt.legend() # Adicionar legenda