From 16b971f936cfe1803c8a0a62f6abd29142ff49e7 Mon Sep 17 00:00:00 2001 From: Lukas Prause Date: Mon, 14 Mar 2022 15:38:14 +0100 Subject: [PATCH] WIP: Plot data with pandas. --- analyse_udp.py | 100 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 100 insertions(+) mode change 100644 => 100755 analyse_udp.py diff --git a/analyse_udp.py b/analyse_udp.py old mode 100644 new mode 100755 index e69de29..0f84bda --- a/analyse_udp.py +++ b/analyse_udp.py @@ -0,0 +1,100 @@ +#!/usr/bin/env python3 +import os +from argparse import ArgumentParser +from datetime import datetime + +import matplotlib +import pandas as pd +import matplotlib.pyplot as plt + +matplotlib.use('TkAgg') + + +def plot_packet_arrivals(csv_file): + direction = "uplink" if "uplink" in csv_file else "downlink" + bitrate = csv_file.split("bitrate")[1].split("_")[0] + transmission_df = pd.read_csv(csv_file) + 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 )) + + + + #axes = transmission_df.plot(x="arrival_time", y="data.len_received_cum") + + 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 = transmission_df.boxplot(column="delay") + + 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]") + 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 = axes.get_figure() + #fig.suptitle("CBR {} {}".format(bitrate, direction)) + #fig.show() + fig.savefig(csv_file.replace(".csv", ".pdf")) + + +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() + + 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) + + for csv in csv_list: + plot_packet_arrivals("{}/{}".format(args.folder, csv))