File size: 3,382 Bytes
7b295db
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
import pandas as pd
import os
# import matplotlib

def create_plots(path_file,path_save):
    df = pd.read_csv(path_file)
    # df_reply = df[['Name', 'Accuracy replies']]
    # df_sources = df[['Name', 'Accuracy sources']]

    generate_plot(df, 'Accuracy replies', path_save, 'figure_replies.png')
    generate_plot(df, 'Accuracy sources', path_save, 'figure_sources.png')
    generate_all_plot(df, path_save, 'figure_total.png')

def create_plots_list_values(list_path_file,path_save):
    df_list = []
    for path_file in list_path_file:
        df_list += [pd.read_csv(path_file)]

    output_replies, output_sources = get_mean_std(df_list)

    generate_plot(output_replies, 'mean', path_save, 'figure_replies_mean.png', std = True)
    generate_plot(output_sources, 'mean', path_save, 'figure_sources_mean.png', std = True)


    output_replies = output_replies.set_index('Name')
    output_sources = output_sources.set_index('Name')
    df_merge = pd.concat([output_replies, output_sources], axis=1)
    df_merge.columns = ['mean_replies', 'std_r', 'mean_sources', 'std_s']
    df_merge = df_merge.sort_values(by='mean_replies', ascending=False)
    print(df_merge)
    ax = df_merge.plot.barh(y=['mean_replies', 'mean_sources'], xerr=df_merge[['std_r', 'std_s']].T.values)
    fig = ax.get_figure()
    fig.savefig(os.path.join(path_save, 'figure_total_mean.png'), bbox_inches='tight')
    # generate_all_plot(df, path_save, 'figure_total.png')

def get_mean_std(df_list):
    df_merge = pd.concat(df_list)
    output_replies = get_mean_std_from_merge(df_merge, 'Accuracy replies')
    output_sources = get_mean_std_from_merge(df_merge, 'Accuracy sources')
    return output_replies, output_sources

    # ax = output_sources.plot.barh(x='Name', y='mean', xerr='std')
    # fig = ax.get_figure()
    # fig.savefig(os.path.join("plots/QA_generated+Nicolas", "test2.jpg"), bbox_inches='tight')

def get_mean_std_from_merge(df_merge, accuracy_name):
    output = df_merge.groupby(['Name'], as_index=False).agg({accuracy_name:['mean','std']})
    output.columns = output.columns.droplevel()
    output = output.rename(columns={'': "Name"})
    return output
    
def generate_plot(df, y, path_save, name_figure, std = False):
    df = df.sort_values(by=y, ascending=False)
    if std:
        ax = df.plot.barh(x='Name', y=y, xerr='std')
    else:
        ax = df.plot.barh(x='Name', y=y)
    fig = ax.get_figure()
    fig.savefig(os.path.join(path_save, name_figure), bbox_inches='tight')

def generate_all_plot(df, path_save, name_figure):
    df = df.sort_values(by='Accuracy sources', ascending=False)
    df = df.set_index('Name')
    ax = df.plot.barh()
    fig = ax.get_figure()
    fig.savefig(os.path.join(path_save, name_figure), bbox_inches='tight')


if __name__ == "__main__":
    # path_file = "results_QA_Nicolas.csv"
    # path_save = "plots/QA_Nicolas"
    # path_file = "results_QA_generated.csv"
    # path_save = "plots/QA_generated"

    # path_file = ["results_QA_gen_V5.csv", "results_QA_Nicolas_V5.csv"]
    # path_save = "plots/QA_generated+Nicolas_V5"

    path_file = "results_QA_gen_V5.csv"
    path_save = "plots/QA_generated_V5"

    if not os.path.exists(path_save):
        os.makedirs(path_save)

    if not isinstance(path_file, list):
        create_plots(path_file, path_save)
    else:
        create_plots_list_values(path_file,path_save)