Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

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