|
- #!/usr/bin/env python3
- import os
- from argparse import ArgumentParser
- from datetime import datetime
-
- import pandas as pd
- import matplotlib.pyplot as plt
-
-
- def plot_single_transmission(csv_file):
- global direction
- if direction is None:
- direction = "uplink" if "uplink" in csv_file else "downlink"
- bitrate = csv_file.split("bitrate")[1].split("_")[0]
- transmission_df = pd.read_csv(csv_file)
- if len(transmission_df) == 0:
- print("Empty csv.")
- return
- transmission_df["departure_time"] = transmission_df["departure_time"] - transmission_df["departure_time"].iloc[0]
- transmission_df["arrival_time"] = transmission_df["arrival_time"] - transmission_df["arrival_time"].iloc[0]
-
- transmission_df["data.len_send_cum"] = transmission_df[
- "data.len_send"
- ].cumsum()
- transmission_df["data.len_received_cum"] = transmission_df[
- "data.len_received"
- ].cumsum()
-
- lossed_packets = transmission_df[transmission_df['delay'].isna()]
-
- print("Packetloss: {}%".format((len(lossed_packets.departure_time) / len(transmission_df.departure_time)) * 100 ))
-
- fig, all_axes = plt.subplots(2, 1)
- fig.suptitle("CBR {} {}".format(bitrate, direction))
- fig.subplots_adjust(hspace=0.3)
- axes = all_axes[0]
- axes_boxplot = all_axes[1]
-
- transmission_df.plot(ax=axes, x="departure_time", y="data.len_send_cum")
- transmission_df.plot(ax=axes, x="arrival_time", y="data.len_received_cum")
- lossed_packets.plot.scatter(ax=axes, x="departure_time", y="data.len_send_cum", color="y", marker="X")
-
- axes.legend(["D(t)", "A(t)"])
- axes.set_ylabel("Byte")
- axes.set_xlabel("t [s]")
-
- delay_axes = axes.twinx()
- delay_axes.set_ylabel("delay [s]")
- delay_axes.set_ylim([0, 0.4])
- transmission_df.plot(ax=delay_axes, x="arrival_time", y="delay", color="g", linestyle="dotted")
-
- transmission_df.boxplot(ax=axes_boxplot, column="delay", vert=False)
- axes_boxplot.set_xlabel("[s]")
-
- fig.savefig(csv_file.replace(".csv", ".pdf"))
- plt.close("all")
-
- global all_delays_dict
- if bitrate not in all_delays_dict:
- all_delays_dict[bitrate] = list()
- all_delays_dict[bitrate] += transmission_df["delay"].tolist()
-
-
- if __name__ == "__main__":
- start_time = datetime.now()
- parser = ArgumentParser()
-
- parser.add_argument("-f", "--folder", required=True, help="Folder with csv files.")
- parser.add_argument(
- "-o",
- "--output",
- required=False,
- default=None,
- help="Destination for plots as pdf.",
- )
- parser.add_argument(
- "--name_contains", required=False, default=".csv", help="Substring in filename."
- )
- parser.add_argument(
- "--use_subdirs", required=False, default=False, help="Use csvs in subdirs."
- )
-
- args = parser.parse_args()
-
- csv_list = list()
- all_delays_dict = dict()
- direction = None
-
- if args.use_subdirs:
- sub_dirs = os.listdir(args.folder)
- for d in sub_dirs:
- filenames = os.listdir("{}{}".format(args.folder, d))
- for filename in filenames:
- if filename.endswith(".csv") and args.name_contains in filename:
- csv_list.append("{}/{}".format(d, filename))
- else:
- filenames = os.listdir(args.folder)
- for filename in filenames:
- if filename.endswith(".csv") and args.name_contains in filename:
- csv_list.append(filename)
-
- csv_list.sort()
- for csv in csv_list:
- print(csv)
- plot_single_transmission("{}/{}".format(args.folder, csv))
-
- if len(all_delays_dict) > 0:
- #fig, axes = plt.subplots()
- label_list = list()
- unit = None
- datas = list()
- for bitrate, l in all_delays_dict.items():
- if unit is None:
- if "K" in bitrate:
- unit = "Kbit/s"
- elif "M" in bitrate:
- unit = "Mbit/s"
- else:
- unit = "Gbit/s"
- label_list.append(bitrate.replace("K", "").replace("M", "").replace("G", ""))
- datas.append(l)
- print("Bitrate: {}, len: {}".format(bitrate, len(l)))
- #print(datas[1])
- print(len(datas))
- plt.boxplot(datas[1])
- #plt.xticks(range(1, len(label_list) + 1), label_list, rotation=-45)
-
-
- #axes.set_xticklabels(label_list)
- plt.xlabel("cbr bitrate [{}]".format(unit))
- plt.ylabel("delay [s]")
- plt.title("CBR {}".format(direction))
- plt.show()
- plt.savefig("{}/all_delays_{}_boxplot.pdf".format(args.folder, direction))
|