| from argparse import ArgumentParser | from argparse import ArgumentParser | ||||
| from datetime import datetime | from datetime import datetime | ||||
| import matplotlib | |||||
| import pandas as pd | import pandas as pd | ||||
| import matplotlib.pyplot as plt | import matplotlib.pyplot as plt | ||||
| matplotlib.use('TkAgg') | |||||
| def plot_packet_arrivals(csv_file): | |||||
| direction = "uplink" if "uplink" in csv_file else "downlink" | |||||
| 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] | bitrate = csv_file.split("bitrate")[1].split("_")[0] | ||||
| transmission_df = pd.read_csv(csv_file) | 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["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["arrival_time"] = transmission_df["arrival_time"] - transmission_df["arrival_time"].iloc[0] | ||||
| print("Packetloss: {}%".format((len(lossed_packets.departure_time) / len(transmission_df.departure_time)) * 100 )) | print("Packetloss: {}%".format((len(lossed_packets.departure_time) / len(transmission_df.departure_time)) * 100 )) | ||||
| #axes = transmission_df.plot(x="arrival_time", y="data.len_received_cum") | |||||
| fig, all_axes = plt.subplots(2, 1) | fig, all_axes = plt.subplots(2, 1) | ||||
| fig.suptitle("CBR {} {}".format(bitrate, direction)) | fig.suptitle("CBR {} {}".format(bitrate, direction)) | ||||
| fig.subplots_adjust(hspace=0.3) | fig.subplots_adjust(hspace=0.3) | ||||
| transmission_df.plot(ax=axes, x="departure_time", y="data.len_send_cum") | 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") | 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") | lossed_packets.plot.scatter(ax=axes, x="departure_time", y="data.len_send_cum", color="y", marker="X") | ||||
| #axes = transmission_df.boxplot(column="delay") | |||||
| axes.legend(["D(t)", "A(t)"]) | axes.legend(["D(t)", "A(t)"]) | ||||
| axes.set_ylabel("Byte") | axes.set_ylabel("Byte") | ||||
| delay_axes = axes.twinx() | delay_axes = axes.twinx() | ||||
| delay_axes.set_ylabel("delay [s]") | 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.plot(ax=delay_axes, x="arrival_time", y="delay", color="g", linestyle="dotted") | ||||
| transmission_df.boxplot(ax=axes_boxplot, column="delay", vert=False) | transmission_df.boxplot(ax=axes_boxplot, column="delay", vert=False) | ||||
| axes_boxplot.set_xlabel("[s]") | axes_boxplot.set_xlabel("[s]") | ||||
| #fig = axes.get_figure() | |||||
| #fig.suptitle("CBR {} {}".format(bitrate, direction)) | |||||
| #fig.show() | |||||
| fig.savefig(csv_file.replace(".csv", ".pdf")) | 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__": | if __name__ == "__main__": | ||||
| args = parser.parse_args() | args = parser.parse_args() | ||||
| csv_list = list() | csv_list = list() | ||||
| all_delays_dict = dict() | |||||
| direction = None | |||||
| if args.use_subdirs: | if args.use_subdirs: | ||||
| sub_dirs = os.listdir(args.folder) | sub_dirs = os.listdir(args.folder) | ||||
| if filename.endswith(".csv") and args.name_contains in filename: | if filename.endswith(".csv") and args.name_contains in filename: | ||||
| csv_list.append(filename) | csv_list.append(filename) | ||||
| csv_list.sort() | |||||
| for csv in csv_list: | for csv in csv_list: | ||||
| plot_packet_arrivals("{}/{}".format(args.folder, csv)) | |||||
| 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) | |||||
| axes.boxplot(datas) | |||||
| #axes.set_xticklabels(label_list) | |||||
| axes.set_xlabel("cbr bitrate [{}]".format(unit)) | |||||
| axes.set_ylabel("delay [s]") | |||||
| fig.suptitle("CBR {}".format(direction)) | |||||
| fig.savefig("{}/all_delays_{}_boxplot.pdf".format(args.folder, direction)) |