Browse Source

Changes goodput calculation.

master
langspielplatte 2 years ago
parent
commit
a3e760a682
1 changed files with 30 additions and 20 deletions
  1. +30
    -20
      plot_transmission_timeline.py

+ 30
- 20
plot_transmission_timeline.py View File

return iter(lambda: tuple(islice(it, size)), ()) return iter(lambda: tuple(islice(it, size)), ())




def plot_cdf(dataframe, column_name):
stats_df = dataframe \
.groupby(column_name) \
[column_name] \
.agg("count") \
.pipe(pd.DataFrame) \
.rename(columns={column_name: "frequency"})

# PDF
stats_df["pdf"] = stats_df["frequency"] / sum(stats_df["frequency"])

# CDF
stats_df["cdf"] = stats_df["pdf"].cumsum()
stats_df = stats_df.reset_index()

stats_df.plot(x=column_name, y=["cdf"], grid=True)


if __name__ == "__main__": if __name__ == "__main__":
parser = ArgumentParser() parser = ArgumentParser()
parser.add_argument("-f", "--gps_file", required=True, help="GPS csv file.") parser.add_argument("-f", "--gps_file", required=True, help="GPS csv file.")
transmission_df = transmission_df.sort_index() transmission_df = transmission_df.sort_index()


print("Calculate goodput...") print("Calculate goodput...")
transmission_df["goodput"] = transmission_df["payload_size"].rolling("{}s".format(args.interval)).sum()

range_start_time = transmission_df["datetime"].min()
range_sum_interval = "{}s".format(args.interval)

# create timedelta range with maximum timedelta
time_range = pd.timedelta_range(pd.Timedelta(range_start_time), transmission_df["datetime"].max(), freq=range_sum_interval)

# create bins by pd.cut, aggregate sum
transmission_df = transmission_df.groupby(pd.cut(transmission_df["datetime"], bins=time_range, labels=time_range[:-1]))["goodput"].sum().reset_index()
#transmission_df["goodput"] = transmission_df["payload_size"].rolling("{}s".format(args.interval)).sum()
transmission_df["goodput"] = transmission_df["goodput"].apply( transmission_df["goodput"] = transmission_df["goodput"].apply(
lambda x: ((x * 8) / args.interval) / 10**6 lambda x: ((x * 8) / args.interval) / 10**6
) )
plt.clf() plt.clf()


print("Calculate and polt CDF...") print("Calculate and polt CDF...")
# Get the frequency, PDF and CDF for each value in the series

# Frequency
stats_df = transmission_df \
.groupby("goodput") \
["goodput"] \
.agg("count") \
.pipe(pd.DataFrame) \
.rename(columns={"goodput": "frequency"})

# PDF
stats_df["pdf"] = stats_df["frequency"] / sum(stats_df["frequency"])

# CDF
stats_df["cdf"] = stats_df["pdf"].cumsum()
stats_df = stats_df.reset_index()

stats_df.plot(x="goodput", y=["cdf"], grid=True)
plot_cdf(transmission_df, "goodput")


if args.save: if args.save:
plt.savefig("{}cdf_plot.pdf".format(args.save))
plt.savefig("{}{}_cdf_plot.pdf".format(args.save, "goodput"))
else: else:
plt.show() plt.show()

Loading…
Cancel
Save