Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.

101 rinda
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))