136 lines
4.9 KiB
Python
136 lines
4.9 KiB
Python
|
#!/usr/bin/env python3
|
||
|
|
||
|
import glob
|
||
|
from datetime import datetime
|
||
|
|
||
|
import matplotlib.pyplot as plt
|
||
|
|
||
|
def load_data(path):
|
||
|
all_data = {}
|
||
|
for file in glob.glob(path):
|
||
|
with open(file, 'r') as f:
|
||
|
lines = list(map(lambda l: l.strip(), f))
|
||
|
bucket = datetime.fromtimestamp(float(file[22:-4]))
|
||
|
data = {}
|
||
|
data['avg_out'] = float(lines[1].split(': ')[1])
|
||
|
data['min_out'] = float(lines[2].split(': ')[1].split(', ')[3][0:-1])
|
||
|
data['max_out'] = float(lines[3].split(': ')[1].split(', ')[3][0:-1])
|
||
|
data['known_out'] = float(lines[4].split(': ')[1].split(' ')[-1])
|
||
|
pr_sr_line = lines[11].split(' & ')
|
||
|
data['known_pr'] = float(pr_sr_line[2])
|
||
|
data['avg_pr'] = float(pr_sr_line[1])
|
||
|
data['known_sr'] = float(pr_sr_line[4].split(' ')[0])
|
||
|
data['avg_sr'] = float(pr_sr_line[3])
|
||
|
# pr_percentiles = filter(lambda l: l.startswith('PR4('), lines)
|
||
|
# sr_percentiles = filter(lambda l: l.startswith('SR4('), lines)
|
||
|
percentiles_to_plot = [50, 60, 70, 80, 90, 95]
|
||
|
for rank in ['PR', 'SR']:
|
||
|
percentiles = list(filter(lambda l: l.startswith(rank), lines))
|
||
|
for to_plot in percentiles_to_plot:
|
||
|
line = list(filter(lambda l: l.endswith(f': {to_plot}'), percentiles))[0]
|
||
|
percentile = line.split(': ')[2]
|
||
|
data[f'{rank.lower()}_perc_{to_plot}'] = float(percentile)
|
||
|
|
||
|
all_data[bucket] = data
|
||
|
|
||
|
return all_data
|
||
|
|
||
|
|
||
|
def main():
|
||
|
for edges in [20, 30, 40, 50, 60, 70, 80, 90, 100]:
|
||
|
print(f'plotting for {edges} edges')
|
||
|
all_data = load_data(f'./churn_rank/{edges}*')
|
||
|
x = []
|
||
|
avg_out = []
|
||
|
min_out = []
|
||
|
max_out = []
|
||
|
known_out = []
|
||
|
known_pr = []
|
||
|
known_sr = []
|
||
|
avg_pr = []
|
||
|
avg_sr = []
|
||
|
pr_perc_50 = []
|
||
|
pr_perc_60 = []
|
||
|
pr_perc_70 = []
|
||
|
pr_perc_80 = []
|
||
|
pr_perc_90 = []
|
||
|
pr_perc_95 = []
|
||
|
sr_perc_50 = []
|
||
|
sr_perc_60 = []
|
||
|
sr_perc_70 = []
|
||
|
sr_perc_80 = []
|
||
|
sr_perc_90 = []
|
||
|
sr_perc_95 = []
|
||
|
for bucket, data in sorted(all_data.items(), key=lambda kv: kv[0]):
|
||
|
x.append(bucket)
|
||
|
avg_out.append(data['avg_out'])
|
||
|
min_out.append(data['min_out'])
|
||
|
max_out.append(data['max_out'])
|
||
|
known_out.append(data['known_out'])
|
||
|
known_pr.append(data['known_pr'])
|
||
|
known_sr.append(data['known_sr'])
|
||
|
avg_sr.append(data['avg_sr'])
|
||
|
avg_pr.append(data['avg_pr'])
|
||
|
|
||
|
pr_perc_50.append(data['pr_perc_50'])
|
||
|
pr_perc_60.append(data['pr_perc_60'])
|
||
|
pr_perc_70.append(data['pr_perc_70'])
|
||
|
pr_perc_80.append(data['pr_perc_80'])
|
||
|
pr_perc_90.append(data['pr_perc_90'])
|
||
|
pr_perc_95.append(data['pr_perc_95'])
|
||
|
|
||
|
sr_perc_50.append(data['sr_perc_50'])
|
||
|
sr_perc_60.append(data['sr_perc_60'])
|
||
|
sr_perc_70.append(data['sr_perc_70'])
|
||
|
sr_perc_80.append(data['sr_perc_80'])
|
||
|
sr_perc_90.append(data['sr_perc_90'])
|
||
|
sr_perc_95.append(data['sr_perc_95'])
|
||
|
|
||
|
# plt.plot(x, avg_out, label='avg_out')
|
||
|
# plt.plot(x, max_out, label='max_out')
|
||
|
# plt.plot(x, min_out, label='min_out')
|
||
|
# plt.plot(x, known_out, label='known_out')
|
||
|
# plt.plot(x, known_pr, label='known_pr')
|
||
|
fig, ax = plt.subplots()
|
||
|
ax.plot(x, known_sr, label='known_sr')
|
||
|
|
||
|
# plt.plot(x, pr_perc_50, label='pr_perc_50')
|
||
|
# plt.plot(x, pr_perc_80, label='pr_perc_80')
|
||
|
# plt.plot(x, pr_perc_90, label='pr_perc_90')
|
||
|
# plt.plot(x, pr_perc_95, label='pr_perc_95')
|
||
|
|
||
|
ax.plot(x, sr_perc_50, label='sr_perc_50')
|
||
|
ax.plot(x, sr_perc_60, label='sr_perc_60')
|
||
|
ax.plot(x, sr_perc_70, label='sr_perc_70')
|
||
|
ax.plot(x, sr_perc_80, label='sr_perc_80')
|
||
|
ax.plot(x, sr_perc_90, label='sr_perc_90')
|
||
|
ax.plot(x, sr_perc_95, label='sr_perc_95')
|
||
|
|
||
|
ax.set_title(f'SensorRank after adding {edges} edges')
|
||
|
fig.autofmt_xdate()
|
||
|
fig.legend()
|
||
|
plt.savefig(f'./{edges}_sr_percentiles.png')
|
||
|
print('created sr plot')
|
||
|
# plt.show()
|
||
|
|
||
|
fig, ax = plt.subplots()
|
||
|
ax.plot(x, known_pr, label='known_pr')
|
||
|
|
||
|
ax.plot(x, pr_perc_50, label='pr_perc_50')
|
||
|
ax.plot(x, pr_perc_60, label='pr_perc_60')
|
||
|
ax.plot(x, pr_perc_70, label='pr_perc_70')
|
||
|
ax.plot(x, pr_perc_80, label='pr_perc_80')
|
||
|
ax.plot(x, pr_perc_90, label='pr_perc_90')
|
||
|
ax.plot(x, pr_perc_95, label='pr_perc_95')
|
||
|
|
||
|
ax.set_title(f'PageRank after adding {edges} edges')
|
||
|
fig.autofmt_xdate()
|
||
|
fig.legend()
|
||
|
plt.savefig(f'./{edges}_pr_percentiles.png')
|
||
|
print('created pr plot')
|
||
|
# plt.show()
|
||
|
|
||
|
|
||
|
if __name__ == '__main__':
|
||
|
main()
|