|
|
|
@@ -44,6 +44,24 @@ def chunk(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__": |
|
|
|
parser = ArgumentParser() |
|
|
|
parser.add_argument("-f", "--gps_file", required=True, help="GPS csv file.") |
|
|
|
@@ -126,7 +144,16 @@ if __name__ == "__main__": |
|
|
|
transmission_df = transmission_df.sort_index() |
|
|
|
|
|
|
|
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( |
|
|
|
lambda x: ((x * 8) / args.interval) / 10**6 |
|
|
|
) |
|
|
|
@@ -191,26 +218,9 @@ if __name__ == "__main__": |
|
|
|
plt.clf() |
|
|
|
|
|
|
|
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: |
|
|
|
plt.savefig("{}cdf_plot.pdf".format(args.save)) |
|
|
|
plt.savefig("{}{}_cdf_plot.pdf".format(args.save, "goodput")) |
|
|
|
else: |
|
|
|
plt.show() |