Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.

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