Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

134 lines
4.5KB

  1. #!/usr/bin/env python3
  2. import os
  3. from argparse import ArgumentParser
  4. from datetime import datetime
  5. import pandas as pd
  6. import matplotlib.pyplot as plt
  7. def plot_single_transmission(csv_file):
  8. global direction
  9. if direction is None:
  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. if len(transmission_df) == 0:
  14. print("Empty csv.")
  15. return
  16. transmission_df["departure_time"] = transmission_df["departure_time"] - transmission_df["departure_time"].iloc[0]
  17. transmission_df["arrival_time"] = transmission_df["arrival_time"] - transmission_df["arrival_time"].iloc[0]
  18. transmission_df["data.len_send_cum"] = transmission_df[
  19. "data.len_send"
  20. ].cumsum()
  21. transmission_df["data.len_received_cum"] = transmission_df[
  22. "data.len_received"
  23. ].cumsum()
  24. lossed_packets = transmission_df[transmission_df['delay'].isna()]
  25. print("Packetloss: {}%".format((len(lossed_packets.departure_time) / len(transmission_df.departure_time)) * 100 ))
  26. fig, all_axes = plt.subplots(2, 1)
  27. fig.suptitle("CBR {} {}".format(bitrate, direction))
  28. fig.subplots_adjust(hspace=0.3)
  29. axes = all_axes[0]
  30. axes_boxplot = all_axes[1]
  31. transmission_df.plot(ax=axes, x="departure_time", y="data.len_send_cum")
  32. transmission_df.plot(ax=axes, x="arrival_time", y="data.len_received_cum")
  33. lossed_packets.plot.scatter(ax=axes, x="departure_time", y="data.len_send_cum", color="y", marker="X")
  34. axes.legend(["D(t)", "A(t)"])
  35. axes.set_ylabel("Byte")
  36. axes.set_xlabel("t [s]")
  37. delay_axes = axes.twinx()
  38. delay_axes.set_ylabel("delay [s]")
  39. delay_axes.set_ylim([0, 0.4])
  40. transmission_df.plot(ax=delay_axes, x="arrival_time", y="delay", color="g", linestyle="dotted")
  41. transmission_df.boxplot(ax=axes_boxplot, column="delay", vert=False)
  42. axes_boxplot.set_xlabel("[s]")
  43. fig.savefig(csv_file.replace(".csv", ".pdf"))
  44. plt.close("all")
  45. global all_delays_dict
  46. if bitrate not in all_delays_dict:
  47. all_delays_dict[bitrate] = list()
  48. all_delays_dict[bitrate] += transmission_df["delay"].tolist()
  49. if __name__ == "__main__":
  50. start_time = datetime.now()
  51. parser = ArgumentParser()
  52. parser.add_argument("-f", "--folder", required=True, help="Folder with csv files.")
  53. parser.add_argument(
  54. "-o",
  55. "--output",
  56. required=False,
  57. default=None,
  58. help="Destination for plots as pdf.",
  59. )
  60. parser.add_argument(
  61. "--name_contains", required=False, default=".csv", help="Substring in filename."
  62. )
  63. parser.add_argument(
  64. "--use_subdirs", required=False, default=False, help="Use csvs in subdirs."
  65. )
  66. args = parser.parse_args()
  67. csv_list = list()
  68. all_delays_dict = dict()
  69. direction = None
  70. if args.use_subdirs:
  71. sub_dirs = os.listdir(args.folder)
  72. for d in sub_dirs:
  73. filenames = os.listdir("{}{}".format(args.folder, d))
  74. for filename in filenames:
  75. if filename.endswith(".csv") and args.name_contains in filename:
  76. csv_list.append("{}/{}".format(d, filename))
  77. else:
  78. filenames = os.listdir(args.folder)
  79. for filename in filenames:
  80. if filename.endswith(".csv") and args.name_contains in filename:
  81. csv_list.append(filename)
  82. csv_list.sort()
  83. for csv in csv_list:
  84. print(csv)
  85. plot_single_transmission("{}/{}".format(args.folder, csv))
  86. if len(all_delays_dict) > 0:
  87. #fig, axes = plt.subplots()
  88. label_list = list()
  89. unit = None
  90. datas = list()
  91. for bitrate, l in all_delays_dict.items():
  92. if unit is None:
  93. if "K" in bitrate:
  94. unit = "Kbit/s"
  95. elif "M" in bitrate:
  96. unit = "Mbit/s"
  97. else:
  98. unit = "Gbit/s"
  99. label_list.append(bitrate.replace("K", "").replace("M", "").replace("G", ""))
  100. datas.append(l)
  101. print("Bitrate: {}, len: {}".format(bitrate, len(l)))
  102. #print(datas[1])
  103. print(len(datas))
  104. plt.boxplot(datas[1])
  105. #plt.xticks(range(1, len(label_list) + 1), label_list, rotation=-45)
  106. #axes.set_xticklabels(label_list)
  107. plt.xlabel("cbr bitrate [{}]".format(unit))
  108. plt.ylabel("delay [s]")
  109. plt.title("CBR {}".format(direction))
  110. plt.show()
  111. plt.savefig("{}/all_delays_{}_boxplot.pdf".format(args.folder, direction))