Du kannst nicht mehr als 25 Themen auswählen Themen müssen entweder mit einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

101 Zeilen
3.3KB

  1. #!/usr/bin/env python3
  2. import os
  3. from argparse import ArgumentParser
  4. from datetime import datetime
  5. import matplotlib
  6. import pandas as pd
  7. import matplotlib.pyplot as plt
  8. matplotlib.use('TkAgg')
  9. def plot_packet_arrivals(csv_file):
  10. direction = "uplink" if "uplink" in csv_file else "downlink"
  11. bitrate = csv_file.split("bitrate")[1].split("_")[0]
  12. transmission_df = pd.read_csv(csv_file)
  13. transmission_df["departure_time"] = transmission_df["departure_time"] - transmission_df["departure_time"].iloc[0]
  14. transmission_df["arrival_time"] = transmission_df["arrival_time"] - transmission_df["arrival_time"].iloc[0]
  15. transmission_df["data.len_send_cum"] = transmission_df[
  16. "data.len_send"
  17. ].cumsum()
  18. transmission_df["data.len_received_cum"] = transmission_df[
  19. "data.len_received"
  20. ].cumsum()
  21. lossed_packets = transmission_df[transmission_df['delay'].isna()]
  22. print("Packetloss: {}%".format((len(lossed_packets.departure_time) / len(transmission_df.departure_time)) * 100 ))
  23. #axes = transmission_df.plot(x="arrival_time", y="data.len_received_cum")
  24. fig, all_axes = plt.subplots(2, 1)
  25. fig.suptitle("CBR {} {}".format(bitrate, direction))
  26. fig.subplots_adjust(hspace=0.3)
  27. axes = all_axes[0]
  28. axes_boxplot = all_axes[1]
  29. transmission_df.plot(ax=axes, x="departure_time", y="data.len_send_cum")
  30. transmission_df.plot(ax=axes, x="arrival_time", y="data.len_received_cum")
  31. lossed_packets.plot.scatter(ax=axes, x="departure_time", y="data.len_send_cum", color="y", marker="X")
  32. #axes = transmission_df.boxplot(column="delay")
  33. axes.legend(["D(t)", "A(t)"])
  34. axes.set_ylabel("Byte")
  35. axes.set_xlabel("t [s]")
  36. delay_axes = axes.twinx()
  37. delay_axes.set_ylabel("delay [s]")
  38. transmission_df.plot(ax=delay_axes, x="arrival_time", y="delay", color="g", linestyle="dotted")
  39. transmission_df.boxplot(ax=axes_boxplot, column="delay", vert=False)
  40. axes_boxplot.set_xlabel("[s]")
  41. #fig = axes.get_figure()
  42. #fig.suptitle("CBR {} {}".format(bitrate, direction))
  43. #fig.show()
  44. fig.savefig(csv_file.replace(".csv", ".pdf"))
  45. if __name__ == "__main__":
  46. start_time = datetime.now()
  47. parser = ArgumentParser()
  48. parser.add_argument("-f", "--folder", required=True, help="Folder with csv files.")
  49. parser.add_argument(
  50. "-o",
  51. "--output",
  52. required=False,
  53. default=None,
  54. help="Destination for plots as pdf.",
  55. )
  56. parser.add_argument(
  57. "--name_contains", required=False, default=".csv", help="Substring in filename."
  58. )
  59. parser.add_argument(
  60. "--use_subdirs", required=False, default=False, help="Use csvs in subdirs."
  61. )
  62. args = parser.parse_args()
  63. csv_list = list()
  64. if args.use_subdirs:
  65. sub_dirs = os.listdir(args.folder)
  66. for d in sub_dirs:
  67. filenames = os.listdir("{}{}".format(args.folder, d))
  68. for filename in filenames:
  69. if filename.endswith(".csv") and args.name_contains in filename:
  70. csv_list.append("{}/{}".format(d, filename))
  71. else:
  72. filenames = os.listdir(args.folder)
  73. for filename in filenames:
  74. if filename.endswith(".csv") and args.name_contains in filename:
  75. csv_list.append(filename)
  76. for csv in csv_list:
  77. plot_packet_arrivals("{}/{}".format(args.folder, csv))