選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

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