import pandas as pd import numpy as np from matplotlib import pyplot as plt import benchmarks.common as common def tlratio(): data = pd.read_csv('benchmarks/results/nb_gm_004_profile.csv') data2 = pd.read_csv('benchmarks/results/nb_gm_002_profile.csv') data = data.append(data2,ignore_index=True) stats = [] for trials in range(common.trials_range[1]): alg2 = (data.alg == 'nb_gm_002') & (data.trials == trials) alg4 = (data.alg == 'nb_gm_004') & (data.trials == trials) targets2 = data[alg2].targets if alg2.shape[0] > 0 else np.nan targets4 = data[alg4].targets if alg4.shape[0] > 0 else np.nan lures2 = data[alg2].lures if alg2.shape[0] > 0 else np.nan lures4 = data[alg4].lures if alg4.shape[0] > 0 else np.nan stats.append([trials, (targets2/lures2).mean(), (targets4/lures4).mean()]) stats = pd.DataFrame(stats, columns=['trials', 'tl2', 'tl4']) #.dropna(subset=['skewness']) plt.style.use('ggplot') plt.ylim(bottom=0, top=30) plt.scatter(stats.trials, stats.tl2, color='blue', alpha=0.2, label='nb_gm_002') idx = np.isfinite(stats.trials) & np.isfinite(stats.tl2) p = np.poly1d(np.polyfit(stats.trials[idx], stats.tl2[idx], 1)) plt.plot(stats.trials, p(stats.trials), color='blue') plt.scatter(stats.trials, stats.tl4, color='red', alpha=0.2, label='nb_gm_004') idx = np.isfinite(stats.trials) & np.isfinite(stats.tl4) p = np.poly1d(np.polyfit(stats.trials[idx], stats.tl4[idx], 2)) plt.plot(stats.trials, p(stats.trials), color='red') # plt.title('T:L Ratio') plt.ylabel('T:L Ratio') plt.xlabel('Trials') plt.legend() plt.savefig(f'benchmarks/results/2vs4_tlratio.png', bbox_inches='tight') plt.show() def time_per_trial(): data = pd.read_csv('benchmarks/results/nb_gm_004_profile.csv') data2 = pd.read_csv('benchmarks/results/nb_gm_002_profile.csv') data = data.append(data2) stats = [] for t in range(common.trials_range[1]): alg2 = (data.alg == 'nb_gm_002') & (data.trials == t) alg4 = (data.alg == 'nb_gm_004') & (data.trials == t) time2 = data[alg2].time.mean() * 1000 if alg2.shape[0] > 0 else np.nan time4 = data[alg4].time.mean() * 1000 if alg4.shape[0] > 0 else np.nan stats.append([t, time2, time4]) stats = pd.DataFrame(stats, columns=['trials', 'time2', 'time4']) #.dropna(subset=['skewness']) print(stats) plt.style.use('ggplot') plt.scatter(stats.trials, stats.time2, color='blue', alpha=0.2, label='nb_gm_002') idx = np.isfinite(stats.trials) & np.isfinite(stats.time2) p = np.poly1d(np.polyfit(stats.trials[idx], stats.time2[idx], 3)) plt.plot(stats.trials, p(stats.trials), color='blue') plt.scatter(stats.trials, stats.time4, color='red', alpha=0.2, label='nb_gm_004') idx = np.isfinite(stats.trials) & np.isfinite(stats.time4) p = np.poly1d(np.polyfit(stats.trials[idx], stats.time4[idx], 3)) plt.plot(stats.trials, p(stats.trials), color='red') # plt.title('Time Profile') plt.ylabel('Time (ms)') plt.xlabel('Trials') plt.legend() plt.savefig(f'benchmarks/results/2v4_time_trials.png', bbox_inches='tight') plt.show() def time_profiles(): data = pd.read_csv('benchmarks/results/nb_gm_004_profile.csv') data2 = pd.read_csv('benchmarks/results/nb_gm_002_profile.csv') data = data.append(data2) stats = [] for ni in range(2, 8): alg2 = (data.alg == 'nb_gm_002') & (data.n == ni) alg4 = (data.alg == 'nb_gm_004') & (data.n == ni) time2 = data[alg2].time.mean() * 1000 time4 = data[alg4].time.mean() * 1000 stats.append([ni, time2, time4]) stats = pd.DataFrame(stats, columns=['n', 'time2', 'time4']) #.dropna(subset=['skewness']) print(stats) plt.style.use('ggplot') plt.scatter(stats.n, stats.time2, color='blue', alpha=0.2, label='nb_gm_002') p = np.poly1d(np.polyfit(stats.n, stats.time2, 3)) plt.plot(stats.n, p(stats.n), color='blue') plt.scatter(stats.n, stats.time4, color='red', alpha=0.2, label='nb_gm_004') p = np.poly1d(np.polyfit(stats.n, stats.time4, 3)) plt.plot(stats.n, p(stats.n), color='red') # plt.title('Time Profile') plt.ylabel('Time (ms)') plt.xlabel('N') plt.legend() plt.savefig(f'benchmarks/results/2vs4_time_n.png', bbox_inches='tight') plt.show() def skewness(): data = pd.read_csv('benchmarks/results/nb_gm_004_profile.csv') data2 = pd.read_csv('benchmarks/results/nb_gm_002_profile.csv') data = data.append(data2) stats = [] for ni in range(2, 9): all_alg2 = (data.alg == 'nb_gm_002') & (data.n == ni) skewed_alg2 = (data.alg == 'nb_gm_002') & (data.n == ni) & data.skewed all_alg4 = (data.alg == 'nb_gm_004') & (data.n == ni) skewed_alg4 = (data.alg == 'nb_gm_004') & (data.n == ni) & data.skewed num_of_sequences2 = data[all_alg2].shape[0] skewed_sequences2 = data[skewed_alg2].shape[0] num_of_sequences4 = data[all_alg4].shape[0] skewed_sequences4 = data[skewed_alg4].shape[0] skewness2 = skewed_sequences2 * 100.0 / num_of_sequences2 if (num_of_sequences2>0) else 0 skewness4 = skewed_sequences4 * 100.0 / num_of_sequences4 if (num_of_sequences4>0) else 0 stats.append([ni, skewness2, skewness4]) stats = pd.DataFrame(stats, columns=['n', 'skewness2', 'skewness4']) #.dropna(subset=['skewness']) plt.style.use('ggplot') plt.scatter(stats.n, stats.skewness2, color='blue', alpha=0.2, label='nb_gm_002') p = np.poly1d(np.polyfit(stats.n, stats.skewness2, 3)) plt.plot(stats.n, p(stats.n), color='blue') plt.scatter(stats.n, stats.skewness4, color='red', alpha=0.2, label='nb_gm_004') p = np.poly1d(np.polyfit(stats.n, stats.skewness4, 3)) plt.plot(stats.n, p(stats.n), color='red') # plt.title('Skewness') plt.ylabel('Skewed Blocks (%)') plt.xlabel('N') plt.legend() plt.savefig(f'benchmarks/results/2vs4_skewness.png', bbox_inches='tight') plt.show() if __name__ == "__main__": tlratio() skewness() time_profiles() time_per_trial()