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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
with open(ue_path, 'r') as file:
count = 0
data.append({
"Interval": 0,
"Transfer": 0,
"Bandwidth": 0,
"Jitter": 0,
"Packet loss (%)": 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,
"Packet loss (%)": float(parts[-1].strip("()%"))
})
elif count <= 60:
data.append({
"Interval": count,
"Transfer": parts[4],
"Bandwidth": float(parts[6]),
"Jitter": parts[8] if len(parts) > 6 else None,
"Packet loss (%)": float(parts[-1].strip("()%"))
})
else:
break
print(ue)
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']["Packet loss (%)"].mean())
pl_ue2.append(ue_dataframes[scenario][cap_conf]['ue2']["Packet loss (%)"].mean())
# 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
# Adicionar rótulos e título
plt.xlabel('Scenarios')
plt.ylabel('Packet Loss (%)')
plt.title('Packet Loss for each capacity configuration')
plt.xticks(x, cap_confs) # Ajustar rótulos do eixo x
plt.legend() # Adicionar legenda