diff --git a/0_mojitos.py b/0_mojitos.py
new file mode 100644
index 0000000000000000000000000000000000000000..4eb48cae11fda63965e5b07b2c9d02a52d7ebd2e
--- /dev/null
+++ b/0_mojitos.py
@@ -0,0 +1,91 @@
+# python3 0_mojitos.py --dir "Log/Flower_campaign/Flower_instance_fedAvg_cifar10_epoch1"
+
+import os
+import json
+import pandas as pd
+from pathlib import Path
+import glob
+import argparse
+
+# Command-line argument parsing
+parser = argparse.ArgumentParser(description="Specify log directory for processing Mojitos files")
+parser.add_argument('--dir', required=True, help="Path to the directory containing log files")
+args = parser.parse_args()
+
+# Directory from command line argument
+processing_dir = args.dir
+
+# Correct the directory name if necessary
+config_pattern = os.path.join(processing_dir, "Expetator", "config_instance_*.json")
+config_files = glob.glob(config_pattern)
+print(config_files)
+
+if config_files:
+    meta_file = config_files[0]  # Since there is only one, take the first match
+    print("Found config file:", meta_file)
+else:
+    print("No config file found")
+    exit(1)
+
+with open(meta_file, "r") as file:
+    metadata = json.load(file)
+
+server_ip = metadata["server"]["ip"]
+clients_info = metadata["clients"]
+clients_ips = {client["ip"]: client["name"] for client in clients_info}
+
+# Function to find the single "_mojitos" directory
+def find_single_mojitos_dir(folder_path):
+    for root, dirs, files in os.walk(folder_path):
+        for dir_name in dirs:
+            if dir_name.endswith("mojitos"):
+                return os.path.join(root, dir_name)
+    return None  # Return None if no mojitos folder is found
+
+# Find the single "_mojitos" directory
+mojitos_dir = find_single_mojitos_dir(processing_dir)
+
+if mojitos_dir is None:
+    print("No mojitos directory found")
+    exit(1)
+
+# Defined pattern to find all files in the mojitos directory
+mojitos_file_pattern = os.path.join(mojitos_dir, "*-*.grid5000.fr_flower_*")
+mojitos_file_list = glob.glob(mojitos_file_pattern)
+
+# Dictionary to store all the individual frames
+mojitos_individual_frames = {}
+# Create output directory for processed files
+output_dir = os.path.join(mojitos_dir, "processed_files")
+os.makedirs(output_dir, exist_ok=True)
+
+for file_path in sorted(mojitos_file_list):
+
+    filename = os.path.basename(file_path)
+    identifier, last_number = filename.split("_flower_")
+    identifier = identifier.split('.')[0]
+    last_number = last_number.strip()
+
+    df = pd.read_csv(file_path, sep="\s+")
+
+    energy_columns = [col for col in df.columns if col.startswith("package") or col.startswith("dram")]
+
+    if energy_columns:
+        df["sum_package_dram_idle"] = df[energy_columns].sum(axis=1)  # Sum of package, dram and idle energy
+
+    mojitos_individual_frames[filename] = df
+
+    output_file = os.path.join(output_dir, f"processed_{filename}")
+    df.to_csv(output_file, index=False)
+
+# # Merging all dataframes into one
+# merged_df = pd.concat(mojitos_individual_frames.values(), ignore_index=True)
+
+# # Save the merged dataframe into a CSV file
+# test_camp = os.path.basename(os.path.dirname(processing_dir))
+# test_case = os.path.basename(processing_dir)
+
+# output_merged_file = os.path.join(output_dir, f"merged_mojitos_{test_camp}_{test_case}.csv")
+# merged_df.to_csv(output_merged_file, index=False)
+
+# print(f"Merged file saved to: {output_merged_file}")
\ No newline at end of file
diff --git a/1_mojitos_ana.py b/1_mojitos_ana.py
new file mode 100644
index 0000000000000000000000000000000000000000..31f7dfcbf3661532007e0c57366b59ff4eb250f7
--- /dev/null
+++ b/1_mojitos_ana.py
@@ -0,0 +1,143 @@
+# cmd: python3 1_mojitos_ana.py --dir "Log/Flower_TetHoliday/Flower_instance_fedAvg_cifar10"
+# output: merged_mojitos_{test_camp}_{test_case}.csv -> merged_mojitos_Flower_TetHoliday_Flower_instance_fedAvg_cifar10.csv
+
+import os 
+import json
+import pandas as pd
+from pathlib import Path
+import glob
+import argparse
+
+current_dir = os.getcwd()
+parent_dir = os.path.abspath(os.path.join(current_dir))
+
+parser = argparse.ArgumentParser(description="Specify log directory with parsed values")
+parser.add_argument('--dir', required=True, help="Value of log directory")
+args = parser.parse_args()
+
+processing_str = args.dir
+processing_dir = os.path.join(parent_dir, processing_str)
+test_camp = os.path.basename(os.path.dirname(processing_dir))
+test_case = os.path.basename(processing_dir)
+
+config_pattern = os.path.join(processing_dir, "Expetator", "config_instance*.json")
+config_files = glob.glob(config_pattern)
+
+if config_files:
+    meta_file = config_files[0]  # Since there is only one, take the first match
+    print("Found config file:", meta_file)
+else:
+    print("No config file found")
+
+with open(meta_file,"r") as file:
+    metadata = json.load(file)
+    
+server_ip = metadata["server"]["ip"]
+clients_info = metadata["clients"]
+clients_ips = {client["ip"]: client["name"] for client in clients_info}
+
+
+# a_dataset = metadata["dataset"]
+# a_num_round = metadata["round"]
+# a_strategy = metadata["strategy"]
+# a_timestamp = metadata["timestamp"]
+
+# Function to find the single "_mojitos" directory
+def find_single_mojitos_dir(folder_path):
+    for root, dirs, files in os.walk(folder_path):
+        for dir_name in dirs:
+            if dir_name.endswith("mojitos"):
+                return os.path.join(root, dir_name)
+    return None  # Return None if no mojitos folder is found
+
+# Find the single mojitos in processed directory
+mojitos_dir = find_single_mojitos_dir(processing_dir)
+mojitos_dir_p = os.path.join(mojitos_dir, "processed_files")
+print("Found mojitos directory:", mojitos_dir_p)
+# File pattern to match all relevant files
+mojitos_file_pattern = os.path.join(mojitos_dir_p, "*-*.grid5000.fr_flower_*")
+mojitos_file_list = glob.glob(mojitos_file_pattern)
+print("Found", len(mojitos_file_list), "files")
+
+# Dictionary to store individual DataFrames
+mojitos_individual_frames = {}
+# Initialize a list to collect all DataFrames for the single, merged output
+mojitos_df_list = []
+
+# Process each file
+# Process each file
+for file_path in sorted(mojitos_file_list):
+    # Extract 'gros-xx' and the final numeric identifier from the filename
+    filename = os.path.basename(file_path)
+    identifier, last_number = filename.split("_flower_")
+    identifier = identifier.split('.')[0]
+    identifier = identifier.split('_')[1]
+    last_number = last_number.strip()
+    
+    df = pd.read_csv(file_path, sep=",", engine='python')
+    
+    # List of columns for energy consumption
+    energy_columns = [col for col in df.columns if col.startswith("package") or col.startswith("dram") or col.startswith("idle")]
+
+    # Check if necessary columns exist
+    if energy_columns:
+        # Calculate sum of package, dram, and idle at each timestamp
+        df["sum_package_dram_idle"] = df[energy_columns].sum(axis=1)
+        
+        # Compute statistics on the sum column
+        sum_stats = {
+            "median_sum_package_dram_idle": df["sum_package_dram_idle"].median(),
+            "mean_sum_package_dram_idle": df["sum_package_dram_idle"].mean(),
+            "std_sum_package_dram_idle": df["sum_package_dram_idle"].std(),
+            "min_sum_package_dram_idle": df["sum_package_dram_idle"].min(),
+            "max_sum_package_dram_idle": df["sum_package_dram_idle"].max(),
+            "q1_sum_package_dram_idle": df["sum_package_dram_idle"].quantile(0.25),
+            "q3_sum_package_dram_idle": df["sum_package_dram_idle"].quantile(0.75),
+            "sum_package_dram_idle": df["sum_package_dram_idle"].sum()
+        }
+    else:
+        sum_stats = {}  # No data available
+
+    # Calculate statistics for specific columns
+    columns_to_analyze = ["br0:rxp", "br0:rxb", "br0:txp", "br0:txb"]
+    df_list = []
+    
+    for column in columns_to_analyze:
+        if column in df.columns:  
+            stats = {
+                f"median_{column}": df[column].median(),
+                f"mean_{column}": df[column].mean(),
+                f"std_{column}": df[column].std(),
+            }
+            df_list.append(pd.DataFrame([stats]))
+    
+    # Convert sum stats to DataFrame
+    df_list.append(pd.DataFrame([sum_stats]))
+
+    # Concatenate all DataFrames for the current file
+    concatenated_df = pd.concat(df_list, axis=1)
+
+    # Count number of data points
+    concatenated_df["n_data"] = df.shape[0]
+    concatenated_df["time (s)"] = df['#timestamp'].max() - df['#timestamp'].min()
+    concatenated_df["source"] = identifier
+    concatenated_df["file_number"] = last_number
+    
+    # Append to final DataFrame list
+    mojitos_df_list.append(concatenated_df)
+
+# Combine all DataFrames
+mojitos_merged_df = pd.concat(mojitos_df_list, ignore_index=True)
+print(mojitos_merged_df)
+
+# Save the single, merged DataFrame to a CSV file
+# Construct the full path
+mojitos_output_dir = os.path.join(parent_dir, "Data_analysis", "Output_level_1")
+mojitos_output_file = os.path.join(mojitos_output_dir, f"merged_mojitos_{test_camp}_{test_case}.csv")
+
+
+# Ensure the directory exists
+os.makedirs(mojitos_output_dir, exist_ok=True)
+
+mojitos_merged_df.to_csv(mojitos_output_file, index=False)
+print(f"Combined summary saved to {mojitos_output_file}")
diff --git a/2_power_ana.py b/2_power_ana.py
new file mode 100644
index 0000000000000000000000000000000000000000..08bc4ab8dc522556bfe86c1914d2845ba07b8020
--- /dev/null
+++ b/2_power_ana.py
@@ -0,0 +1,126 @@
+# cmd python3 2_power_ana.py --dir "Log/Flower_TetHoliday/Flower_instance_fedAvg_cifar10"
+# output: merged_power_{test_camp}_{test_case}.csv -> merged_power_Flower_TetHoliday_Flower_instance_fedAvg_cifar10.csv
+
+import os 
+import json
+import pandas as pd
+import glob
+import argparse
+from datetime import datetime
+
+# Set up directories and parse arguments
+current_dir = os.getcwd()
+parent_dir = os.path.abspath(os.path.join(current_dir))
+print(parent_dir)
+parser = argparse.ArgumentParser(description="Specify log directory with parsed values")
+parser.add_argument('--dir', required=True, help="Value of log directory")
+args = parser.parse_args()
+
+processing_str = args.dir
+processing_dir = os.path.join(parent_dir, processing_str)
+test_camp = os.path.basename(os.path.dirname(processing_dir))
+test_case = os.path.basename(processing_dir)
+
+config_pattern = os.path.join(processing_dir, "Expetator", "config_instance*.json")
+config_files = glob.glob(config_pattern)
+
+if config_files:
+    meta_file = config_files[0]  # Since there is only one, take the first match
+    print("Found config file:", meta_file)
+else:
+    print("No config file found")
+
+# Load metadata to identify server and clients
+with open(meta_file, "r") as file:
+    metadata = json.load(file)
+
+server_ip = metadata["server"]["ip"]
+clients_info = metadata["clients"]
+clients_ips = {client["ip"]: client["name"] for client in clients_info}
+
+
+# Function to find the single "_power" directory
+def find_single_power_dir(folder_path):
+    for root, dirs, files in os.walk(folder_path):
+        for dir_name in dirs:
+            if dir_name.endswith("power"):
+                return os.path.join(root, dir_name)
+    return None
+
+# Find the power directory
+power_dir = find_single_power_dir(processing_dir)
+
+# Pattern to match all relevant files in the new directory
+power_file_pattern = os.path.join(power_dir, "*-*.grid5000.fr_flower_*")
+power_file_list = glob.glob(power_file_pattern)
+
+# List to collect all DataFrames for the single, merged output
+power_df_list = []
+
+# Process each file
+for file_path in sorted(power_file_list):
+    filename = os.path.basename(file_path)
+    identifier, last_number = filename.split("_flower_")
+    last_number = last_number.strip()
+    
+    # Load data from the JSON power file
+    with open(file_path, 'r') as f:
+        data = json.load(f)
+        
+    # List to store DataFrames for each device
+    df_list = []
+
+    # Iterate over each entry in the data list
+    for entry in data:
+        # Assume entry has a structure like {"device": "hostname", "timestamps": [...], "power": [...]}
+        device = entry[0]       # Assuming entry[0] is "device" identifier
+        timestamps = entry[1]   # Assuming entry[1] is list of timestamps
+        power_values = entry[2] # Assuming entry[2] is list of power values
+
+        # Create a DataFrame for the current device
+        df = pd.DataFrame({
+            '#timestamp': timestamps,
+            'power': power_values
+        })
+
+        # Calculate processing time for the device
+        processing_time = max(timestamps) - min(timestamps)
+
+        # Calculate statistics for the power column
+        stats = {
+            "median_power": df['power'].median(),
+            "mean_power": df['power'].mean(),
+            "std_power": df['power'].std(),
+            "min_power": df["power"].min(),
+            "max_power": df["power"].max(),
+            "q1_power": df["power"].quantile(0.25),
+            "q3_power": df["power"].quantile(0.75),            
+            "n_data": len(df),
+            "source": device,
+            "time (s)": processing_time,
+            "file_number": last_number
+        }
+
+        # Append the stats to the list for the device
+        df_list.append(pd.DataFrame([stats]))
+
+    # Concatenate all device DataFrames into a single DataFrame for this file
+    file_df = pd.concat(df_list, ignore_index=True)
+
+    # Append to the list for the merged DataFrame
+    power_df_list.append(file_df)
+    
+# Combine all DataFrames into a single DataFrame
+power_merged_df = pd.concat(power_df_list, ignore_index=True)
+
+print(power_merged_df)
+
+# Construct the full path
+power_output_dir = os.path.join(parent_dir, "Data_analysis", "Output_level_1")
+power_output_file = os.path.join(power_output_dir, f"merged_power_{test_camp}_{test_case}.csv")
+
+# Ensure the directory exists
+os.makedirs(power_output_dir, exist_ok=True)
+
+power_merged_df.to_csv(power_output_file, index=False)
+print(f"Combined summary saved to {power_output_file}")
diff --git a/3_mean_energy.py b/3_mean_energy.py
new file mode 100644
index 0000000000000000000000000000000000000000..ae707156dfccf731ed3c40ca4c25c7b9bfc76519
--- /dev/null
+++ b/3_mean_energy.py
@@ -0,0 +1,77 @@
+# cmd python3 3_mean_energy.py --power Data_analysis/Output_level_1/merged_power_Flower_TetHoliday_Flower_instance_fedAvg_cifar10.csv --mojitos Data_analysis/Output_level_1/merged_mojitos_Flower_TetHoliday_Flower_instance_fedAvg_cifar10.csv
+# output: meam_energy_{instance}.csv -> mean_energy_Flower_TetHoliday_Flower_instance_fedAvg_cifar10.csv
+
+import pandas as pd
+import os
+import argparse
+import numpy as np
+
+# Set up directories and parse arguments
+current_dir = os.getcwd()
+parent_dir = os.path.abspath(os.path.join(current_dir))
+
+parser = argparse.ArgumentParser(description="Specify files with parsed values")
+parser.add_argument('--power', required=True, help="Value of power file")
+parser.add_argument('--mojitos', required=True, help="Value of mojitos file")
+args = parser.parse_args()
+
+# Load the CSV files into DataFrames
+power_file = os.path.join(parent_dir, args.power)
+mojitos_file = os.path.join(parent_dir, args.mojitos)
+basename = os.path.basename(power_file)
+extracted = os.path.splitext(basename)[0].replace("merged_power_", "")
+
+df_power = pd.read_csv(power_file)
+df_mojitos = pd.read_csv(mojitos_file)
+
+# Group by 'file_number' and calculate the mean of the respective columns
+mean_power_by_file_number = df_power.groupby("file_number")["mean_power"].mean()
+mean_mojitos_by_file_number = df_mojitos.groupby("file_number")["mean_sum_package_dram_idle"].mean()
+
+# std by file_number
+def combined_std(df_group, std_col, n_col):
+    num = np.sum((df_group[n_col] - 1) * df_group[std_col]**2)
+    denom = np.sum(df_group[n_col] - 1)
+    return np.sqrt(num / denom)
+
+# combined std by file_number
+std_power_by_file = df_power.groupby("file_number").apply(lambda x: combined_std(x, "std_power", "n_data"), include_groups=False)
+std_mojitos_by_file = df_mojitos.groupby("file_number").apply(lambda x: combined_std(x, "std_sum_package_dram_idle", "n_data"), include_groups=False)
+
+# # Combine the two Series into a single DataFrame
+# combined_df = pd.DataFrame({
+#     "mean_power": mean_power_by_file_number,
+#     "mean_mojitos": mean_mojitos_by_file_number
+# }).reset_index()
+
+# dataframe
+combined_df = pd.DataFrame({
+    "file_number": mean_power_by_file_number.index,
+    "mean_power": mean_power_by_file_number.values,
+    "mean_mojitos": mean_mojitos_by_file_number.values,
+    "std_power_combined": std_power_by_file.values,
+    "std_mojitos_combined": std_mojitos_by_file.values,
+    # "min_power": df_power.groupby("file_number")["min_power"].min().values,
+    # "max_power": df_power.groupby("file_number")["max_power"].max().values,
+    # "min_mojitos": df_mojitos.groupby("file_number")["min_package_dram_idle"].min().values,
+    # "max_mojitos": df_mojitos.groupby("file_number")["max_package_dram_idle"].max().values,
+    "sum_mojitos": df_mojitos.groupby("file_number")["sum_package_dram_idle"].sum().values,
+    "n_data_mojitos": df_power.groupby("file_number")["n_data"].sum().values,
+    "n_data_power": df_mojitos.groupby("file_number")["n_data"].sum().values
+})
+
+# Print the combined DataFrame
+print(combined_df)
+
+# # Construct the full path
+# E_output_dir = os.path.join(parent_dir, "Data_analysis", "Output_level_2")
+# E_output_file = os.path.join(E_output_dir, "mean_E_fedAvg2Clients.csv")
+
+E_output_dir = os.path.join(parent_dir, "Data_analysis", "Output_level_2")
+E_output_file = os.path.join(E_output_dir, f"mean_energy_{extracted}.csv")
+
+# Ensure the directory exists
+os.makedirs(E_output_dir, exist_ok=True)
+
+combined_df.to_csv(E_output_file, index=False)
+print(f"Combined summary saved to {E_output_file}")
\ No newline at end of file
diff --git a/4_flower_ana.py b/4_flower_ana.py
new file mode 100644
index 0000000000000000000000000000000000000000..6278178f4a53578d7c5b1183cd07ed0c24e61308
--- /dev/null
+++ b/4_flower_ana.py
@@ -0,0 +1,111 @@
+# cmd python3 4_flower_ana.py --dir
+# output: flower_<pattern>_accuracy_time.csv -> flower_fedAvg_accuracy_time.csv
+
+# import os, glob
+# import pandas as pd
+# import argparse
+
+# parser = argparse.ArgumentParser(description="Specify pattern with parsed values")
+# parser.add_argument('--pattern', required=True, help="String of pattern")
+# parser.add_argument('--dir', required=False, help="Path to the directory containing log files")
+# args = parser.parse_args()
+
+# current_dir = os.getcwd()
+# parent_dir = os.path.abspath(os.path.join(current_dir))
+# flower_dir = os.path.join(parent_dir, "Log_autres")
+
+# # flower_dir = "/home/hdomai/Documents/RepoLab/Data/Log_autres"
+# # File pattern to match all relevant files
+# flower_file_pattern = os.path.join(flower_dir, f"*_*_{args.pattern}_*")
+# flower_file_list = glob.glob(flower_file_pattern)
+
+# # Initialize an empty list to store the data
+# data_list = []
+
+# # Loop over all files
+# for file in flower_file_list:
+#     with open(file, "r") as f:
+#         data = pd.read_csv(f)
+#         df = pd.DataFrame(data)
+#         max_round = df["round"].max()
+#         accuracy = df.loc[df["round"] == max_round, "accuracy"].values[0] 
+#         # can replace max_round with the specific round number to get the accuracy at that round
+#         #time = df.loc[df["round"] == max_round, "time"].values[0]
+#         time = df["time"].sum()
+#         # Append the data to the list
+#         data_list.append({"filepath": file, "accuracy": accuracy, "time": time})
+
+# # Create a DataFrame from the list
+# flower_data = pd.DataFrame(data_list)
+
+# output_dir = os.path.join(parent_dir, "Data_analysis", "Output_level_2")
+# output_file = os.path.join(output_dir, f"flower_{args.pattern}_accuracy_time.csv")
+
+# # Ensure the directory exists
+# os.makedirs(output_dir, exist_ok=True)
+
+# # Save the DataFrame to a CSV file
+# flower_data.to_csv(output_file, index=False)
+# print(f"Data saved to {output_file}")
+
+import os
+import glob
+import pandas as pd
+import argparse
+
+parser = argparse.ArgumentParser(description="Specify instance directory and pattern")
+parser.add_argument('--dir', required=True, help="Path to the instance directory")
+args = parser.parse_args()
+
+instance_dir = args.dir  # Instance directory (vd: Flower_instance_fedAvg2Clients_cifar10_epoch1)
+
+filename = os.path.basename(instance_dir)
+identifier = filename.split("_instance_")[1]
+
+# Set up directories and parse arguments
+current_dir = os.getcwd()
+parent_dir = os.path.abspath(os.path.join(current_dir))
+
+# Lấy danh sách tất cả thư mục Flwr_... bên trong instance
+flwr_dirs = [os.path.join(instance_dir, d) for d in os.listdir(instance_dir) if d.startswith("Flwr") and os.path.isdir(os.path.join(instance_dir, d))]
+
+# Tìm file training_results_... trong từng thư mục Flwr_
+flower_file_list = []
+for flwr_dir in flwr_dirs:
+    flower_file_pattern = os.path.join(flwr_dir, "training_results_*")
+    flower_file_list.extend(glob.glob(flower_file_pattern))
+
+# Kiểm tra có file nào không
+if not flower_file_list:
+    print(f" Không tìm thấy file training_results_... trong {instance_dir}")
+    exit()
+
+# Initialize list to store data
+data_list = []
+
+# Process each file
+for file in flower_file_list:
+    df = pd.read_csv(file)
+    max_round = df["round"].max()
+    accuracy = df.loc[df["round"] == max_round, "accuracy"].values[0]  
+    max_accuracy = df["accuracy"].max()
+    round_max_accuracy = df.loc[df["accuracy"] == max_accuracy, "round"].values[0]
+    total_time = df["time"].sum()
+
+    # Append data
+    data_list.append({"filepath": file, "accuracy": accuracy, "max_acc": max_accuracy, "in_round": round_max_accuracy, "time": total_time})
+
+# Create DataFrame
+flower_data = pd.DataFrame(data_list)
+
+# Lưu output
+
+output_dir = os.path.join(parent_dir, "Data_analysis", "Output_level_2")
+output_file = os.path.join(output_dir, f"flower_{identifier}_accuracy_time.csv")
+
+# Ensure the directory exists
+os.makedirs(output_dir, exist_ok=True)
+
+# Save the DataFrame to a CSV file
+flower_data.to_csv(output_file, index=False)
+print(f"Data saved to {output_file}")
diff --git a/5_combine_energy_fl.py b/5_combine_energy_fl.py
new file mode 100644
index 0000000000000000000000000000000000000000..e3b62e02cb10c2b4e36ad10e83f5aaa97537bb10
--- /dev/null
+++ b/5_combine_energy_fl.py
@@ -0,0 +1,86 @@
+# cmd python3 5_combine_energy_fl.py -a Data_analysis/Output_level_2/flower_fedAvg2Clients_accuracy_time.csv -e Data_analysis/Output_level_2/mean_energy_Flower_TetHoliday_Flower_instance_fedAvg2Clients_cifar10.csv -m Log/Flower_TetHoliday/Flower_instance_fedAvg2Clients_cifar10/Expetator_gros-24.nancy.grid5000.fr_1738035839
+# output: combine_{extracted_name}.csv -> combine_Flower_TetHoliday_Flower_instance_fedAvg2Clients_cifar10.csv
+
+import pandas as pd
+import os
+from datetime import datetime
+import argparse
+
+parser = argparse.ArgumentParser(description="Specify pattern with parsed values")
+parser.add_argument('-a','--accuracy', required=True, help="Accuracy file path")
+parser.add_argument('-e','--energy', required=True, help="Energy file path")
+parser.add_argument('-m','--meta', required=True, help="Meta data file path")
+args = parser.parse_args()
+ 
+current_dir = os.getcwd()
+parent_dir = os.path.abspath(os.path.join(current_dir))
+
+# Load data
+accuracies_file = os.path.abspath(os.path.join(current_dir, args.accuracy))
+energy_file = os.path.abspath(os.path.join(current_dir, args.energy))
+exp_file = os.path.abspath(os.path.join(current_dir, args.meta))
+# accuracies_file = "/home/hdomai/Documents/RepoLab/Data/Data_analysis/Output_level_2/fedAvg_accuracies.csv"
+# energy_file = "/home/hdomai/Documents/RepoLab/Data/Data_analysis/Output_level_2/mean_E_fedAvg_file_number.csv"
+# exp_file = "/home/hdomai/Documents/RepoLab/Data/Log/Flower_TetHoliday/Flower_instance_fedAvg_cifar10/Expetator_gros-24.nancy.grid5000.fr_1738029020"
+
+# Get the name of output file
+basename = os.path.basename(energy_file)
+extracted = os.path.splitext(basename)[0].replace("mean_energy_", "")
+
+df_acc = pd.read_csv(accuracies_file)
+df_energy = pd.read_csv(energy_file)
+df_exp = pd.read_csv(exp_file, sep='\s+')
+
+# # Print columns to debug
+# print("Columns in df_exp:", df_exp.columns)
+# exit()
+# Step 1: Extract timestamp from file_path in accuracies
+def extract_timestamp(file_path):
+    date_str = file_path.split("_")[-2] + "_" + file_path.split("_")[-1].split(".")[0]
+    return int(datetime.strptime(date_str, "%Y%m%d_%H%M%S").timestamp())
+
+df_acc['timestamp'] = df_acc['filepath'].apply(extract_timestamp)
+
+# Step 2: Find the closest file_number from energy for each timestamp
+df_energy['file_number'] = df_energy['file_number'].astype(int)
+
+def find_closest_file_number(acc_timestamp, energy_timestamps):
+    closest_timestamp = min(energy_timestamps, key=lambda x: abs(x - acc_timestamp))
+    return closest_timestamp
+
+df_acc['mapped_file_number'] = df_acc['timestamp'].apply(
+    lambda x: find_closest_file_number(x, df_energy['file_number'].values)
+)
+
+# Step 3: Combine accuracies and energy data
+df_combined = pd.merge(
+    df_acc,
+    df_energy,
+    left_on="mapped_file_number",
+    right_on="file_number",
+    how="inner"
+)
+
+# Step 4: Add the fmax column by merging with file mojitos records
+df_combined = pd.merge(
+    df_combined,
+    df_exp[["startTime", "fmax"]],
+    left_on="file_number",
+    right_on="startTime",
+    how="left"
+)
+
+df_combined = df_combined[['file_number','fmax', 'accuracy','max_acc', 'in_round', 'time', 'mean_power', 'mean_mojitos', 'std_power_combined', 'std_mojitos_combined', 'sum_mojitos', 'n_data_mojitos', 'n_data_power', 'startTime','filepath',]]
+
+
+print(df_combined)
+
+# Construct the full path
+output_dir = os.path.join(parent_dir, "Data_analysis", "Output_level_3")
+output_file = os.path.join(output_dir, f"combine_{extracted}.csv")
+
+# Ensure the directory exists
+os.makedirs(output_dir, exist_ok=True)
+
+df_combined.to_csv(output_file, index=False)
+print(f"Combined summary saved to {output_file}")
diff --git a/6_final.py b/6_final.py
new file mode 100644
index 0000000000000000000000000000000000000000..c4c6c35291019ddec76531a08ce9c89e4724db6f
--- /dev/null
+++ b/6_final.py
@@ -0,0 +1,68 @@
+# cmd: python3 6_final.py -f Data_analysis/Output_level_3/combine_Flower_TetHoliday_Flower_instance_fedAvg_cifar10.csv Data_analysis/Output_level_3/combine_Flower_TetHoliday_Flower_instance_fedAvg2Clients_cifar10.csv
+# output: /home/hdomai/Documents/RepoLab/Data/Data_analysis/Output_level_4/combine_Flower_TetHoliday_campaign.csv
+
+
+import pandas as pd
+import plotly.graph_objects as go
+from plotly.subplots import make_subplots
+import plotly.express as px 
+import os
+import argparse
+
+current_dir = os.getcwd()
+parent_dir = os.path.abspath(os.path.join(current_dir))
+'''
+parser = argparse.ArgumentParser(description="Specify pattern with parsed values")
+parser.add_argument('-f1','--file1', required=True, help="1st file path")
+parser.add_argument('-f2','--file2', required=True, help="2nd file path")
+args = parser.parse_args()
+
+file_path_1 = args.file1
+file_path_2 = args.file2
+
+# Load the data
+df_2clients = pd.read_csv(file_path_1)
+df_fedavg = pd.read_csv(file_path_2)
+
+# Add a source column to distinguish between fedAvg and fedAvg2Clients
+df_2clients['source'] = 'fedAvg2Clients'
+df_fedavg['source'] = 'fedAvg'
+
+# Combine the two dataframes
+df = pd.concat([df_2clients, df_fedavg])
+print(df)
+
+'''
+
+parser = argparse.ArgumentParser(description="Specify pattern with parsed values")
+parser.add_argument('-f', '--files', nargs='+', required=True, help="List of file paths")
+parser.add_argument('-c', '--campaign', required=True, help="Text of campaign")
+args = parser.parse_args()
+
+file_paths = args.files
+campaign = args.campaign
+
+# Initialize an empty list to hold dataframes
+dataframes = []
+
+# Loop through each file path, load the data, and add the source column
+for i, file_path in enumerate(file_paths):
+    df = pd.read_csv(file_path)
+    
+    indentifier = os.path.basename(file_path).split("_instance_")[1].split(".csv")[0]
+    df["instance"] = indentifier
+    dataframes.append(df)
+
+# Combine all dataframes
+combined_df = pd.concat(dataframes)
+print(combined_df)
+
+# Construct the full path
+output_dir = os.path.join(parent_dir, "Data_analysis", "Output_level_4")
+output_file = os.path.join(output_dir, f"combine_{campaign}.csv")
+
+# Ensure the directory exists
+os.makedirs(output_dir, exist_ok=True)
+
+combined_df.to_csv(output_file, index=False)
+print(f"Combined summary saved to {output_file}")
\ No newline at end of file
diff --git a/7_PLOT.ipynb b/7_PLOT.ipynb
new file mode 100644
index 0000000000000000000000000000000000000000..0e5945bfe0df2f388f171b7a6af8704bc142237f
--- /dev/null
+++ b/7_PLOT.ipynb
@@ -0,0 +1,4133 @@
+{
+ "cells": [
+  {
+   "cell_type": "code",
+   "execution_count": 68,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "import pandas as pd\n",
+    "import plotly.graph_objects as go\n",
+    "from plotly.subplots import make_subplots\n",
+    "import plotly.express as px \n",
+    "import numpy as np"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 69,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "application/vnd.microsoft.datawrangler.viewer.v0+json": {
+       "columns": [
+        {
+         "name": "index",
+         "rawType": "int64",
+         "type": "integer"
+        },
+        {
+         "name": "file_number",
+         "rawType": "int64",
+         "type": "integer"
+        },
+        {
+         "name": "fmax",
+         "rawType": "int64",
+         "type": "integer"
+        },
+        {
+         "name": "accuracy",
+         "rawType": "float64",
+         "type": "float"
+        },
+        {
+         "name": "max_acc",
+         "rawType": "float64",
+         "type": "float"
+        },
+        {
+         "name": "in_round",
+         "rawType": "int64",
+         "type": "integer"
+        },
+        {
+         "name": "time",
+         "rawType": "float64",
+         "type": "float"
+        },
+        {
+         "name": "mean_power",
+         "rawType": "float64",
+         "type": "float"
+        },
+        {
+         "name": "mean_mojitos",
+         "rawType": "float64",
+         "type": "float"
+        },
+        {
+         "name": "std_power_combined",
+         "rawType": "float64",
+         "type": "float"
+        },
+        {
+         "name": "std_mojitos_combined",
+         "rawType": "float64",
+         "type": "float"
+        },
+        {
+         "name": "sum_mojitos",
+         "rawType": "int64",
+         "type": "integer"
+        },
+        {
+         "name": "n_data_mojitos",
+         "rawType": "int64",
+         "type": "integer"
+        },
+        {
+         "name": "n_data_power",
+         "rawType": "int64",
+         "type": "integer"
+        },
+        {
+         "name": "startTime",
+         "rawType": "int64",
+         "type": "integer"
+        },
+        {
+         "name": "filepath",
+         "rawType": "object",
+         "type": "string"
+        },
+        {
+         "name": "instance",
+         "rawType": "object",
+         "type": "string"
+        }
+       ],
+       "conversionMethod": "pd.DataFrame",
+       "ref": "92a29339-a0e8-44cb-a3d1-87a66beebbb5",
+       "rows": [
+        [
+         "0",
+         "1740648154",
+         "1200000",
+         "0.5814999938011169",
+         "0.5814999938011169",
+         "15",
+         "1392.2722568511963",
+         "105.38996080016084",
+         "5060513.98086803",
+         "5.068565416268908",
+         "604219.3886861373",
+         "287330492345",
+         "5688",
+         "56779",
+         "1740648154",
+         "Log/Flower_campaign/Flower_instance_fedAvg_cifar10_epoch1/Flwr_20250227_102234/training_results_fedAvg_15_20250227_102251.csv",
+         "fedAvg_cifar10_epoch1"
+        ],
+        [
+         "1",
+         "1740651708",
+         "2300000",
+         "0.567799985408783",
+         "0.567799985408783",
+         "15",
+         "864.9643280506134",
+         "123.40182417484618",
+         "6929047.658940774",
+         "14.541948786273547",
+         "1655680.2954797468",
+         "243348153782",
+         "3520",
+         "35120",
+         "1740651708",
+         "Log/Flower_campaign/Flower_instance_fedAvg_cifar10_epoch1/Flwr_20250227_112148/training_results_fedAvg_15_20250227_112155.csv",
+         "fedAvg_cifar10_epoch1"
+        ],
+        [
+         "2",
+         "1740650725",
+         "2000000",
+         "0.5465999841690063",
+         "0.5465999841690063",
+         "15",
+         "953.1918060779572",
+         "117.10082970209118",
+         "6265128.5890256055",
+         "11.56021433950976",
+         "1349006.1256989143",
+         "242295652380",
+         "3876",
+         "38674",
+         "1740650725",
+         "Log/Flower_campaign/Flower_instance_fedAvg_cifar10_epoch1/Flwr_20250227_110525/training_results_fedAvg_15_20250227_110533.csv",
+         "fedAvg_cifar10_epoch1"
+        ],
+        [
+         "3",
+         "1740654039",
+         "1600000",
+         "0.5552999973297119",
+         "0.5552999973297119",
+         "15",
+         "1096.626095533371",
+         "111.41730608342914",
+         "5721363.712901507",
+         "6.475912020216462",
+         "758281.9840159224",
+         "254705838906",
+         "4464",
+         "44518",
+         "1740654039",
+         "Log/Flower_campaign/Flower_instance_fedAvg_cifar10_epoch1/Flwr_20250227_120039/training_results_fedAvg_15_20250227_120049.csv",
+         "fedAvg_cifar10_epoch1"
+        ],
+        [
+         "4",
+         "1740655170",
+         "2000000",
+         "0.5627999901771545",
+         "0.5627999901771545",
+         "15",
+         "957.5192320346832",
+         "117.07391332073108",
+         "6283479.824282484",
+         "11.5929868497731",
+         "1346304.3352809658",
+         "244509911021",
+         "3900",
+         "38913",
+         "1740655170",
+         "Log/Flower_campaign/Flower_instance_fedAvg_cifar10_epoch1/Flwr_20250227_121930/training_results_fedAvg_15_20250227_121939.csv",
+         "fedAvg_cifar10_epoch1"
+        ],
+        [
+         "5",
+         "1740652602",
+         "1200000",
+         "0.5332000255584717",
+         "0.5449000000953674",
+         "13",
+         "1398.0218079090118",
+         "105.02145278586704",
+         "5047958.87025023",
+         "4.968871878461256",
+         "605649.6912841498",
+         "286490112838",
+         "5688",
+         "56754",
+         "1740652602",
+         "Log/Flower_campaign/Flower_instance_fedAvg_cifar10_epoch1/Flwr_20250227_113643/training_results_fedAvg_15_20250227_113655.csv",
+         "fedAvg_cifar10_epoch1"
+        ],
+        [
+         "6",
+         "1740656160",
+         "2300000",
+         "0.4330999851226806",
+         "0.5604000091552734",
+         "14",
+         "827.0279178619385",
+         "126.01207415770152",
+         "7192341.455179865",
+         "10.603284146185189",
+         "1224443.583747428",
+         "241814848191",
+         "3368",
+         "33621",
+         "1740656160",
+         "Log/Flower_campaign/Flower_instance_fedAvg_cifar10_epoch1/Flwr_20250227_123600/training_results_fedAvg_15_20250227_123607.csv",
+         "fedAvg_cifar10_epoch1"
+        ],
+        [
+         "7",
+         "1740649591",
+         "1600000",
+         "0.4392000138759613",
+         "0.5440999865531921",
+         "14",
+         "1100.0017387866974",
+         "111.54505112392268",
+         "5706891.389373671",
+         "6.59917219430932",
+         "775390.6730767189",
+         "254863409963",
+         "4476",
+         "44659",
+         "1740649591",
+         "Log/Flower_campaign/Flower_instance_fedAvg_cifar10_epoch1/Flwr_20250227_104631/training_results_fedAvg_15_20250227_104641.csv",
+         "fedAvg_cifar10_epoch1"
+        ],
+        [
+         "8",
+         "1740613326",
+         "2300000",
+         "0.6534000039100647",
+         "0.6611999869346619",
+         "14",
+         "1447.2822539806366",
+         "127.82648993316536",
+         "7418295.734983884",
+         "8.68510169758422",
+         "990531.0034409312",
+         "433077049864",
+         "5844",
+         "58379",
+         "1740613326",
+         "Log/Flower_campaign/Flower_instance_fedAvg_cifar10_epoch2/Flwr_20250227_004206/training_results_fedAvg_15_20250227_004213.csv",
+         "fedAvg_cifar10_epoch2"
+        ],
+        [
+         "9",
+         "1740599436",
+         "1200000",
+         "0.6629999876022339",
+         "0.6629999876022339",
+         "15",
+         "2519.957053899765",
+         "105.37884944916924",
+         "5038438.644105584",
+         "5.952432725049492",
+         "748439.5431176852",
+         "513347842744",
+         "10200",
+         "101886",
+         "1740599436",
+         "Log/Flower_campaign/Flower_instance_fedAvg_cifar10_epoch2/Flwr_20250226_205036/training_results_fedAvg_15_20250226_205053.csv",
+         "fedAvg_cifar10_epoch2"
+        ],
+        [
+         "10",
+         "1740603975",
+         "2000000",
+         "0.6274999976158142",
+         "0.6317999958992004",
+         "14",
+         "1653.2104058265686",
+         "119.09164018507396",
+         "6469935.336886635",
+         "10.395887218232176",
+         "1213171.8342983408",
+         "431655715874",
+         "6676",
+         "66717",
+         "1740603975",
+         "Log/Flower_campaign/Flower_instance_fedAvg_cifar10_epoch2/Flwr_20250226_220616/training_results_fedAvg_15_20250226_220624.csv",
+         "fedAvg_cifar10_epoch2"
+        ],
+        [
+         "11",
+         "1740609641",
+         "1600000",
+         "0.6477000117301941",
+         "0.6477000117301941",
+         "15",
+         "2002.8348944187164",
+         "111.15923143945864",
+         "5674178.340394711",
+         "8.006235886369092",
+         "973371.7094467937",
+         "458292036197",
+         "8088",
+         "80768",
+         "1740609641",
+         "Log/Flower_campaign/Flower_instance_fedAvg_cifar10_epoch2/Flwr_20250226_234041/training_results_fedAvg_15_20250226_234051.csv",
+         "fedAvg_cifar10_epoch2"
+        ],
+        [
+         "12",
+         "1740607169",
+         "1200000",
+         "0.6985999941825867",
+         "0.6985999941825867",
+         "15",
+         "2431.2939360141754",
+         "106.0386968892087",
+         "5145985.112531083",
+         "4.304305322603749",
+         "528498.0364792093",
+         "504944643182",
+         "9824",
+         "98124",
+         "1740607169",
+         "Log/Flower_campaign/Flower_instance_fedAvg_cifar10_epoch2/Flwr_20250226_225929/training_results_fedAvg_15_20250226_225942.csv",
+         "fedAvg_cifar10_epoch2"
+        ],
+        [
+         "13",
+         "1740605660",
+         "2300000",
+         "0.609499990940094",
+         "0.6403999924659729",
+         "14",
+         "1479.546894311905",
+         "126.13514901047029",
+         "7225771.80463565",
+         "12.412628907044253",
+         "1400654.2323676054",
+         "431147352039",
+         "5976",
+         "59668",
+         "1740605660",
+         "Log/Flower_campaign/Flower_instance_fedAvg_cifar10_epoch2/Flwr_20250226_223420/training_results_fedAvg_15_20250226_223427.csv",
+         "fedAvg_cifar10_epoch2"
+        ],
+        [
+         "14",
+         "1740611679",
+         "2000000",
+         "0.6600000262260437",
+         "0.6600000262260437",
+         "15",
+         "1615.520221233368",
+         "120.08260797970584",
+         "6635431.132699118",
+         "7.325927297253776",
+         "856935.1678566966",
+         "432553457913",
+         "6528",
+         "65189",
+         "1740611679",
+         "Log/Flower_campaign/Flower_instance_fedAvg_cifar10_epoch2/Flwr_20250227_001439/training_results_fedAvg_15_20250227_001447.csv",
+         "fedAvg_cifar10_epoch2"
+        ],
+        [
+         "15",
+         "1740602002",
+         "1600000",
+         "0.5546000003814697",
+         "0.6617000102996826",
+         "14",
+         "1938.12327170372",
+         "112.9002729383568",
+         "5824188.17136245",
+         "5.562732666362737",
+         "666704.2061826768",
+         "455448605122",
+         "7828",
+         "78199",
+         "1740602002",
+         "Log/Flower_campaign/Flower_instance_fedAvg_cifar10_epoch2/Flwr_20250226_213322/training_results_fedAvg_15_20250226_213332.csv",
+         "fedAvg_cifar10_epoch2"
+        ],
+        [
+         "16",
+         "1740658525",
+         "1600000",
+         "0.5396000146865845",
+         "0.5396000146865845",
+         "15",
+         "1157.261950492859",
+         "104.62784292691876",
+         "4849996.884117246",
+         "12.810439404926772",
+         "1582591.3305805747",
+         "227678253728",
+         "4704",
+         "46944",
+         "1740658525",
+         "Log/Flower_campaign/Flower_instance_fedAvg2Clients_cifar10_epoch1/Flwr_20250227_131525/training_results_fedAvg2Clients_15_20250227_131535.csv",
+         "fedAvg2Clients_cifar10_epoch1"
+        ],
+        [
+         "17",
+         "1740657023",
+         "1200000",
+         "0.450899988412857",
+         "0.4848000109195709",
+         "14",
+         "1460.888531923294",
+         "100.63904627441326",
+         "4417581.322526457",
+         "8.814656155878305",
+         "1176522.495132642",
+         "262212837478",
+         "5944",
+         "59357",
+         "1740657023",
+         "Log/Flower_campaign/Flower_instance_fedAvg2Clients_cifar10_epoch1/Flwr_20250227_125024/training_results_fedAvg2Clients_15_20250227_125037.csv",
+         "fedAvg2Clients_cifar10_epoch1"
+        ],
+        [
+         "18",
+         "1740665257",
+         "2300000",
+         "0.4805000126361847",
+         "0.4805000126361847",
+         "15",
+         "858.2312998771667",
+         "113.89320911186717",
+         "5884250.460134128",
+         "19.101196658053297",
+         "2234263.265721659",
+         "205313267055",
+         "3492",
+         "34892",
+         "1740665257",
+         "Log/Flower_campaign/Flower_instance_fedAvg2Clients_cifar10_epoch1/Flwr_20250227_150738/training_results_fedAvg2Clients_15_20250227_150746.csv",
+         "fedAvg2Clients_cifar10_epoch1"
+        ],
+        [
+         "19",
+         "1740660698",
+         "2300000",
+         "0.4963999986648559",
+         "0.4963999986648559",
+         "15",
+         "862.0375521183014",
+         "114.92594544048954",
+         "5934778.380671152",
+         "20.59443940612749",
+         "2399078.4794463613",
+         "207832865556",
+         "3504",
+         "35019",
+         "1740660698",
+         "Log/Flower_campaign/Flower_instance_fedAvg2Clients_cifar10_epoch1/Flwr_20250227_135139/training_results_fedAvg2Clients_15_20250227_135146.csv",
+         "fedAvg2Clients_cifar10_epoch1"
+        ],
+        [
+         "20",
+         "1740664269",
+         "2000000",
+         "0.3617999851703644",
+         "0.4751000106334686",
+         "14",
+         "954.4941120147704",
+         "109.78395575022728",
+         "5402196.320108715",
+         "16.201531585573722",
+         "1965523.1312041709",
+         "209596831157",
+         "3892",
+         "38798",
+         "1740664269",
+         "Log/Flower_campaign/Flower_instance_fedAvg2Clients_cifar10_epoch1/Flwr_20250227_145110/training_results_fedAvg2Clients_15_20250227_145118.csv",
+         "fedAvg2Clients_cifar10_epoch1"
+        ],
+        [
+         "21",
+         "1740667836",
+         "1200000",
+         "0.4792999923229217",
+         "0.5182999968528748",
+         "14",
+         "1463.0615174770355",
+         "100.0268486148358",
+         "4413694.673633483",
+         "9.269731922844024",
+         "1231760.16483163",
+         "262142805561",
+         "5944",
+         "59393",
+         "1740667836",
+         "Log/Flower_campaign/Flower_instance_fedAvg2Clients_cifar10_epoch1/Flwr_20250227_155036/training_results_fedAvg2Clients_15_20250227_155048.csv",
+         "fedAvg2Clients_cifar10_epoch1"
+        ],
+        [
+         "22",
+         "1740663090",
+         "1600000",
+         "0.4571999907493591",
+         "0.4735000133514404",
+         "13",
+         "1146.0609273910522",
+         "104.59999197541364",
+         "4860656.526460717",
+         "12.697037252831",
+         "1580728.8042826469",
+         "226034534771",
+         "4660",
+         "46503",
+         "1740663090",
+         "Log/Flower_campaign/Flower_instance_fedAvg2Clients_cifar10_epoch1/Flwr_20250227_143130/training_results_fedAvg2Clients_15_20250227_143140.csv",
+         "fedAvg2Clients_cifar10_epoch1"
+        ],
+        [
+         "23",
+         "1740659716",
+         "2000000",
+         "0.4740000069141388",
+         "0.4740000069141388",
+         "15",
+         "949.8004450798036",
+         "109.74996435388162",
+         "5413313.879658546",
+         "16.630251377277222",
+         "1987202.8134305533",
+         "208938799963",
+         "3868",
+         "38597",
+         "1740659716",
+         "Log/Flower_campaign/Flower_instance_fedAvg2Clients_cifar10_epoch1/Flwr_20250227_133516/training_results_fedAvg2Clients_15_20250227_133524.csv",
+         "fedAvg2Clients_cifar10_epoch1"
+        ],
+        [
+         "24",
+         "1740627169",
+         "2000000",
+         "0.6223999857902527",
+         "0.6223999857902527",
+         "15",
+         "1645.9683847427368",
+         "109.64007204973969",
+         "5475961.381925907",
+         "17.333212347407716",
+         "2053383.323461548",
+         "363869593234",
+         "6656",
+         "66449",
+         "1740627169",
+         "Log/Flower_campaign/Flower_instance_fedAvg2Clients_cifar10_epoch2/Flwr_20250227_043249/training_results_fedAvg2Clients_15_20250227_043258.csv",
+         "fedAvg2Clients_cifar10_epoch2"
+        ],
+        [
+         "25",
+         "1740622608",
+         "1200000",
+         "0.5741000175476074",
+         "0.6261000037193298",
+         "13",
+         "2504.0025584697723",
+         "100.03473613725632",
+         "4456411.350465162",
+         "9.283359440769177",
+         "1218865.7749033456",
+         "450275802851",
+         "10116",
+         "101040",
+         "1740622608",
+         "Log/Flower_campaign/Flower_instance_fedAvg2Clients_cifar10_epoch2/Flwr_20250227_031648/training_results_fedAvg2Clients_15_20250227_031701.csv",
+         "fedAvg2Clients_cifar10_epoch2"
+        ],
+        [
+         "26",
+         "1740614809",
+         "1200000",
+         "0.6254000067710876",
+         "0.6254000067710876",
+         "15",
+         "2510.4407687187195",
+         "100.61613436047112",
+         "4443187.801370453",
+         "9.482188376630289",
+         "1255291.0646059592",
+         "449942750616",
+         "10140",
+         "101266",
+         "1740614809",
+         "Log/Flower_campaign/Flower_instance_fedAvg2Clients_cifar10_epoch2/Flwr_20250227_010650/training_results_fedAvg2Clients_15_20250227_010702.csv",
+         "fedAvg2Clients_cifar10_epoch2"
+        ],
+        [
+         "27",
+         "1740625153",
+         "1600000",
+         "0.5512999892234802",
+         "0.6039999723434448",
+         "14",
+         "1982.211465120316",
+         "104.57904301785771",
+         "4906910.311505554",
+         "13.107222762101172",
+         "1640022.787027996",
+         "392278037943",
+         "8004",
+         "79944",
+         "1740625153",
+         "Log/Flower_campaign/Flower_instance_fedAvg2Clients_cifar10_epoch2/Flwr_20250227_035913/training_results_fedAvg2Clients_15_20250227_035923.csv",
+         "fedAvg2Clients_cifar10_epoch2"
+        ],
+        [
+         "28",
+         "1740639013",
+         "2300000",
+         "0.6467000246047974",
+         "0.6467000246047974",
+         "15",
+         "1484.367873430252",
+         "115.81512246175252",
+         "6004137.033166582",
+         "20.56617966142136",
+         "2368307.09371275",
+         "359458669348",
+         "5996",
+         "59869",
+         "1740639013",
+         "Log/Flower_campaign/Flower_instance_fedAvg2Clients_cifar10_epoch2/Flwr_20250227_075013/training_results_fedAvg2Clients_15_20250227_075020.csv",
+         "fedAvg2Clients_cifar10_epoch2"
+        ],
+        [
+         "29",
+         "1740621095",
+         "2300000",
+         "0.6467999815940857",
+         "0.6467999815940857",
+         "15",
+         "1484.6246845722198",
+         "114.83550906866476",
+         "6004353.127672011",
+         "21.300525071628204",
+         "2426428.8023777944",
+         "359540665285",
+         "5996",
+         "59880",
+         "1740621095",
+         "Log/Flower_campaign/Flower_instance_fedAvg2Clients_cifar10_epoch2/Flwr_20250227_025135/training_results_fedAvg2Clients_15_20250227_025142.csv",
+         "fedAvg2Clients_cifar10_epoch2"
+        ],
+        [
+         "30",
+         "1740619411",
+         "2000000",
+         "0.6193000078201294",
+         "0.6435999870300293",
+         "13",
+         "1651.836879491806",
+         "110.0813749651592",
+         "5469168.578076003",
+         "17.262528132099366",
+         "2053484.7104683355",
+         "364627422349",
+         "6676",
+         "66670",
+         "1740619411",
+         "Log/Flower_campaign/Flower_instance_fedAvg2Clients_cifar10_epoch2/Flwr_20250227_022331/training_results_fedAvg2Clients_15_20250227_022339.csv",
+         "fedAvg2Clients_cifar10_epoch2"
+        ],
+        [
+         "31",
+         "1740617359",
+         "1600000",
+         "0.6103000044822693",
+         "0.6103000044822693",
+         "15",
+         "1981.5543630123136",
+         "105.05085770714436",
+         "4923267.035512208",
+         "12.899081772465122",
+         "1597152.3419951904",
+         "393501659258",
+         "8004",
+         "79927",
+         "1740617359",
+         "Log/Flower_campaign/Flower_instance_fedAvg2Clients_cifar10_epoch2/Flwr_20250227_014920/training_results_fedAvg2Clients_15_20250227_014929.csv",
+         "fedAvg2Clients_cifar10_epoch2"
+        ]
+       ],
+       "shape": {
+        "columns": 16,
+        "rows": 32
+       }
+      },
+      "text/html": [
+       "<div>\n",
+       "<style scoped>\n",
+       "    .dataframe tbody tr th:only-of-type {\n",
+       "        vertical-align: middle;\n",
+       "    }\n",
+       "\n",
+       "    .dataframe tbody tr th {\n",
+       "        vertical-align: top;\n",
+       "    }\n",
+       "\n",
+       "    .dataframe thead th {\n",
+       "        text-align: right;\n",
+       "    }\n",
+       "</style>\n",
+       "<table border=\"1\" class=\"dataframe\">\n",
+       "  <thead>\n",
+       "    <tr style=\"text-align: right;\">\n",
+       "      <th></th>\n",
+       "      <th>file_number</th>\n",
+       "      <th>fmax</th>\n",
+       "      <th>accuracy</th>\n",
+       "      <th>max_acc</th>\n",
+       "      <th>in_round</th>\n",
+       "      <th>time</th>\n",
+       "      <th>mean_power</th>\n",
+       "      <th>mean_mojitos</th>\n",
+       "      <th>std_power_combined</th>\n",
+       "      <th>std_mojitos_combined</th>\n",
+       "      <th>sum_mojitos</th>\n",
+       "      <th>n_data_mojitos</th>\n",
+       "      <th>n_data_power</th>\n",
+       "      <th>startTime</th>\n",
+       "      <th>filepath</th>\n",
+       "      <th>instance</th>\n",
+       "    </tr>\n",
+       "  </thead>\n",
+       "  <tbody>\n",
+       "    <tr>\n",
+       "      <th>0</th>\n",
+       "      <td>1740648154</td>\n",
+       "      <td>1200000</td>\n",
+       "      <td>0.5815</td>\n",
+       "      <td>0.5815</td>\n",
+       "      <td>15</td>\n",
+       "      <td>1392.272257</td>\n",
+       "      <td>105.389961</td>\n",
+       "      <td>5.060514e+06</td>\n",
+       "      <td>5.068565</td>\n",
+       "      <td>6.042194e+05</td>\n",
+       "      <td>287330492345</td>\n",
+       "      <td>5688</td>\n",
+       "      <td>56779</td>\n",
+       "      <td>1740648154</td>\n",
+       "      <td>Log/Flower_campaign/Flower_instance_fedAvg_cif...</td>\n",
+       "      <td>fedAvg_cifar10_epoch1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>1</th>\n",
+       "      <td>1740651708</td>\n",
+       "      <td>2300000</td>\n",
+       "      <td>0.5678</td>\n",
+       "      <td>0.5678</td>\n",
+       "      <td>15</td>\n",
+       "      <td>864.964328</td>\n",
+       "      <td>123.401824</td>\n",
+       "      <td>6.929048e+06</td>\n",
+       "      <td>14.541949</td>\n",
+       "      <td>1.655680e+06</td>\n",
+       "      <td>243348153782</td>\n",
+       "      <td>3520</td>\n",
+       "      <td>35120</td>\n",
+       "      <td>1740651708</td>\n",
+       "      <td>Log/Flower_campaign/Flower_instance_fedAvg_cif...</td>\n",
+       "      <td>fedAvg_cifar10_epoch1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>2</th>\n",
+       "      <td>1740650725</td>\n",
+       "      <td>2000000</td>\n",
+       "      <td>0.5466</td>\n",
+       "      <td>0.5466</td>\n",
+       "      <td>15</td>\n",
+       "      <td>953.191806</td>\n",
+       "      <td>117.100830</td>\n",
+       "      <td>6.265129e+06</td>\n",
+       "      <td>11.560214</td>\n",
+       "      <td>1.349006e+06</td>\n",
+       "      <td>242295652380</td>\n",
+       "      <td>3876</td>\n",
+       "      <td>38674</td>\n",
+       "      <td>1740650725</td>\n",
+       "      <td>Log/Flower_campaign/Flower_instance_fedAvg_cif...</td>\n",
+       "      <td>fedAvg_cifar10_epoch1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>3</th>\n",
+       "      <td>1740654039</td>\n",
+       "      <td>1600000</td>\n",
+       "      <td>0.5553</td>\n",
+       "      <td>0.5553</td>\n",
+       "      <td>15</td>\n",
+       "      <td>1096.626096</td>\n",
+       "      <td>111.417306</td>\n",
+       "      <td>5.721364e+06</td>\n",
+       "      <td>6.475912</td>\n",
+       "      <td>7.582820e+05</td>\n",
+       "      <td>254705838906</td>\n",
+       "      <td>4464</td>\n",
+       "      <td>44518</td>\n",
+       "      <td>1740654039</td>\n",
+       "      <td>Log/Flower_campaign/Flower_instance_fedAvg_cif...</td>\n",
+       "      <td>fedAvg_cifar10_epoch1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>4</th>\n",
+       "      <td>1740655170</td>\n",
+       "      <td>2000000</td>\n",
+       "      <td>0.5628</td>\n",
+       "      <td>0.5628</td>\n",
+       "      <td>15</td>\n",
+       "      <td>957.519232</td>\n",
+       "      <td>117.073913</td>\n",
+       "      <td>6.283480e+06</td>\n",
+       "      <td>11.592987</td>\n",
+       "      <td>1.346304e+06</td>\n",
+       "      <td>244509911021</td>\n",
+       "      <td>3900</td>\n",
+       "      <td>38913</td>\n",
+       "      <td>1740655170</td>\n",
+       "      <td>Log/Flower_campaign/Flower_instance_fedAvg_cif...</td>\n",
+       "      <td>fedAvg_cifar10_epoch1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>5</th>\n",
+       "      <td>1740652602</td>\n",
+       "      <td>1200000</td>\n",
+       "      <td>0.5332</td>\n",
+       "      <td>0.5449</td>\n",
+       "      <td>13</td>\n",
+       "      <td>1398.021808</td>\n",
+       "      <td>105.021453</td>\n",
+       "      <td>5.047959e+06</td>\n",
+       "      <td>4.968872</td>\n",
+       "      <td>6.056497e+05</td>\n",
+       "      <td>286490112838</td>\n",
+       "      <td>5688</td>\n",
+       "      <td>56754</td>\n",
+       "      <td>1740652602</td>\n",
+       "      <td>Log/Flower_campaign/Flower_instance_fedAvg_cif...</td>\n",
+       "      <td>fedAvg_cifar10_epoch1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>6</th>\n",
+       "      <td>1740656160</td>\n",
+       "      <td>2300000</td>\n",
+       "      <td>0.4331</td>\n",
+       "      <td>0.5604</td>\n",
+       "      <td>14</td>\n",
+       "      <td>827.027918</td>\n",
+       "      <td>126.012074</td>\n",
+       "      <td>7.192341e+06</td>\n",
+       "      <td>10.603284</td>\n",
+       "      <td>1.224444e+06</td>\n",
+       "      <td>241814848191</td>\n",
+       "      <td>3368</td>\n",
+       "      <td>33621</td>\n",
+       "      <td>1740656160</td>\n",
+       "      <td>Log/Flower_campaign/Flower_instance_fedAvg_cif...</td>\n",
+       "      <td>fedAvg_cifar10_epoch1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>7</th>\n",
+       "      <td>1740649591</td>\n",
+       "      <td>1600000</td>\n",
+       "      <td>0.4392</td>\n",
+       "      <td>0.5441</td>\n",
+       "      <td>14</td>\n",
+       "      <td>1100.001739</td>\n",
+       "      <td>111.545051</td>\n",
+       "      <td>5.706891e+06</td>\n",
+       "      <td>6.599172</td>\n",
+       "      <td>7.753907e+05</td>\n",
+       "      <td>254863409963</td>\n",
+       "      <td>4476</td>\n",
+       "      <td>44659</td>\n",
+       "      <td>1740649591</td>\n",
+       "      <td>Log/Flower_campaign/Flower_instance_fedAvg_cif...</td>\n",
+       "      <td>fedAvg_cifar10_epoch1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>8</th>\n",
+       "      <td>1740613326</td>\n",
+       "      <td>2300000</td>\n",
+       "      <td>0.6534</td>\n",
+       "      <td>0.6612</td>\n",
+       "      <td>14</td>\n",
+       "      <td>1447.282254</td>\n",
+       "      <td>127.826490</td>\n",
+       "      <td>7.418296e+06</td>\n",
+       "      <td>8.685102</td>\n",
+       "      <td>9.905310e+05</td>\n",
+       "      <td>433077049864</td>\n",
+       "      <td>5844</td>\n",
+       "      <td>58379</td>\n",
+       "      <td>1740613326</td>\n",
+       "      <td>Log/Flower_campaign/Flower_instance_fedAvg_cif...</td>\n",
+       "      <td>fedAvg_cifar10_epoch2</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>9</th>\n",
+       "      <td>1740599436</td>\n",
+       "      <td>1200000</td>\n",
+       "      <td>0.6630</td>\n",
+       "      <td>0.6630</td>\n",
+       "      <td>15</td>\n",
+       "      <td>2519.957054</td>\n",
+       "      <td>105.378849</td>\n",
+       "      <td>5.038439e+06</td>\n",
+       "      <td>5.952433</td>\n",
+       "      <td>7.484395e+05</td>\n",
+       "      <td>513347842744</td>\n",
+       "      <td>10200</td>\n",
+       "      <td>101886</td>\n",
+       "      <td>1740599436</td>\n",
+       "      <td>Log/Flower_campaign/Flower_instance_fedAvg_cif...</td>\n",
+       "      <td>fedAvg_cifar10_epoch2</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>10</th>\n",
+       "      <td>1740603975</td>\n",
+       "      <td>2000000</td>\n",
+       "      <td>0.6275</td>\n",
+       "      <td>0.6318</td>\n",
+       "      <td>14</td>\n",
+       "      <td>1653.210406</td>\n",
+       "      <td>119.091640</td>\n",
+       "      <td>6.469935e+06</td>\n",
+       "      <td>10.395887</td>\n",
+       "      <td>1.213172e+06</td>\n",
+       "      <td>431655715874</td>\n",
+       "      <td>6676</td>\n",
+       "      <td>66717</td>\n",
+       "      <td>1740603975</td>\n",
+       "      <td>Log/Flower_campaign/Flower_instance_fedAvg_cif...</td>\n",
+       "      <td>fedAvg_cifar10_epoch2</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>11</th>\n",
+       "      <td>1740609641</td>\n",
+       "      <td>1600000</td>\n",
+       "      <td>0.6477</td>\n",
+       "      <td>0.6477</td>\n",
+       "      <td>15</td>\n",
+       "      <td>2002.834894</td>\n",
+       "      <td>111.159231</td>\n",
+       "      <td>5.674178e+06</td>\n",
+       "      <td>8.006236</td>\n",
+       "      <td>9.733717e+05</td>\n",
+       "      <td>458292036197</td>\n",
+       "      <td>8088</td>\n",
+       "      <td>80768</td>\n",
+       "      <td>1740609641</td>\n",
+       "      <td>Log/Flower_campaign/Flower_instance_fedAvg_cif...</td>\n",
+       "      <td>fedAvg_cifar10_epoch2</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>12</th>\n",
+       "      <td>1740607169</td>\n",
+       "      <td>1200000</td>\n",
+       "      <td>0.6986</td>\n",
+       "      <td>0.6986</td>\n",
+       "      <td>15</td>\n",
+       "      <td>2431.293936</td>\n",
+       "      <td>106.038697</td>\n",
+       "      <td>5.145985e+06</td>\n",
+       "      <td>4.304305</td>\n",
+       "      <td>5.284980e+05</td>\n",
+       "      <td>504944643182</td>\n",
+       "      <td>9824</td>\n",
+       "      <td>98124</td>\n",
+       "      <td>1740607169</td>\n",
+       "      <td>Log/Flower_campaign/Flower_instance_fedAvg_cif...</td>\n",
+       "      <td>fedAvg_cifar10_epoch2</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>13</th>\n",
+       "      <td>1740605660</td>\n",
+       "      <td>2300000</td>\n",
+       "      <td>0.6095</td>\n",
+       "      <td>0.6404</td>\n",
+       "      <td>14</td>\n",
+       "      <td>1479.546894</td>\n",
+       "      <td>126.135149</td>\n",
+       "      <td>7.225772e+06</td>\n",
+       "      <td>12.412629</td>\n",
+       "      <td>1.400654e+06</td>\n",
+       "      <td>431147352039</td>\n",
+       "      <td>5976</td>\n",
+       "      <td>59668</td>\n",
+       "      <td>1740605660</td>\n",
+       "      <td>Log/Flower_campaign/Flower_instance_fedAvg_cif...</td>\n",
+       "      <td>fedAvg_cifar10_epoch2</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>14</th>\n",
+       "      <td>1740611679</td>\n",
+       "      <td>2000000</td>\n",
+       "      <td>0.6600</td>\n",
+       "      <td>0.6600</td>\n",
+       "      <td>15</td>\n",
+       "      <td>1615.520221</td>\n",
+       "      <td>120.082608</td>\n",
+       "      <td>6.635431e+06</td>\n",
+       "      <td>7.325927</td>\n",
+       "      <td>8.569352e+05</td>\n",
+       "      <td>432553457913</td>\n",
+       "      <td>6528</td>\n",
+       "      <td>65189</td>\n",
+       "      <td>1740611679</td>\n",
+       "      <td>Log/Flower_campaign/Flower_instance_fedAvg_cif...</td>\n",
+       "      <td>fedAvg_cifar10_epoch2</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>15</th>\n",
+       "      <td>1740602002</td>\n",
+       "      <td>1600000</td>\n",
+       "      <td>0.5546</td>\n",
+       "      <td>0.6617</td>\n",
+       "      <td>14</td>\n",
+       "      <td>1938.123272</td>\n",
+       "      <td>112.900273</td>\n",
+       "      <td>5.824188e+06</td>\n",
+       "      <td>5.562733</td>\n",
+       "      <td>6.667042e+05</td>\n",
+       "      <td>455448605122</td>\n",
+       "      <td>7828</td>\n",
+       "      <td>78199</td>\n",
+       "      <td>1740602002</td>\n",
+       "      <td>Log/Flower_campaign/Flower_instance_fedAvg_cif...</td>\n",
+       "      <td>fedAvg_cifar10_epoch2</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>16</th>\n",
+       "      <td>1740658525</td>\n",
+       "      <td>1600000</td>\n",
+       "      <td>0.5396</td>\n",
+       "      <td>0.5396</td>\n",
+       "      <td>15</td>\n",
+       "      <td>1157.261950</td>\n",
+       "      <td>104.627843</td>\n",
+       "      <td>4.849997e+06</td>\n",
+       "      <td>12.810439</td>\n",
+       "      <td>1.582591e+06</td>\n",
+       "      <td>227678253728</td>\n",
+       "      <td>4704</td>\n",
+       "      <td>46944</td>\n",
+       "      <td>1740658525</td>\n",
+       "      <td>Log/Flower_campaign/Flower_instance_fedAvg2Cli...</td>\n",
+       "      <td>fedAvg2Clients_cifar10_epoch1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>17</th>\n",
+       "      <td>1740657023</td>\n",
+       "      <td>1200000</td>\n",
+       "      <td>0.4509</td>\n",
+       "      <td>0.4848</td>\n",
+       "      <td>14</td>\n",
+       "      <td>1460.888532</td>\n",
+       "      <td>100.639046</td>\n",
+       "      <td>4.417581e+06</td>\n",
+       "      <td>8.814656</td>\n",
+       "      <td>1.176522e+06</td>\n",
+       "      <td>262212837478</td>\n",
+       "      <td>5944</td>\n",
+       "      <td>59357</td>\n",
+       "      <td>1740657023</td>\n",
+       "      <td>Log/Flower_campaign/Flower_instance_fedAvg2Cli...</td>\n",
+       "      <td>fedAvg2Clients_cifar10_epoch1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>18</th>\n",
+       "      <td>1740665257</td>\n",
+       "      <td>2300000</td>\n",
+       "      <td>0.4805</td>\n",
+       "      <td>0.4805</td>\n",
+       "      <td>15</td>\n",
+       "      <td>858.231300</td>\n",
+       "      <td>113.893209</td>\n",
+       "      <td>5.884250e+06</td>\n",
+       "      <td>19.101197</td>\n",
+       "      <td>2.234263e+06</td>\n",
+       "      <td>205313267055</td>\n",
+       "      <td>3492</td>\n",
+       "      <td>34892</td>\n",
+       "      <td>1740665257</td>\n",
+       "      <td>Log/Flower_campaign/Flower_instance_fedAvg2Cli...</td>\n",
+       "      <td>fedAvg2Clients_cifar10_epoch1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>19</th>\n",
+       "      <td>1740660698</td>\n",
+       "      <td>2300000</td>\n",
+       "      <td>0.4964</td>\n",
+       "      <td>0.4964</td>\n",
+       "      <td>15</td>\n",
+       "      <td>862.037552</td>\n",
+       "      <td>114.925945</td>\n",
+       "      <td>5.934778e+06</td>\n",
+       "      <td>20.594439</td>\n",
+       "      <td>2.399078e+06</td>\n",
+       "      <td>207832865556</td>\n",
+       "      <td>3504</td>\n",
+       "      <td>35019</td>\n",
+       "      <td>1740660698</td>\n",
+       "      <td>Log/Flower_campaign/Flower_instance_fedAvg2Cli...</td>\n",
+       "      <td>fedAvg2Clients_cifar10_epoch1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>20</th>\n",
+       "      <td>1740664269</td>\n",
+       "      <td>2000000</td>\n",
+       "      <td>0.3618</td>\n",
+       "      <td>0.4751</td>\n",
+       "      <td>14</td>\n",
+       "      <td>954.494112</td>\n",
+       "      <td>109.783956</td>\n",
+       "      <td>5.402196e+06</td>\n",
+       "      <td>16.201532</td>\n",
+       "      <td>1.965523e+06</td>\n",
+       "      <td>209596831157</td>\n",
+       "      <td>3892</td>\n",
+       "      <td>38798</td>\n",
+       "      <td>1740664269</td>\n",
+       "      <td>Log/Flower_campaign/Flower_instance_fedAvg2Cli...</td>\n",
+       "      <td>fedAvg2Clients_cifar10_epoch1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>21</th>\n",
+       "      <td>1740667836</td>\n",
+       "      <td>1200000</td>\n",
+       "      <td>0.4793</td>\n",
+       "      <td>0.5183</td>\n",
+       "      <td>14</td>\n",
+       "      <td>1463.061517</td>\n",
+       "      <td>100.026849</td>\n",
+       "      <td>4.413695e+06</td>\n",
+       "      <td>9.269732</td>\n",
+       "      <td>1.231760e+06</td>\n",
+       "      <td>262142805561</td>\n",
+       "      <td>5944</td>\n",
+       "      <td>59393</td>\n",
+       "      <td>1740667836</td>\n",
+       "      <td>Log/Flower_campaign/Flower_instance_fedAvg2Cli...</td>\n",
+       "      <td>fedAvg2Clients_cifar10_epoch1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>22</th>\n",
+       "      <td>1740663090</td>\n",
+       "      <td>1600000</td>\n",
+       "      <td>0.4572</td>\n",
+       "      <td>0.4735</td>\n",
+       "      <td>13</td>\n",
+       "      <td>1146.060927</td>\n",
+       "      <td>104.599992</td>\n",
+       "      <td>4.860657e+06</td>\n",
+       "      <td>12.697037</td>\n",
+       "      <td>1.580729e+06</td>\n",
+       "      <td>226034534771</td>\n",
+       "      <td>4660</td>\n",
+       "      <td>46503</td>\n",
+       "      <td>1740663090</td>\n",
+       "      <td>Log/Flower_campaign/Flower_instance_fedAvg2Cli...</td>\n",
+       "      <td>fedAvg2Clients_cifar10_epoch1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>23</th>\n",
+       "      <td>1740659716</td>\n",
+       "      <td>2000000</td>\n",
+       "      <td>0.4740</td>\n",
+       "      <td>0.4740</td>\n",
+       "      <td>15</td>\n",
+       "      <td>949.800445</td>\n",
+       "      <td>109.749964</td>\n",
+       "      <td>5.413314e+06</td>\n",
+       "      <td>16.630251</td>\n",
+       "      <td>1.987203e+06</td>\n",
+       "      <td>208938799963</td>\n",
+       "      <td>3868</td>\n",
+       "      <td>38597</td>\n",
+       "      <td>1740659716</td>\n",
+       "      <td>Log/Flower_campaign/Flower_instance_fedAvg2Cli...</td>\n",
+       "      <td>fedAvg2Clients_cifar10_epoch1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>24</th>\n",
+       "      <td>1740627169</td>\n",
+       "      <td>2000000</td>\n",
+       "      <td>0.6224</td>\n",
+       "      <td>0.6224</td>\n",
+       "      <td>15</td>\n",
+       "      <td>1645.968385</td>\n",
+       "      <td>109.640072</td>\n",
+       "      <td>5.475961e+06</td>\n",
+       "      <td>17.333212</td>\n",
+       "      <td>2.053383e+06</td>\n",
+       "      <td>363869593234</td>\n",
+       "      <td>6656</td>\n",
+       "      <td>66449</td>\n",
+       "      <td>1740627169</td>\n",
+       "      <td>Log/Flower_campaign/Flower_instance_fedAvg2Cli...</td>\n",
+       "      <td>fedAvg2Clients_cifar10_epoch2</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>25</th>\n",
+       "      <td>1740622608</td>\n",
+       "      <td>1200000</td>\n",
+       "      <td>0.5741</td>\n",
+       "      <td>0.6261</td>\n",
+       "      <td>13</td>\n",
+       "      <td>2504.002558</td>\n",
+       "      <td>100.034736</td>\n",
+       "      <td>4.456411e+06</td>\n",
+       "      <td>9.283359</td>\n",
+       "      <td>1.218866e+06</td>\n",
+       "      <td>450275802851</td>\n",
+       "      <td>10116</td>\n",
+       "      <td>101040</td>\n",
+       "      <td>1740622608</td>\n",
+       "      <td>Log/Flower_campaign/Flower_instance_fedAvg2Cli...</td>\n",
+       "      <td>fedAvg2Clients_cifar10_epoch2</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>26</th>\n",
+       "      <td>1740614809</td>\n",
+       "      <td>1200000</td>\n",
+       "      <td>0.6254</td>\n",
+       "      <td>0.6254</td>\n",
+       "      <td>15</td>\n",
+       "      <td>2510.440769</td>\n",
+       "      <td>100.616134</td>\n",
+       "      <td>4.443188e+06</td>\n",
+       "      <td>9.482188</td>\n",
+       "      <td>1.255291e+06</td>\n",
+       "      <td>449942750616</td>\n",
+       "      <td>10140</td>\n",
+       "      <td>101266</td>\n",
+       "      <td>1740614809</td>\n",
+       "      <td>Log/Flower_campaign/Flower_instance_fedAvg2Cli...</td>\n",
+       "      <td>fedAvg2Clients_cifar10_epoch2</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>27</th>\n",
+       "      <td>1740625153</td>\n",
+       "      <td>1600000</td>\n",
+       "      <td>0.5513</td>\n",
+       "      <td>0.6040</td>\n",
+       "      <td>14</td>\n",
+       "      <td>1982.211465</td>\n",
+       "      <td>104.579043</td>\n",
+       "      <td>4.906910e+06</td>\n",
+       "      <td>13.107223</td>\n",
+       "      <td>1.640023e+06</td>\n",
+       "      <td>392278037943</td>\n",
+       "      <td>8004</td>\n",
+       "      <td>79944</td>\n",
+       "      <td>1740625153</td>\n",
+       "      <td>Log/Flower_campaign/Flower_instance_fedAvg2Cli...</td>\n",
+       "      <td>fedAvg2Clients_cifar10_epoch2</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>28</th>\n",
+       "      <td>1740639013</td>\n",
+       "      <td>2300000</td>\n",
+       "      <td>0.6467</td>\n",
+       "      <td>0.6467</td>\n",
+       "      <td>15</td>\n",
+       "      <td>1484.367873</td>\n",
+       "      <td>115.815122</td>\n",
+       "      <td>6.004137e+06</td>\n",
+       "      <td>20.566180</td>\n",
+       "      <td>2.368307e+06</td>\n",
+       "      <td>359458669348</td>\n",
+       "      <td>5996</td>\n",
+       "      <td>59869</td>\n",
+       "      <td>1740639013</td>\n",
+       "      <td>Log/Flower_campaign/Flower_instance_fedAvg2Cli...</td>\n",
+       "      <td>fedAvg2Clients_cifar10_epoch2</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>29</th>\n",
+       "      <td>1740621095</td>\n",
+       "      <td>2300000</td>\n",
+       "      <td>0.6468</td>\n",
+       "      <td>0.6468</td>\n",
+       "      <td>15</td>\n",
+       "      <td>1484.624685</td>\n",
+       "      <td>114.835509</td>\n",
+       "      <td>6.004353e+06</td>\n",
+       "      <td>21.300525</td>\n",
+       "      <td>2.426429e+06</td>\n",
+       "      <td>359540665285</td>\n",
+       "      <td>5996</td>\n",
+       "      <td>59880</td>\n",
+       "      <td>1740621095</td>\n",
+       "      <td>Log/Flower_campaign/Flower_instance_fedAvg2Cli...</td>\n",
+       "      <td>fedAvg2Clients_cifar10_epoch2</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>30</th>\n",
+       "      <td>1740619411</td>\n",
+       "      <td>2000000</td>\n",
+       "      <td>0.6193</td>\n",
+       "      <td>0.6436</td>\n",
+       "      <td>13</td>\n",
+       "      <td>1651.836879</td>\n",
+       "      <td>110.081375</td>\n",
+       "      <td>5.469169e+06</td>\n",
+       "      <td>17.262528</td>\n",
+       "      <td>2.053485e+06</td>\n",
+       "      <td>364627422349</td>\n",
+       "      <td>6676</td>\n",
+       "      <td>66670</td>\n",
+       "      <td>1740619411</td>\n",
+       "      <td>Log/Flower_campaign/Flower_instance_fedAvg2Cli...</td>\n",
+       "      <td>fedAvg2Clients_cifar10_epoch2</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>31</th>\n",
+       "      <td>1740617359</td>\n",
+       "      <td>1600000</td>\n",
+       "      <td>0.6103</td>\n",
+       "      <td>0.6103</td>\n",
+       "      <td>15</td>\n",
+       "      <td>1981.554363</td>\n",
+       "      <td>105.050858</td>\n",
+       "      <td>4.923267e+06</td>\n",
+       "      <td>12.899082</td>\n",
+       "      <td>1.597152e+06</td>\n",
+       "      <td>393501659258</td>\n",
+       "      <td>8004</td>\n",
+       "      <td>79927</td>\n",
+       "      <td>1740617359</td>\n",
+       "      <td>Log/Flower_campaign/Flower_instance_fedAvg2Cli...</td>\n",
+       "      <td>fedAvg2Clients_cifar10_epoch2</td>\n",
+       "    </tr>\n",
+       "  </tbody>\n",
+       "</table>\n",
+       "</div>"
+      ],
+      "text/plain": [
+       "    file_number     fmax  accuracy  max_acc  in_round         time  \\\n",
+       "0    1740648154  1200000    0.5815   0.5815        15  1392.272257   \n",
+       "1    1740651708  2300000    0.5678   0.5678        15   864.964328   \n",
+       "2    1740650725  2000000    0.5466   0.5466        15   953.191806   \n",
+       "3    1740654039  1600000    0.5553   0.5553        15  1096.626096   \n",
+       "4    1740655170  2000000    0.5628   0.5628        15   957.519232   \n",
+       "5    1740652602  1200000    0.5332   0.5449        13  1398.021808   \n",
+       "6    1740656160  2300000    0.4331   0.5604        14   827.027918   \n",
+       "7    1740649591  1600000    0.4392   0.5441        14  1100.001739   \n",
+       "8    1740613326  2300000    0.6534   0.6612        14  1447.282254   \n",
+       "9    1740599436  1200000    0.6630   0.6630        15  2519.957054   \n",
+       "10   1740603975  2000000    0.6275   0.6318        14  1653.210406   \n",
+       "11   1740609641  1600000    0.6477   0.6477        15  2002.834894   \n",
+       "12   1740607169  1200000    0.6986   0.6986        15  2431.293936   \n",
+       "13   1740605660  2300000    0.6095   0.6404        14  1479.546894   \n",
+       "14   1740611679  2000000    0.6600   0.6600        15  1615.520221   \n",
+       "15   1740602002  1600000    0.5546   0.6617        14  1938.123272   \n",
+       "16   1740658525  1600000    0.5396   0.5396        15  1157.261950   \n",
+       "17   1740657023  1200000    0.4509   0.4848        14  1460.888532   \n",
+       "18   1740665257  2300000    0.4805   0.4805        15   858.231300   \n",
+       "19   1740660698  2300000    0.4964   0.4964        15   862.037552   \n",
+       "20   1740664269  2000000    0.3618   0.4751        14   954.494112   \n",
+       "21   1740667836  1200000    0.4793   0.5183        14  1463.061517   \n",
+       "22   1740663090  1600000    0.4572   0.4735        13  1146.060927   \n",
+       "23   1740659716  2000000    0.4740   0.4740        15   949.800445   \n",
+       "24   1740627169  2000000    0.6224   0.6224        15  1645.968385   \n",
+       "25   1740622608  1200000    0.5741   0.6261        13  2504.002558   \n",
+       "26   1740614809  1200000    0.6254   0.6254        15  2510.440769   \n",
+       "27   1740625153  1600000    0.5513   0.6040        14  1982.211465   \n",
+       "28   1740639013  2300000    0.6467   0.6467        15  1484.367873   \n",
+       "29   1740621095  2300000    0.6468   0.6468        15  1484.624685   \n",
+       "30   1740619411  2000000    0.6193   0.6436        13  1651.836879   \n",
+       "31   1740617359  1600000    0.6103   0.6103        15  1981.554363   \n",
+       "\n",
+       "    mean_power  mean_mojitos  std_power_combined  std_mojitos_combined  \\\n",
+       "0   105.389961  5.060514e+06            5.068565          6.042194e+05   \n",
+       "1   123.401824  6.929048e+06           14.541949          1.655680e+06   \n",
+       "2   117.100830  6.265129e+06           11.560214          1.349006e+06   \n",
+       "3   111.417306  5.721364e+06            6.475912          7.582820e+05   \n",
+       "4   117.073913  6.283480e+06           11.592987          1.346304e+06   \n",
+       "5   105.021453  5.047959e+06            4.968872          6.056497e+05   \n",
+       "6   126.012074  7.192341e+06           10.603284          1.224444e+06   \n",
+       "7   111.545051  5.706891e+06            6.599172          7.753907e+05   \n",
+       "8   127.826490  7.418296e+06            8.685102          9.905310e+05   \n",
+       "9   105.378849  5.038439e+06            5.952433          7.484395e+05   \n",
+       "10  119.091640  6.469935e+06           10.395887          1.213172e+06   \n",
+       "11  111.159231  5.674178e+06            8.006236          9.733717e+05   \n",
+       "12  106.038697  5.145985e+06            4.304305          5.284980e+05   \n",
+       "13  126.135149  7.225772e+06           12.412629          1.400654e+06   \n",
+       "14  120.082608  6.635431e+06            7.325927          8.569352e+05   \n",
+       "15  112.900273  5.824188e+06            5.562733          6.667042e+05   \n",
+       "16  104.627843  4.849997e+06           12.810439          1.582591e+06   \n",
+       "17  100.639046  4.417581e+06            8.814656          1.176522e+06   \n",
+       "18  113.893209  5.884250e+06           19.101197          2.234263e+06   \n",
+       "19  114.925945  5.934778e+06           20.594439          2.399078e+06   \n",
+       "20  109.783956  5.402196e+06           16.201532          1.965523e+06   \n",
+       "21  100.026849  4.413695e+06            9.269732          1.231760e+06   \n",
+       "22  104.599992  4.860657e+06           12.697037          1.580729e+06   \n",
+       "23  109.749964  5.413314e+06           16.630251          1.987203e+06   \n",
+       "24  109.640072  5.475961e+06           17.333212          2.053383e+06   \n",
+       "25  100.034736  4.456411e+06            9.283359          1.218866e+06   \n",
+       "26  100.616134  4.443188e+06            9.482188          1.255291e+06   \n",
+       "27  104.579043  4.906910e+06           13.107223          1.640023e+06   \n",
+       "28  115.815122  6.004137e+06           20.566180          2.368307e+06   \n",
+       "29  114.835509  6.004353e+06           21.300525          2.426429e+06   \n",
+       "30  110.081375  5.469169e+06           17.262528          2.053485e+06   \n",
+       "31  105.050858  4.923267e+06           12.899082          1.597152e+06   \n",
+       "\n",
+       "     sum_mojitos  n_data_mojitos  n_data_power   startTime  \\\n",
+       "0   287330492345            5688         56779  1740648154   \n",
+       "1   243348153782            3520         35120  1740651708   \n",
+       "2   242295652380            3876         38674  1740650725   \n",
+       "3   254705838906            4464         44518  1740654039   \n",
+       "4   244509911021            3900         38913  1740655170   \n",
+       "5   286490112838            5688         56754  1740652602   \n",
+       "6   241814848191            3368         33621  1740656160   \n",
+       "7   254863409963            4476         44659  1740649591   \n",
+       "8   433077049864            5844         58379  1740613326   \n",
+       "9   513347842744           10200        101886  1740599436   \n",
+       "10  431655715874            6676         66717  1740603975   \n",
+       "11  458292036197            8088         80768  1740609641   \n",
+       "12  504944643182            9824         98124  1740607169   \n",
+       "13  431147352039            5976         59668  1740605660   \n",
+       "14  432553457913            6528         65189  1740611679   \n",
+       "15  455448605122            7828         78199  1740602002   \n",
+       "16  227678253728            4704         46944  1740658525   \n",
+       "17  262212837478            5944         59357  1740657023   \n",
+       "18  205313267055            3492         34892  1740665257   \n",
+       "19  207832865556            3504         35019  1740660698   \n",
+       "20  209596831157            3892         38798  1740664269   \n",
+       "21  262142805561            5944         59393  1740667836   \n",
+       "22  226034534771            4660         46503  1740663090   \n",
+       "23  208938799963            3868         38597  1740659716   \n",
+       "24  363869593234            6656         66449  1740627169   \n",
+       "25  450275802851           10116        101040  1740622608   \n",
+       "26  449942750616           10140        101266  1740614809   \n",
+       "27  392278037943            8004         79944  1740625153   \n",
+       "28  359458669348            5996         59869  1740639013   \n",
+       "29  359540665285            5996         59880  1740621095   \n",
+       "30  364627422349            6676         66670  1740619411   \n",
+       "31  393501659258            8004         79927  1740617359   \n",
+       "\n",
+       "                                             filepath  \\\n",
+       "0   Log/Flower_campaign/Flower_instance_fedAvg_cif...   \n",
+       "1   Log/Flower_campaign/Flower_instance_fedAvg_cif...   \n",
+       "2   Log/Flower_campaign/Flower_instance_fedAvg_cif...   \n",
+       "3   Log/Flower_campaign/Flower_instance_fedAvg_cif...   \n",
+       "4   Log/Flower_campaign/Flower_instance_fedAvg_cif...   \n",
+       "5   Log/Flower_campaign/Flower_instance_fedAvg_cif...   \n",
+       "6   Log/Flower_campaign/Flower_instance_fedAvg_cif...   \n",
+       "7   Log/Flower_campaign/Flower_instance_fedAvg_cif...   \n",
+       "8   Log/Flower_campaign/Flower_instance_fedAvg_cif...   \n",
+       "9   Log/Flower_campaign/Flower_instance_fedAvg_cif...   \n",
+       "10  Log/Flower_campaign/Flower_instance_fedAvg_cif...   \n",
+       "11  Log/Flower_campaign/Flower_instance_fedAvg_cif...   \n",
+       "12  Log/Flower_campaign/Flower_instance_fedAvg_cif...   \n",
+       "13  Log/Flower_campaign/Flower_instance_fedAvg_cif...   \n",
+       "14  Log/Flower_campaign/Flower_instance_fedAvg_cif...   \n",
+       "15  Log/Flower_campaign/Flower_instance_fedAvg_cif...   \n",
+       "16  Log/Flower_campaign/Flower_instance_fedAvg2Cli...   \n",
+       "17  Log/Flower_campaign/Flower_instance_fedAvg2Cli...   \n",
+       "18  Log/Flower_campaign/Flower_instance_fedAvg2Cli...   \n",
+       "19  Log/Flower_campaign/Flower_instance_fedAvg2Cli...   \n",
+       "20  Log/Flower_campaign/Flower_instance_fedAvg2Cli...   \n",
+       "21  Log/Flower_campaign/Flower_instance_fedAvg2Cli...   \n",
+       "22  Log/Flower_campaign/Flower_instance_fedAvg2Cli...   \n",
+       "23  Log/Flower_campaign/Flower_instance_fedAvg2Cli...   \n",
+       "24  Log/Flower_campaign/Flower_instance_fedAvg2Cli...   \n",
+       "25  Log/Flower_campaign/Flower_instance_fedAvg2Cli...   \n",
+       "26  Log/Flower_campaign/Flower_instance_fedAvg2Cli...   \n",
+       "27  Log/Flower_campaign/Flower_instance_fedAvg2Cli...   \n",
+       "28  Log/Flower_campaign/Flower_instance_fedAvg2Cli...   \n",
+       "29  Log/Flower_campaign/Flower_instance_fedAvg2Cli...   \n",
+       "30  Log/Flower_campaign/Flower_instance_fedAvg2Cli...   \n",
+       "31  Log/Flower_campaign/Flower_instance_fedAvg2Cli...   \n",
+       "\n",
+       "                         instance  \n",
+       "0           fedAvg_cifar10_epoch1  \n",
+       "1           fedAvg_cifar10_epoch1  \n",
+       "2           fedAvg_cifar10_epoch1  \n",
+       "3           fedAvg_cifar10_epoch1  \n",
+       "4           fedAvg_cifar10_epoch1  \n",
+       "5           fedAvg_cifar10_epoch1  \n",
+       "6           fedAvg_cifar10_epoch1  \n",
+       "7           fedAvg_cifar10_epoch1  \n",
+       "8           fedAvg_cifar10_epoch2  \n",
+       "9           fedAvg_cifar10_epoch2  \n",
+       "10          fedAvg_cifar10_epoch2  \n",
+       "11          fedAvg_cifar10_epoch2  \n",
+       "12          fedAvg_cifar10_epoch2  \n",
+       "13          fedAvg_cifar10_epoch2  \n",
+       "14          fedAvg_cifar10_epoch2  \n",
+       "15          fedAvg_cifar10_epoch2  \n",
+       "16  fedAvg2Clients_cifar10_epoch1  \n",
+       "17  fedAvg2Clients_cifar10_epoch1  \n",
+       "18  fedAvg2Clients_cifar10_epoch1  \n",
+       "19  fedAvg2Clients_cifar10_epoch1  \n",
+       "20  fedAvg2Clients_cifar10_epoch1  \n",
+       "21  fedAvg2Clients_cifar10_epoch1  \n",
+       "22  fedAvg2Clients_cifar10_epoch1  \n",
+       "23  fedAvg2Clients_cifar10_epoch1  \n",
+       "24  fedAvg2Clients_cifar10_epoch2  \n",
+       "25  fedAvg2Clients_cifar10_epoch2  \n",
+       "26  fedAvg2Clients_cifar10_epoch2  \n",
+       "27  fedAvg2Clients_cifar10_epoch2  \n",
+       "28  fedAvg2Clients_cifar10_epoch2  \n",
+       "29  fedAvg2Clients_cifar10_epoch2  \n",
+       "30  fedAvg2Clients_cifar10_epoch2  \n",
+       "31  fedAvg2Clients_cifar10_epoch2  "
+      ]
+     },
+     "execution_count": 69,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "file = 'Data_analysis/Output_level_4/combine_Flower_full_campaign.csv'\n",
+    "df = pd.read_csv(file)\n",
+    "df"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 70,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "application/vnd.microsoft.datawrangler.viewer.v0+json": {
+       "columns": [
+        {
+         "name": "index",
+         "rawType": "int64",
+         "type": "integer"
+        },
+        {
+         "name": "instance",
+         "rawType": "object",
+         "type": "string"
+        },
+        {
+         "name": "fmax",
+         "rawType": "float64",
+         "type": "float"
+        },
+        {
+         "name": "accuracy",
+         "rawType": "float64",
+         "type": "float"
+        },
+        {
+         "name": "max_acc",
+         "rawType": "float64",
+         "type": "float"
+        },
+        {
+         "name": "in_round",
+         "rawType": "float64",
+         "type": "float"
+        },
+        {
+         "name": "time",
+         "rawType": "float64",
+         "type": "float"
+        },
+        {
+         "name": "mean_power",
+         "rawType": "float64",
+         "type": "float"
+        },
+        {
+         "name": "mean_mojitos",
+         "rawType": "float64",
+         "type": "float"
+        },
+        {
+         "name": "sum_mojitos",
+         "rawType": "float64",
+         "type": "float"
+        },
+        {
+         "name": "std_power_combined",
+         "rawType": "float64",
+         "type": "float"
+        },
+        {
+         "name": "std_mojitos_combined",
+         "rawType": "float64",
+         "type": "float"
+        },
+        {
+         "name": "n_data_mojitos",
+         "rawType": "int64",
+         "type": "integer"
+        },
+        {
+         "name": "n_data_power",
+         "rawType": "int64",
+         "type": "integer"
+        }
+       ],
+       "conversionMethod": "pd.DataFrame",
+       "ref": "79960b21-1ba8-470a-b22c-b43fcc012fe7",
+       "rows": [
+        [
+         "0",
+         "fedAvg2Clients_cifar10_epoch1",
+         "1200000.0",
+         "0.46509999036788935",
+         "0.5015500038862228",
+         "14.0",
+         "1461.9750247001648",
+         "100.33294744462452",
+         "4415637.9980799705",
+         "262177821519.5",
+         "9.045125428332847",
+         "1204458.0285794898",
+         "11888",
+         "118750"
+        ],
+        [
+         "1",
+         "fedAvg2Clients_cifar10_epoch2",
+         "1200000.0",
+         "0.5997500121593475",
+         "0.6257500052452087",
+         "14.0",
+         "2507.221663594246",
+         "100.32543524886373",
+         "4449799.575917807",
+         "450109276733.5",
+         "9.38341161519843",
+         "1237234.0571073429",
+         "20256",
+         "202306"
+        ],
+        [
+         "2",
+         "fedAvg_cifar10_epoch1",
+         "1200000.0",
+         "0.5573500096797943",
+         "0.5631999969482422",
+         "14.0",
+         "1395.147032380104",
+         "105.20570679301395",
+         "5054236.42555913",
+         "286910302591.5",
+         "5.018977160475504",
+         "604934.9627095608",
+         "11376",
+         "113533"
+        ],
+        [
+         "3",
+         "fedAvg_cifar10_epoch2",
+         "1200000.0",
+         "0.6807999908924103",
+         "0.6807999908924103",
+         "15.0",
+         "2475.62549495697",
+         "105.70877316918896",
+         "5092211.878318334",
+         "509146242963.0",
+         "5.209436577483834",
+         "649902.3512222569",
+         "20024",
+         "200010"
+        ],
+        [
+         "4",
+         "fedAvg2Clients_cifar10_epoch1",
+         "1600000.0",
+         "0.4984000027179718",
+         "0.5065500140190125",
+         "14.0",
+         "1151.6614389419556",
+         "104.6139174511662",
+         "4855326.705288982",
+         "226856394249.5",
+         "12.754131957180716",
+         "1581664.718380795",
+         "9364",
+         "93447"
+        ],
+        [
+         "5",
+         "fedAvg2Clients_cifar10_epoch2",
+         "1600000.0",
+         "0.5807999968528748",
+         "0.6071499884128571",
+         "14.5",
+         "1981.8829140663147",
+         "104.81495036250104",
+         "4915088.673508881",
+         "392889848600.5",
+         "13.00357978997065",
+         "1618729.4933854446",
+         "16008",
+         "159871"
+        ],
+        [
+         "6",
+         "fedAvg_cifar10_epoch1",
+         "1600000.0",
+         "0.4972500056028366",
+         "0.549699991941452",
+         "14.5",
+         "1098.3139171600342",
+         "111.48117860367591",
+         "5714127.551137589",
+         "254784624434.5",
+         "6.537930039430139",
+         "766895.5246203286",
+         "8940",
+         "89177"
+        ],
+        [
+         "7",
+         "fedAvg_cifar10_epoch2",
+         "1600000.0",
+         "0.6011500060558319",
+         "0.6547000110149384",
+         "14.5",
+         "1970.4790830612183",
+         "112.02975218890772",
+         "5749183.255878581",
+         "456870320659.5",
+         "6.9130178651197465",
+         "836709.0946698901",
+         "15916",
+         "158967"
+        ],
+        [
+         "8",
+         "fedAvg2Clients_cifar10_epoch1",
+         "2000000.0",
+         "0.4178999960422516",
+         "0.4745500087738037",
+         "14.5",
+         "952.147278547287",
+         "109.76696005205446",
+         "5407755.099883631",
+         "209267815560.0",
+         "16.416734301888877",
+         "1976359.1652553577",
+         "7760",
+         "77395"
+        ],
+        [
+         "9",
+         "fedAvg2Clients_cifar10_epoch2",
+         "2000000.0",
+         "0.620849996805191",
+         "0.632999986410141",
+         "14.0",
+         "1648.9026321172714",
+         "109.86072350744945",
+         "5472564.980000955",
+         "364248507791.5",
+         "17.297847669572537",
+         "2053434.09364995",
+         "13332",
+         "133119"
+        ],
+        [
+         "10",
+         "fedAvg_cifar10_epoch1",
+         "2000000.0",
+         "0.5546999871730804",
+         "0.5546999871730804",
+         "15.0",
+         "955.3555190563202",
+         "117.08737151141113",
+         "6274304.206654045",
+         "243402781700.5",
+         "11.576662669281491",
+         "1347651.7370545832",
+         "7776",
+         "77587"
+        ],
+        [
+         "11",
+         "fedAvg_cifar10_epoch2",
+         "2000000.0",
+         "0.643750011920929",
+         "0.6459000110626221",
+         "14.5",
+         "1634.3653135299683",
+         "119.58712408238989",
+         "6552683.234792877",
+         "432104586893.5",
+         "9.010380743328987",
+         "1052233.5495065076",
+         "13204",
+         "131906"
+        ],
+        [
+         "12",
+         "fedAvg2Clients_cifar10_epoch1",
+         "2300000.0",
+         "0.4884500056505203",
+         "0.4884500056505203",
+         "15.0",
+         "860.1344259977341",
+         "114.40957727617835",
+         "5909514.4204026405",
+         "206573066305.5",
+         "19.86321135158165",
+         "2318277.3906743433",
+         "6996",
+         "69911"
+        ],
+        [
+         "13",
+         "fedAvg2Clients_cifar10_epoch2",
+         "2300000.0",
+         "0.6467500030994415",
+         "0.6467500030994415",
+         "15.0",
+         "1484.496279001236",
+         "115.32531576520864",
+         "6004245.080419296",
+         "359499667316.5",
+         "20.936605961859737",
+         "2397544.0791712953",
+         "11992",
+         "119749"
+        ],
+        [
+         "14",
+         "fedAvg_cifar10_epoch1",
+         "2300000.0",
+         "0.5004499852657318",
+         "0.5640999972820282",
+         "14.5",
+         "845.9961229562759",
+         "124.70694916627386",
+         "7060694.55706032",
+         "242581500986.5",
+         "12.768274300694875",
+         "1460814.0352161247",
+         "6888",
+         "68741"
+        ],
+        [
+         "15",
+         "fedAvg_cifar10_epoch2",
+         "2300000.0",
+         "0.6314499974250793",
+         "0.6507999897003174",
+         "14.0",
+         "1463.4145741462708",
+         "126.98081947181782",
+         "7322033.769809767",
+         "432112200951.5",
+         "10.732266495547679",
+         "1215306.0445802794",
+         "11820",
+         "118047"
+        ]
+       ],
+       "shape": {
+        "columns": 13,
+        "rows": 16
+       }
+      },
+      "text/html": [
+       "<div>\n",
+       "<style scoped>\n",
+       "    .dataframe tbody tr th:only-of-type {\n",
+       "        vertical-align: middle;\n",
+       "    }\n",
+       "\n",
+       "    .dataframe tbody tr th {\n",
+       "        vertical-align: top;\n",
+       "    }\n",
+       "\n",
+       "    .dataframe thead th {\n",
+       "        text-align: right;\n",
+       "    }\n",
+       "</style>\n",
+       "<table border=\"1\" class=\"dataframe\">\n",
+       "  <thead>\n",
+       "    <tr style=\"text-align: right;\">\n",
+       "      <th></th>\n",
+       "      <th>instance</th>\n",
+       "      <th>fmax</th>\n",
+       "      <th>accuracy</th>\n",
+       "      <th>max_acc</th>\n",
+       "      <th>in_round</th>\n",
+       "      <th>time</th>\n",
+       "      <th>mean_power</th>\n",
+       "      <th>mean_mojitos</th>\n",
+       "      <th>sum_mojitos</th>\n",
+       "      <th>std_power_combined</th>\n",
+       "      <th>std_mojitos_combined</th>\n",
+       "      <th>n_data_mojitos</th>\n",
+       "      <th>n_data_power</th>\n",
+       "    </tr>\n",
+       "  </thead>\n",
+       "  <tbody>\n",
+       "    <tr>\n",
+       "      <th>0</th>\n",
+       "      <td>fedAvg2Clients_cifar10_epoch1</td>\n",
+       "      <td>1200000.0</td>\n",
+       "      <td>0.46510</td>\n",
+       "      <td>0.50155</td>\n",
+       "      <td>14.0</td>\n",
+       "      <td>1461.975025</td>\n",
+       "      <td>100.332947</td>\n",
+       "      <td>4.415638e+06</td>\n",
+       "      <td>2.621778e+11</td>\n",
+       "      <td>9.045125</td>\n",
+       "      <td>1.204458e+06</td>\n",
+       "      <td>11888</td>\n",
+       "      <td>118750</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>1</th>\n",
+       "      <td>fedAvg2Clients_cifar10_epoch2</td>\n",
+       "      <td>1200000.0</td>\n",
+       "      <td>0.59975</td>\n",
+       "      <td>0.62575</td>\n",
+       "      <td>14.0</td>\n",
+       "      <td>2507.221664</td>\n",
+       "      <td>100.325435</td>\n",
+       "      <td>4.449800e+06</td>\n",
+       "      <td>4.501093e+11</td>\n",
+       "      <td>9.383412</td>\n",
+       "      <td>1.237234e+06</td>\n",
+       "      <td>20256</td>\n",
+       "      <td>202306</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>2</th>\n",
+       "      <td>fedAvg_cifar10_epoch1</td>\n",
+       "      <td>1200000.0</td>\n",
+       "      <td>0.55735</td>\n",
+       "      <td>0.56320</td>\n",
+       "      <td>14.0</td>\n",
+       "      <td>1395.147032</td>\n",
+       "      <td>105.205707</td>\n",
+       "      <td>5.054236e+06</td>\n",
+       "      <td>2.869103e+11</td>\n",
+       "      <td>5.018977</td>\n",
+       "      <td>6.049350e+05</td>\n",
+       "      <td>11376</td>\n",
+       "      <td>113533</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>3</th>\n",
+       "      <td>fedAvg_cifar10_epoch2</td>\n",
+       "      <td>1200000.0</td>\n",
+       "      <td>0.68080</td>\n",
+       "      <td>0.68080</td>\n",
+       "      <td>15.0</td>\n",
+       "      <td>2475.625495</td>\n",
+       "      <td>105.708773</td>\n",
+       "      <td>5.092212e+06</td>\n",
+       "      <td>5.091462e+11</td>\n",
+       "      <td>5.209437</td>\n",
+       "      <td>6.499024e+05</td>\n",
+       "      <td>20024</td>\n",
+       "      <td>200010</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>4</th>\n",
+       "      <td>fedAvg2Clients_cifar10_epoch1</td>\n",
+       "      <td>1600000.0</td>\n",
+       "      <td>0.49840</td>\n",
+       "      <td>0.50655</td>\n",
+       "      <td>14.0</td>\n",
+       "      <td>1151.661439</td>\n",
+       "      <td>104.613917</td>\n",
+       "      <td>4.855327e+06</td>\n",
+       "      <td>2.268564e+11</td>\n",
+       "      <td>12.754132</td>\n",
+       "      <td>1.581665e+06</td>\n",
+       "      <td>9364</td>\n",
+       "      <td>93447</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>5</th>\n",
+       "      <td>fedAvg2Clients_cifar10_epoch2</td>\n",
+       "      <td>1600000.0</td>\n",
+       "      <td>0.58080</td>\n",
+       "      <td>0.60715</td>\n",
+       "      <td>14.5</td>\n",
+       "      <td>1981.882914</td>\n",
+       "      <td>104.814950</td>\n",
+       "      <td>4.915089e+06</td>\n",
+       "      <td>3.928898e+11</td>\n",
+       "      <td>13.003580</td>\n",
+       "      <td>1.618729e+06</td>\n",
+       "      <td>16008</td>\n",
+       "      <td>159871</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>6</th>\n",
+       "      <td>fedAvg_cifar10_epoch1</td>\n",
+       "      <td>1600000.0</td>\n",
+       "      <td>0.49725</td>\n",
+       "      <td>0.54970</td>\n",
+       "      <td>14.5</td>\n",
+       "      <td>1098.313917</td>\n",
+       "      <td>111.481179</td>\n",
+       "      <td>5.714128e+06</td>\n",
+       "      <td>2.547846e+11</td>\n",
+       "      <td>6.537930</td>\n",
+       "      <td>7.668955e+05</td>\n",
+       "      <td>8940</td>\n",
+       "      <td>89177</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>7</th>\n",
+       "      <td>fedAvg_cifar10_epoch2</td>\n",
+       "      <td>1600000.0</td>\n",
+       "      <td>0.60115</td>\n",
+       "      <td>0.65470</td>\n",
+       "      <td>14.5</td>\n",
+       "      <td>1970.479083</td>\n",
+       "      <td>112.029752</td>\n",
+       "      <td>5.749183e+06</td>\n",
+       "      <td>4.568703e+11</td>\n",
+       "      <td>6.913018</td>\n",
+       "      <td>8.367091e+05</td>\n",
+       "      <td>15916</td>\n",
+       "      <td>158967</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>8</th>\n",
+       "      <td>fedAvg2Clients_cifar10_epoch1</td>\n",
+       "      <td>2000000.0</td>\n",
+       "      <td>0.41790</td>\n",
+       "      <td>0.47455</td>\n",
+       "      <td>14.5</td>\n",
+       "      <td>952.147279</td>\n",
+       "      <td>109.766960</td>\n",
+       "      <td>5.407755e+06</td>\n",
+       "      <td>2.092678e+11</td>\n",
+       "      <td>16.416734</td>\n",
+       "      <td>1.976359e+06</td>\n",
+       "      <td>7760</td>\n",
+       "      <td>77395</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>9</th>\n",
+       "      <td>fedAvg2Clients_cifar10_epoch2</td>\n",
+       "      <td>2000000.0</td>\n",
+       "      <td>0.62085</td>\n",
+       "      <td>0.63300</td>\n",
+       "      <td>14.0</td>\n",
+       "      <td>1648.902632</td>\n",
+       "      <td>109.860724</td>\n",
+       "      <td>5.472565e+06</td>\n",
+       "      <td>3.642485e+11</td>\n",
+       "      <td>17.297848</td>\n",
+       "      <td>2.053434e+06</td>\n",
+       "      <td>13332</td>\n",
+       "      <td>133119</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>10</th>\n",
+       "      <td>fedAvg_cifar10_epoch1</td>\n",
+       "      <td>2000000.0</td>\n",
+       "      <td>0.55470</td>\n",
+       "      <td>0.55470</td>\n",
+       "      <td>15.0</td>\n",
+       "      <td>955.355519</td>\n",
+       "      <td>117.087372</td>\n",
+       "      <td>6.274304e+06</td>\n",
+       "      <td>2.434028e+11</td>\n",
+       "      <td>11.576663</td>\n",
+       "      <td>1.347652e+06</td>\n",
+       "      <td>7776</td>\n",
+       "      <td>77587</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>11</th>\n",
+       "      <td>fedAvg_cifar10_epoch2</td>\n",
+       "      <td>2000000.0</td>\n",
+       "      <td>0.64375</td>\n",
+       "      <td>0.64590</td>\n",
+       "      <td>14.5</td>\n",
+       "      <td>1634.365314</td>\n",
+       "      <td>119.587124</td>\n",
+       "      <td>6.552683e+06</td>\n",
+       "      <td>4.321046e+11</td>\n",
+       "      <td>9.010381</td>\n",
+       "      <td>1.052234e+06</td>\n",
+       "      <td>13204</td>\n",
+       "      <td>131906</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>12</th>\n",
+       "      <td>fedAvg2Clients_cifar10_epoch1</td>\n",
+       "      <td>2300000.0</td>\n",
+       "      <td>0.48845</td>\n",
+       "      <td>0.48845</td>\n",
+       "      <td>15.0</td>\n",
+       "      <td>860.134426</td>\n",
+       "      <td>114.409577</td>\n",
+       "      <td>5.909514e+06</td>\n",
+       "      <td>2.065731e+11</td>\n",
+       "      <td>19.863211</td>\n",
+       "      <td>2.318277e+06</td>\n",
+       "      <td>6996</td>\n",
+       "      <td>69911</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>13</th>\n",
+       "      <td>fedAvg2Clients_cifar10_epoch2</td>\n",
+       "      <td>2300000.0</td>\n",
+       "      <td>0.64675</td>\n",
+       "      <td>0.64675</td>\n",
+       "      <td>15.0</td>\n",
+       "      <td>1484.496279</td>\n",
+       "      <td>115.325316</td>\n",
+       "      <td>6.004245e+06</td>\n",
+       "      <td>3.594997e+11</td>\n",
+       "      <td>20.936606</td>\n",
+       "      <td>2.397544e+06</td>\n",
+       "      <td>11992</td>\n",
+       "      <td>119749</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>14</th>\n",
+       "      <td>fedAvg_cifar10_epoch1</td>\n",
+       "      <td>2300000.0</td>\n",
+       "      <td>0.50045</td>\n",
+       "      <td>0.56410</td>\n",
+       "      <td>14.5</td>\n",
+       "      <td>845.996123</td>\n",
+       "      <td>124.706949</td>\n",
+       "      <td>7.060695e+06</td>\n",
+       "      <td>2.425815e+11</td>\n",
+       "      <td>12.768274</td>\n",
+       "      <td>1.460814e+06</td>\n",
+       "      <td>6888</td>\n",
+       "      <td>68741</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>15</th>\n",
+       "      <td>fedAvg_cifar10_epoch2</td>\n",
+       "      <td>2300000.0</td>\n",
+       "      <td>0.63145</td>\n",
+       "      <td>0.65080</td>\n",
+       "      <td>14.0</td>\n",
+       "      <td>1463.414574</td>\n",
+       "      <td>126.980819</td>\n",
+       "      <td>7.322034e+06</td>\n",
+       "      <td>4.321122e+11</td>\n",
+       "      <td>10.732266</td>\n",
+       "      <td>1.215306e+06</td>\n",
+       "      <td>11820</td>\n",
+       "      <td>118047</td>\n",
+       "    </tr>\n",
+       "  </tbody>\n",
+       "</table>\n",
+       "</div>"
+      ],
+      "text/plain": [
+       "                         instance       fmax  accuracy  max_acc  in_round  \\\n",
+       "0   fedAvg2Clients_cifar10_epoch1  1200000.0   0.46510  0.50155      14.0   \n",
+       "1   fedAvg2Clients_cifar10_epoch2  1200000.0   0.59975  0.62575      14.0   \n",
+       "2           fedAvg_cifar10_epoch1  1200000.0   0.55735  0.56320      14.0   \n",
+       "3           fedAvg_cifar10_epoch2  1200000.0   0.68080  0.68080      15.0   \n",
+       "4   fedAvg2Clients_cifar10_epoch1  1600000.0   0.49840  0.50655      14.0   \n",
+       "5   fedAvg2Clients_cifar10_epoch2  1600000.0   0.58080  0.60715      14.5   \n",
+       "6           fedAvg_cifar10_epoch1  1600000.0   0.49725  0.54970      14.5   \n",
+       "7           fedAvg_cifar10_epoch2  1600000.0   0.60115  0.65470      14.5   \n",
+       "8   fedAvg2Clients_cifar10_epoch1  2000000.0   0.41790  0.47455      14.5   \n",
+       "9   fedAvg2Clients_cifar10_epoch2  2000000.0   0.62085  0.63300      14.0   \n",
+       "10          fedAvg_cifar10_epoch1  2000000.0   0.55470  0.55470      15.0   \n",
+       "11          fedAvg_cifar10_epoch2  2000000.0   0.64375  0.64590      14.5   \n",
+       "12  fedAvg2Clients_cifar10_epoch1  2300000.0   0.48845  0.48845      15.0   \n",
+       "13  fedAvg2Clients_cifar10_epoch2  2300000.0   0.64675  0.64675      15.0   \n",
+       "14          fedAvg_cifar10_epoch1  2300000.0   0.50045  0.56410      14.5   \n",
+       "15          fedAvg_cifar10_epoch2  2300000.0   0.63145  0.65080      14.0   \n",
+       "\n",
+       "           time  mean_power  mean_mojitos   sum_mojitos  std_power_combined  \\\n",
+       "0   1461.975025  100.332947  4.415638e+06  2.621778e+11            9.045125   \n",
+       "1   2507.221664  100.325435  4.449800e+06  4.501093e+11            9.383412   \n",
+       "2   1395.147032  105.205707  5.054236e+06  2.869103e+11            5.018977   \n",
+       "3   2475.625495  105.708773  5.092212e+06  5.091462e+11            5.209437   \n",
+       "4   1151.661439  104.613917  4.855327e+06  2.268564e+11           12.754132   \n",
+       "5   1981.882914  104.814950  4.915089e+06  3.928898e+11           13.003580   \n",
+       "6   1098.313917  111.481179  5.714128e+06  2.547846e+11            6.537930   \n",
+       "7   1970.479083  112.029752  5.749183e+06  4.568703e+11            6.913018   \n",
+       "8    952.147279  109.766960  5.407755e+06  2.092678e+11           16.416734   \n",
+       "9   1648.902632  109.860724  5.472565e+06  3.642485e+11           17.297848   \n",
+       "10   955.355519  117.087372  6.274304e+06  2.434028e+11           11.576663   \n",
+       "11  1634.365314  119.587124  6.552683e+06  4.321046e+11            9.010381   \n",
+       "12   860.134426  114.409577  5.909514e+06  2.065731e+11           19.863211   \n",
+       "13  1484.496279  115.325316  6.004245e+06  3.594997e+11           20.936606   \n",
+       "14   845.996123  124.706949  7.060695e+06  2.425815e+11           12.768274   \n",
+       "15  1463.414574  126.980819  7.322034e+06  4.321122e+11           10.732266   \n",
+       "\n",
+       "    std_mojitos_combined  n_data_mojitos  n_data_power  \n",
+       "0           1.204458e+06           11888        118750  \n",
+       "1           1.237234e+06           20256        202306  \n",
+       "2           6.049350e+05           11376        113533  \n",
+       "3           6.499024e+05           20024        200010  \n",
+       "4           1.581665e+06            9364         93447  \n",
+       "5           1.618729e+06           16008        159871  \n",
+       "6           7.668955e+05            8940         89177  \n",
+       "7           8.367091e+05           15916        158967  \n",
+       "8           1.976359e+06            7760         77395  \n",
+       "9           2.053434e+06           13332        133119  \n",
+       "10          1.347652e+06            7776         77587  \n",
+       "11          1.052234e+06           13204        131906  \n",
+       "12          2.318277e+06            6996         69911  \n",
+       "13          2.397544e+06           11992        119749  \n",
+       "14          1.460814e+06            6888         68741  \n",
+       "15          1.215306e+06           11820        118047  "
+      ]
+     },
+     "execution_count": 70,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "# std calculate\n",
+    "def combined_std(df_group, std_col, n_col):\n",
+    "    num = np.sum((df_group[n_col] - 1) * df_group[std_col]**2)\n",
+    "    denom = np.sum(df_group[n_col] - 1)\n",
+    "    return np.sqrt(num / denom)\n",
+    "\n",
+    "#remove file_number and startTime columns\n",
+    "df = df.drop(columns=['file_number', 'startTime'])\n",
+    "\n",
+    "# Separate columns into normal data and std data\n",
+    "std_columns = [col for col in df.columns if col.startswith(\"std\")]\n",
+    "n_columns = [col for col in df.columns if col.startswith(\"n_data\")]\n",
+    "normal_columns = [col for col in df.columns if col not in std_columns + n_columns]\n",
+    "\n",
+    "# Calculate sum for number of data columns\n",
+    "df_sum = df.groupby(['fmax', 'instance'], as_index=False)[n_columns].sum(numeric_only=True)\n",
+    "\n",
+    "# Calculate mean for normal data columns\n",
+    "df_mean = df.groupby(['fmax', 'instance'], as_index=False)[normal_columns].mean(numeric_only=True)\n",
+    "\n",
+    "# Calculate combined std for std data columns\n",
+    "df_std = df.groupby(['fmax', 'instance']).apply(lambda x: pd.Series({col: combined_std(x, col, f\"n_data_{col.split('_')[1]}\") for col in std_columns}), include_groups=False).reset_index()\n",
+    "\n",
+    "# Merge the mean and std dataframes\n",
+    "df_grouped = pd.merge(df_mean, df_std, on=['fmax', 'instance'])\n",
+    "df_grouped = pd.merge(df_grouped, df_sum, on=['fmax', 'instance'])\n",
+    "df_grouped"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 71,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "application/vnd.plotly.v1+json": {
+       "config": {
+        "plotlyServerURL": "https://plot.ly"
+       },
+       "data": [
+        {
+         "marker": {
+          "color": "rgb(228,26,28)"
+         },
+         "mode": "markers",
+         "name": "FedAvgClients, CIFAR10, 1 epoch",
+         "showlegend": true,
+         "type": "scatter",
+         "x": [
+          "1.2",
+          "1.6",
+          "2.0",
+          "2.3"
+         ],
+         "xaxis": "x6",
+         "y": [
+          0.12631144896879037,
+          0.10374650710722544,
+          0.08999843558130959,
+          0.08473989162366002
+         ],
+         "yaxis": "y6"
+        },
+        {
+         "marker": {
+          "color": "rgb(228,26,28)"
+         },
+         "mode": "markers",
+         "name": "FedAvgClients, CIFAR10, 1 epoch",
+         "showlegend": false,
+         "type": "scatter",
+         "x": [
+          "1.2",
+          "1.6",
+          "2.0",
+          "2.3"
+         ],
+         "xaxis": "x2",
+         "y": [
+          1461.9750247001648,
+          1151.6614389419556,
+          952.147278547287,
+          860.1344259977341
+         ],
+         "yaxis": "y2"
+        },
+        {
+         "marker": {
+          "color": "rgb(228,26,28)"
+         },
+         "mode": "markers",
+         "name": "FedAvgClients, CIFAR10, 1 epoch",
+         "showlegend": false,
+         "type": "scatter",
+         "x": [
+          "1.2",
+          "1.6",
+          "2.0",
+          "2.3"
+         ],
+         "xaxis": "x3",
+         "y": [
+          100.33294744462452,
+          104.6139174511662,
+          109.76696005205446,
+          114.40957727617835
+         ],
+         "yaxis": "y3"
+        },
+        {
+         "marker": {
+          "color": "rgb(228,26,28)"
+         },
+         "mode": "markers",
+         "name": "FedAvgClients, CIFAR10, 1 epoch",
+         "showlegend": false,
+         "type": "scatter",
+         "x": [
+          "1.2",
+          "1.6",
+          "2.0",
+          "2.3"
+         ],
+         "xaxis": "x5",
+         "y": [
+          26217.78215195,
+          22685.63942495,
+          20926.781556,
+          20657.30663055
+         ],
+         "yaxis": "y5"
+        },
+        {
+         "marker": {
+          "color": "rgb(228,26,28)"
+         },
+         "mode": "markers",
+         "name": "FedAvgClients, CIFAR10, 1 epoch",
+         "showlegend": false,
+         "type": "scatter",
+         "x": [
+          "1.2",
+          "1.6",
+          "2.0",
+          "2.3"
+         ],
+         "xaxis": "x",
+         "y": [
+          0.46509999036788935,
+          0.4984000027179718,
+          0.4178999960422516,
+          0.4884500056505203
+         ],
+         "yaxis": "y"
+        },
+        {
+         "marker": {
+          "color": "rgb(228,26,28)"
+         },
+         "mode": "markers",
+         "name": "FedAvgClients, CIFAR10, 1 epoch",
+         "showlegend": false,
+         "type": "scatter",
+         "x": [
+          "1.2",
+          "1.6",
+          "2.0",
+          "2.3"
+         ],
+         "xaxis": "x4",
+         "y": [
+          146684.26331859527,
+          120479.81470516503,
+          104514.31228797243,
+          98407.61607908907
+         ],
+         "yaxis": "y4"
+        },
+        {
+         "marker": {
+          "color": "rgb(55,126,184)"
+         },
+         "mode": "markers",
+         "name": "FedAvgClients, CIFAR10, 2 epochs",
+         "showlegend": true,
+         "type": "scatter",
+         "x": [
+          "1.2",
+          "1.6",
+          "2.0",
+          "2.3"
+         ],
+         "xaxis": "x6",
+         "y": [
+          0.21660225679526832,
+          0.17887943714240667,
+          0.15598996446916602,
+          0.14742222405474834
+         ],
+         "yaxis": "y6"
+        },
+        {
+         "marker": {
+          "color": "rgb(55,126,184)"
+         },
+         "mode": "markers",
+         "name": "FedAvgClients, CIFAR10, 2 epochs",
+         "showlegend": false,
+         "type": "scatter",
+         "x": [
+          "1.2",
+          "1.6",
+          "2.0",
+          "2.3"
+         ],
+         "xaxis": "x2",
+         "y": [
+          2507.221663594246,
+          1981.8829140663147,
+          1648.9026321172714,
+          1484.496279001236
+         ],
+         "yaxis": "y2"
+        },
+        {
+         "marker": {
+          "color": "rgb(55,126,184)"
+         },
+         "mode": "markers",
+         "name": "FedAvgClients, CIFAR10, 2 epochs",
+         "showlegend": false,
+         "type": "scatter",
+         "x": [
+          "1.2",
+          "1.6",
+          "2.0",
+          "2.3"
+         ],
+         "xaxis": "x3",
+         "y": [
+          100.32543524886373,
+          104.81495036250104,
+          109.86072350744945,
+          115.32531576520864
+         ],
+         "yaxis": "y3"
+        },
+        {
+         "marker": {
+          "color": "rgb(55,126,184)"
+         },
+         "mode": "markers",
+         "name": "FedAvgClients, CIFAR10, 2 epochs",
+         "showlegend": false,
+         "type": "scatter",
+         "x": [
+          "1.2",
+          "1.6",
+          "2.0",
+          "2.3"
+         ],
+         "xaxis": "x5",
+         "y": [
+          45010.92767335,
+          39288.98486005,
+          36424.85077915,
+          35949.96673165
+         ],
+         "yaxis": "y5"
+        },
+        {
+         "marker": {
+          "color": "rgb(55,126,184)"
+         },
+         "mode": "markers",
+         "name": "FedAvgClients, CIFAR10, 2 epochs",
+         "showlegend": false,
+         "type": "scatter",
+         "x": [
+          "1.2",
+          "1.6",
+          "2.0",
+          "2.3"
+         ],
+         "xaxis": "x",
+         "y": [
+          0.5997500121593475,
+          0.5807999968528748,
+          0.620849996805191,
+          0.6467500030994415
+         ],
+         "yaxis": "y"
+        },
+        {
+         "marker": {
+          "color": "rgb(55,126,184)"
+         },
+         "mode": "markers",
+         "name": "FedAvgClients, CIFAR10, 2 epochs",
+         "showlegend": false,
+         "type": "scatter",
+         "x": [
+          "1.2",
+          "1.6",
+          "2.0",
+          "2.3"
+         ],
+         "xaxis": "x4",
+         "y": [
+          251538.1046654729,
+          207730.95926214967,
+          181149.6361577412,
+          171200.0021280948
+         ],
+         "yaxis": "y4"
+        },
+        {
+         "marker": {
+          "color": "rgb(77,175,74)"
+         },
+         "mode": "markers",
+         "name": "FedAvg, CIFAR10, 1 epoch",
+         "showlegend": true,
+         "type": "scatter",
+         "x": [
+          "1.2",
+          "1.6",
+          "2.0",
+          "2.3"
+         ],
+         "xaxis": "x6",
+         "y": [
+          0.12639167550759633,
+          0.10543558968934559,
+          0.09632394622616544,
+          0.09084859612532126
+         ],
+         "yaxis": "y6"
+        },
+        {
+         "marker": {
+          "color": "rgb(77,175,74)"
+         },
+         "mode": "markers",
+         "name": "FedAvg, CIFAR10, 1 epoch",
+         "showlegend": false,
+         "type": "scatter",
+         "x": [
+          "1.2",
+          "1.6",
+          "2.0",
+          "2.3"
+         ],
+         "xaxis": "x2",
+         "y": [
+          1395.147032380104,
+          1098.3139171600342,
+          955.3555190563202,
+          845.9961229562759
+         ],
+         "yaxis": "y2"
+        },
+        {
+         "marker": {
+          "color": "rgb(77,175,74)"
+         },
+         "mode": "markers",
+         "name": "FedAvg, CIFAR10, 1 epoch",
+         "showlegend": false,
+         "type": "scatter",
+         "x": [
+          "1.2",
+          "1.6",
+          "2.0",
+          "2.3"
+         ],
+         "xaxis": "x3",
+         "y": [
+          105.20570679301395,
+          111.48117860367591,
+          117.08737151141113,
+          124.70694916627386
+         ],
+         "yaxis": "y3"
+        },
+        {
+         "marker": {
+          "color": "rgb(77,175,74)"
+         },
+         "mode": "markers",
+         "name": "FedAvg, CIFAR10, 1 epoch",
+         "showlegend": false,
+         "type": "scatter",
+         "x": [
+          "1.2",
+          "1.6",
+          "2.0",
+          "2.3"
+         ],
+         "xaxis": "x5",
+         "y": [
+          28691.03025915,
+          25478.46244345,
+          24340.27817005,
+          24258.15009865
+         ],
+         "yaxis": "y5"
+        },
+        {
+         "marker": {
+          "color": "rgb(77,175,74)"
+         },
+         "mode": "markers",
+         "name": "FedAvg, CIFAR10, 1 epoch",
+         "showlegend": false,
+         "type": "scatter",
+         "x": [
+          "1.2",
+          "1.6",
+          "2.0",
+          "2.3"
+         ],
+         "xaxis": "x",
+         "y": [
+          0.5573500096797943,
+          0.4972500056028366,
+          0.5546999871730804,
+          0.5004499852657318
+         ],
+         "yaxis": "y"
+        },
+        {
+         "marker": {
+          "color": "rgb(77,175,74)"
+         },
+         "mode": "markers",
+         "name": "FedAvg, CIFAR10, 1 epoch",
+         "showlegend": false,
+         "type": "scatter",
+         "x": [
+          "1.2",
+          "1.6",
+          "2.0",
+          "2.3"
+         ],
+         "xaxis": "x4",
+         "y": [
+          146777.42962172476,
+          122441.32996182068,
+          111860.06658522438,
+          105501.59550037308
+         ],
+         "yaxis": "y4"
+        },
+        {
+         "marker": {
+          "color": "rgb(152,78,163)"
+         },
+         "mode": "markers",
+         "name": "FedAvg, CIFAR10, 2 epochs",
+         "showlegend": true,
+         "type": "scatter",
+         "x": [
+          "1.2",
+          "1.6",
+          "2.0",
+          "2.3"
+         ],
+         "xaxis": "x6",
+         "y": [
+          0.22534875974573035,
+          0.19009224401200017,
+          0.16830334649713705,
+          0.16001647326152604
+         ],
+         "yaxis": "y6"
+        },
+        {
+         "marker": {
+          "color": "rgb(152,78,163)"
+         },
+         "mode": "markers",
+         "name": "FedAvg, CIFAR10, 2 epochs",
+         "showlegend": false,
+         "type": "scatter",
+         "x": [
+          "1.2",
+          "1.6",
+          "2.0",
+          "2.3"
+         ],
+         "xaxis": "x2",
+         "y": [
+          2475.62549495697,
+          1970.4790830612183,
+          1634.3653135299683,
+          1463.4145741462708
+         ],
+         "yaxis": "y2"
+        },
+        {
+         "marker": {
+          "color": "rgb(152,78,163)"
+         },
+         "mode": "markers",
+         "name": "FedAvg, CIFAR10, 2 epochs",
+         "showlegend": false,
+         "type": "scatter",
+         "x": [
+          "1.2",
+          "1.6",
+          "2.0",
+          "2.3"
+         ],
+         "xaxis": "x3",
+         "y": [
+          105.70877316918896,
+          112.02975218890772,
+          119.58712408238989,
+          126.98081947181782
+         ],
+         "yaxis": "y3"
+        },
+        {
+         "marker": {
+          "color": "rgb(152,78,163)"
+         },
+         "mode": "markers",
+         "name": "FedAvg, CIFAR10, 2 epochs",
+         "showlegend": false,
+         "type": "scatter",
+         "x": [
+          "1.2",
+          "1.6",
+          "2.0",
+          "2.3"
+         ],
+         "xaxis": "x5",
+         "y": [
+          50914.6242963,
+          45687.03206595,
+          43210.45868935,
+          43211.22009515
+         ],
+         "yaxis": "y5"
+        },
+        {
+         "marker": {
+          "color": "rgb(152,78,163)"
+         },
+         "mode": "markers",
+         "name": "FedAvg, CIFAR10, 2 epochs",
+         "showlegend": false,
+         "type": "scatter",
+         "x": [
+          "1.2",
+          "1.6",
+          "2.0",
+          "2.3"
+         ],
+         "xaxis": "x",
+         "y": [
+          0.6807999908924103,
+          0.6011500060558319,
+          0.643750011920929,
+          0.6314499974250793
+         ],
+         "yaxis": "y"
+        },
+        {
+         "marker": {
+          "color": "rgb(152,78,163)"
+         },
+         "mode": "markers",
+         "name": "FedAvg, CIFAR10, 2 epochs",
+         "showlegend": false,
+         "type": "scatter",
+         "x": [
+          "1.2",
+          "1.6",
+          "2.0",
+          "2.3"
+         ],
+         "xaxis": "x4",
+         "y": [
+          261695.3338982675,
+          220752.2833687744,
+          195449.04754506238,
+          185825.58185209477
+         ],
+         "yaxis": "y4"
+        }
+       ],
+       "layout": {
+        "annotations": [
+         {
+          "font": {
+           "size": 22
+          },
+          "showarrow": false,
+          "text": "(a)",
+          "x": 0.13,
+          "xanchor": "center",
+          "xref": "paper",
+          "y": 1,
+          "yanchor": "bottom",
+          "yref": "paper"
+         },
+         {
+          "font": {
+           "size": 22
+          },
+          "showarrow": false,
+          "text": "(b)",
+          "x": 0.5,
+          "xanchor": "center",
+          "xref": "paper",
+          "y": 1,
+          "yanchor": "bottom",
+          "yref": "paper"
+         },
+         {
+          "font": {
+           "size": 22
+          },
+          "showarrow": false,
+          "text": "(c)",
+          "x": 0.87,
+          "xanchor": "center",
+          "xref": "paper",
+          "y": 1,
+          "yanchor": "bottom",
+          "yref": "paper"
+         },
+         {
+          "font": {
+           "size": 22
+          },
+          "showarrow": false,
+          "text": "(d)",
+          "x": 0.13,
+          "xanchor": "center",
+          "xref": "paper",
+          "y": 0.4,
+          "yanchor": "bottom",
+          "yref": "paper"
+         },
+         {
+          "font": {
+           "size": 22
+          },
+          "showarrow": false,
+          "text": "(e)",
+          "x": 0.5,
+          "xanchor": "center",
+          "xref": "paper",
+          "y": 0.4,
+          "yanchor": "bottom",
+          "yref": "paper"
+         },
+         {
+          "font": {
+           "size": 22
+          },
+          "showarrow": false,
+          "text": "(f)",
+          "x": 0.87,
+          "xanchor": "center",
+          "xref": "paper",
+          "y": 0.4,
+          "yanchor": "bottom",
+          "yref": "paper"
+         }
+        ],
+        "font": {
+         "size": 18
+        },
+        "height": 800,
+        "legend": {
+         "font": {
+          "size": 22
+         },
+         "orientation": "h",
+         "x": 0.5,
+         "xanchor": "center",
+         "y": -0.3,
+         "yanchor": "bottom"
+        },
+        "showlegend": true,
+        "template": {
+         "data": {
+          "bar": [
+           {
+            "error_x": {
+             "color": "#2a3f5f"
+            },
+            "error_y": {
+             "color": "#2a3f5f"
+            },
+            "marker": {
+             "line": {
+              "color": "#E5ECF6",
+              "width": 0.5
+             },
+             "pattern": {
+              "fillmode": "overlay",
+              "size": 10,
+              "solidity": 0.2
+             }
+            },
+            "type": "bar"
+           }
+          ],
+          "barpolar": [
+           {
+            "marker": {
+             "line": {
+              "color": "#E5ECF6",
+              "width": 0.5
+             },
+             "pattern": {
+              "fillmode": "overlay",
+              "size": 10,
+              "solidity": 0.2
+             }
+            },
+            "type": "barpolar"
+           }
+          ],
+          "carpet": [
+           {
+            "aaxis": {
+             "endlinecolor": "#2a3f5f",
+             "gridcolor": "white",
+             "linecolor": "white",
+             "minorgridcolor": "white",
+             "startlinecolor": "#2a3f5f"
+            },
+            "baxis": {
+             "endlinecolor": "#2a3f5f",
+             "gridcolor": "white",
+             "linecolor": "white",
+             "minorgridcolor": "white",
+             "startlinecolor": "#2a3f5f"
+            },
+            "type": "carpet"
+           }
+          ],
+          "choropleth": [
+           {
+            "colorbar": {
+             "outlinewidth": 0,
+             "ticks": ""
+            },
+            "type": "choropleth"
+           }
+          ],
+          "contour": [
+           {
+            "colorbar": {
+             "outlinewidth": 0,
+             "ticks": ""
+            },
+            "colorscale": [
+             [
+              0,
+              "#0d0887"
+             ],
+             [
+              0.1111111111111111,
+              "#46039f"
+             ],
+             [
+              0.2222222222222222,
+              "#7201a8"
+             ],
+             [
+              0.3333333333333333,
+              "#9c179e"
+             ],
+             [
+              0.4444444444444444,
+              "#bd3786"
+             ],
+             [
+              0.5555555555555556,
+              "#d8576b"
+             ],
+             [
+              0.6666666666666666,
+              "#ed7953"
+             ],
+             [
+              0.7777777777777778,
+              "#fb9f3a"
+             ],
+             [
+              0.8888888888888888,
+              "#fdca26"
+             ],
+             [
+              1,
+              "#f0f921"
+             ]
+            ],
+            "type": "contour"
+           }
+          ],
+          "contourcarpet": [
+           {
+            "colorbar": {
+             "outlinewidth": 0,
+             "ticks": ""
+            },
+            "type": "contourcarpet"
+           }
+          ],
+          "heatmap": [
+           {
+            "colorbar": {
+             "outlinewidth": 0,
+             "ticks": ""
+            },
+            "colorscale": [
+             [
+              0,
+              "#0d0887"
+             ],
+             [
+              0.1111111111111111,
+              "#46039f"
+             ],
+             [
+              0.2222222222222222,
+              "#7201a8"
+             ],
+             [
+              0.3333333333333333,
+              "#9c179e"
+             ],
+             [
+              0.4444444444444444,
+              "#bd3786"
+             ],
+             [
+              0.5555555555555556,
+              "#d8576b"
+             ],
+             [
+              0.6666666666666666,
+              "#ed7953"
+             ],
+             [
+              0.7777777777777778,
+              "#fb9f3a"
+             ],
+             [
+              0.8888888888888888,
+              "#fdca26"
+             ],
+             [
+              1,
+              "#f0f921"
+             ]
+            ],
+            "type": "heatmap"
+           }
+          ],
+          "heatmapgl": [
+           {
+            "colorbar": {
+             "outlinewidth": 0,
+             "ticks": ""
+            },
+            "colorscale": [
+             [
+              0,
+              "#0d0887"
+             ],
+             [
+              0.1111111111111111,
+              "#46039f"
+             ],
+             [
+              0.2222222222222222,
+              "#7201a8"
+             ],
+             [
+              0.3333333333333333,
+              "#9c179e"
+             ],
+             [
+              0.4444444444444444,
+              "#bd3786"
+             ],
+             [
+              0.5555555555555556,
+              "#d8576b"
+             ],
+             [
+              0.6666666666666666,
+              "#ed7953"
+             ],
+             [
+              0.7777777777777778,
+              "#fb9f3a"
+             ],
+             [
+              0.8888888888888888,
+              "#fdca26"
+             ],
+             [
+              1,
+              "#f0f921"
+             ]
+            ],
+            "type": "heatmapgl"
+           }
+          ],
+          "histogram": [
+           {
+            "marker": {
+             "pattern": {
+              "fillmode": "overlay",
+              "size": 10,
+              "solidity": 0.2
+             }
+            },
+            "type": "histogram"
+           }
+          ],
+          "histogram2d": [
+           {
+            "colorbar": {
+             "outlinewidth": 0,
+             "ticks": ""
+            },
+            "colorscale": [
+             [
+              0,
+              "#0d0887"
+             ],
+             [
+              0.1111111111111111,
+              "#46039f"
+             ],
+             [
+              0.2222222222222222,
+              "#7201a8"
+             ],
+             [
+              0.3333333333333333,
+              "#9c179e"
+             ],
+             [
+              0.4444444444444444,
+              "#bd3786"
+             ],
+             [
+              0.5555555555555556,
+              "#d8576b"
+             ],
+             [
+              0.6666666666666666,
+              "#ed7953"
+             ],
+             [
+              0.7777777777777778,
+              "#fb9f3a"
+             ],
+             [
+              0.8888888888888888,
+              "#fdca26"
+             ],
+             [
+              1,
+              "#f0f921"
+             ]
+            ],
+            "type": "histogram2d"
+           }
+          ],
+          "histogram2dcontour": [
+           {
+            "colorbar": {
+             "outlinewidth": 0,
+             "ticks": ""
+            },
+            "colorscale": [
+             [
+              0,
+              "#0d0887"
+             ],
+             [
+              0.1111111111111111,
+              "#46039f"
+             ],
+             [
+              0.2222222222222222,
+              "#7201a8"
+             ],
+             [
+              0.3333333333333333,
+              "#9c179e"
+             ],
+             [
+              0.4444444444444444,
+              "#bd3786"
+             ],
+             [
+              0.5555555555555556,
+              "#d8576b"
+             ],
+             [
+              0.6666666666666666,
+              "#ed7953"
+             ],
+             [
+              0.7777777777777778,
+              "#fb9f3a"
+             ],
+             [
+              0.8888888888888888,
+              "#fdca26"
+             ],
+             [
+              1,
+              "#f0f921"
+             ]
+            ],
+            "type": "histogram2dcontour"
+           }
+          ],
+          "mesh3d": [
+           {
+            "colorbar": {
+             "outlinewidth": 0,
+             "ticks": ""
+            },
+            "type": "mesh3d"
+           }
+          ],
+          "parcoords": [
+           {
+            "line": {
+             "colorbar": {
+              "outlinewidth": 0,
+              "ticks": ""
+             }
+            },
+            "type": "parcoords"
+           }
+          ],
+          "pie": [
+           {
+            "automargin": true,
+            "type": "pie"
+           }
+          ],
+          "scatter": [
+           {
+            "fillpattern": {
+             "fillmode": "overlay",
+             "size": 10,
+             "solidity": 0.2
+            },
+            "type": "scatter"
+           }
+          ],
+          "scatter3d": [
+           {
+            "line": {
+             "colorbar": {
+              "outlinewidth": 0,
+              "ticks": ""
+             }
+            },
+            "marker": {
+             "colorbar": {
+              "outlinewidth": 0,
+              "ticks": ""
+             }
+            },
+            "type": "scatter3d"
+           }
+          ],
+          "scattercarpet": [
+           {
+            "marker": {
+             "colorbar": {
+              "outlinewidth": 0,
+              "ticks": ""
+             }
+            },
+            "type": "scattercarpet"
+           }
+          ],
+          "scattergeo": [
+           {
+            "marker": {
+             "colorbar": {
+              "outlinewidth": 0,
+              "ticks": ""
+             }
+            },
+            "type": "scattergeo"
+           }
+          ],
+          "scattergl": [
+           {
+            "marker": {
+             "colorbar": {
+              "outlinewidth": 0,
+              "ticks": ""
+             }
+            },
+            "type": "scattergl"
+           }
+          ],
+          "scattermapbox": [
+           {
+            "marker": {
+             "colorbar": {
+              "outlinewidth": 0,
+              "ticks": ""
+             }
+            },
+            "type": "scattermapbox"
+           }
+          ],
+          "scatterpolar": [
+           {
+            "marker": {
+             "colorbar": {
+              "outlinewidth": 0,
+              "ticks": ""
+             }
+            },
+            "type": "scatterpolar"
+           }
+          ],
+          "scatterpolargl": [
+           {
+            "marker": {
+             "colorbar": {
+              "outlinewidth": 0,
+              "ticks": ""
+             }
+            },
+            "type": "scatterpolargl"
+           }
+          ],
+          "scatterternary": [
+           {
+            "marker": {
+             "colorbar": {
+              "outlinewidth": 0,
+              "ticks": ""
+             }
+            },
+            "type": "scatterternary"
+           }
+          ],
+          "surface": [
+           {
+            "colorbar": {
+             "outlinewidth": 0,
+             "ticks": ""
+            },
+            "colorscale": [
+             [
+              0,
+              "#0d0887"
+             ],
+             [
+              0.1111111111111111,
+              "#46039f"
+             ],
+             [
+              0.2222222222222222,
+              "#7201a8"
+             ],
+             [
+              0.3333333333333333,
+              "#9c179e"
+             ],
+             [
+              0.4444444444444444,
+              "#bd3786"
+             ],
+             [
+              0.5555555555555556,
+              "#d8576b"
+             ],
+             [
+              0.6666666666666666,
+              "#ed7953"
+             ],
+             [
+              0.7777777777777778,
+              "#fb9f3a"
+             ],
+             [
+              0.8888888888888888,
+              "#fdca26"
+             ],
+             [
+              1,
+              "#f0f921"
+             ]
+            ],
+            "type": "surface"
+           }
+          ],
+          "table": [
+           {
+            "cells": {
+             "fill": {
+              "color": "#EBF0F8"
+             },
+             "line": {
+              "color": "white"
+             }
+            },
+            "header": {
+             "fill": {
+              "color": "#C8D4E3"
+             },
+             "line": {
+              "color": "white"
+             }
+            },
+            "type": "table"
+           }
+          ]
+         },
+         "layout": {
+          "annotationdefaults": {
+           "arrowcolor": "#2a3f5f",
+           "arrowhead": 0,
+           "arrowwidth": 1
+          },
+          "autotypenumbers": "strict",
+          "coloraxis": {
+           "colorbar": {
+            "outlinewidth": 0,
+            "ticks": ""
+           }
+          },
+          "colorscale": {
+           "diverging": [
+            [
+             0,
+             "#8e0152"
+            ],
+            [
+             0.1,
+             "#c51b7d"
+            ],
+            [
+             0.2,
+             "#de77ae"
+            ],
+            [
+             0.3,
+             "#f1b6da"
+            ],
+            [
+             0.4,
+             "#fde0ef"
+            ],
+            [
+             0.5,
+             "#f7f7f7"
+            ],
+            [
+             0.6,
+             "#e6f5d0"
+            ],
+            [
+             0.7,
+             "#b8e186"
+            ],
+            [
+             0.8,
+             "#7fbc41"
+            ],
+            [
+             0.9,
+             "#4d9221"
+            ],
+            [
+             1,
+             "#276419"
+            ]
+           ],
+           "sequential": [
+            [
+             0,
+             "#0d0887"
+            ],
+            [
+             0.1111111111111111,
+             "#46039f"
+            ],
+            [
+             0.2222222222222222,
+             "#7201a8"
+            ],
+            [
+             0.3333333333333333,
+             "#9c179e"
+            ],
+            [
+             0.4444444444444444,
+             "#bd3786"
+            ],
+            [
+             0.5555555555555556,
+             "#d8576b"
+            ],
+            [
+             0.6666666666666666,
+             "#ed7953"
+            ],
+            [
+             0.7777777777777778,
+             "#fb9f3a"
+            ],
+            [
+             0.8888888888888888,
+             "#fdca26"
+            ],
+            [
+             1,
+             "#f0f921"
+            ]
+           ],
+           "sequentialminus": [
+            [
+             0,
+             "#0d0887"
+            ],
+            [
+             0.1111111111111111,
+             "#46039f"
+            ],
+            [
+             0.2222222222222222,
+             "#7201a8"
+            ],
+            [
+             0.3333333333333333,
+             "#9c179e"
+            ],
+            [
+             0.4444444444444444,
+             "#bd3786"
+            ],
+            [
+             0.5555555555555556,
+             "#d8576b"
+            ],
+            [
+             0.6666666666666666,
+             "#ed7953"
+            ],
+            [
+             0.7777777777777778,
+             "#fb9f3a"
+            ],
+            [
+             0.8888888888888888,
+             "#fdca26"
+            ],
+            [
+             1,
+             "#f0f921"
+            ]
+           ]
+          },
+          "colorway": [
+           "#636efa",
+           "#EF553B",
+           "#00cc96",
+           "#ab63fa",
+           "#FFA15A",
+           "#19d3f3",
+           "#FF6692",
+           "#B6E880",
+           "#FF97FF",
+           "#FECB52"
+          ],
+          "font": {
+           "color": "#2a3f5f"
+          },
+          "geo": {
+           "bgcolor": "white",
+           "lakecolor": "white",
+           "landcolor": "#E5ECF6",
+           "showlakes": true,
+           "showland": true,
+           "subunitcolor": "white"
+          },
+          "hoverlabel": {
+           "align": "left"
+          },
+          "hovermode": "closest",
+          "mapbox": {
+           "style": "light"
+          },
+          "paper_bgcolor": "white",
+          "plot_bgcolor": "#E5ECF6",
+          "polar": {
+           "angularaxis": {
+            "gridcolor": "white",
+            "linecolor": "white",
+            "ticks": ""
+           },
+           "bgcolor": "#E5ECF6",
+           "radialaxis": {
+            "gridcolor": "white",
+            "linecolor": "white",
+            "ticks": ""
+           }
+          },
+          "scene": {
+           "xaxis": {
+            "backgroundcolor": "#E5ECF6",
+            "gridcolor": "white",
+            "gridwidth": 2,
+            "linecolor": "white",
+            "showbackground": true,
+            "ticks": "",
+            "zerolinecolor": "white"
+           },
+           "yaxis": {
+            "backgroundcolor": "#E5ECF6",
+            "gridcolor": "white",
+            "gridwidth": 2,
+            "linecolor": "white",
+            "showbackground": true,
+            "ticks": "",
+            "zerolinecolor": "white"
+           },
+           "zaxis": {
+            "backgroundcolor": "#E5ECF6",
+            "gridcolor": "white",
+            "gridwidth": 2,
+            "linecolor": "white",
+            "showbackground": true,
+            "ticks": "",
+            "zerolinecolor": "white"
+           }
+          },
+          "shapedefaults": {
+           "line": {
+            "color": "#2a3f5f"
+           }
+          },
+          "ternary": {
+           "aaxis": {
+            "gridcolor": "white",
+            "linecolor": "white",
+            "ticks": ""
+           },
+           "baxis": {
+            "gridcolor": "white",
+            "linecolor": "white",
+            "ticks": ""
+           },
+           "bgcolor": "#E5ECF6",
+           "caxis": {
+            "gridcolor": "white",
+            "linecolor": "white",
+            "ticks": ""
+           }
+          },
+          "title": {
+           "x": 0.05
+          },
+          "xaxis": {
+           "automargin": true,
+           "gridcolor": "white",
+           "linecolor": "white",
+           "ticks": "",
+           "title": {
+            "standoff": 15
+           },
+           "zerolinecolor": "white",
+           "zerolinewidth": 2
+          },
+          "yaxis": {
+           "automargin": true,
+           "gridcolor": "white",
+           "linecolor": "white",
+           "ticks": "",
+           "title": {
+            "standoff": 15
+           },
+           "zerolinecolor": "white",
+           "zerolinewidth": 2
+          }
+         }
+        },
+        "width": 1300,
+        "xaxis": {
+         "anchor": "y",
+         "domain": [
+          0,
+          0.26
+         ],
+         "title": {
+          "text": "CPU frequencies (GHz)"
+         }
+        },
+        "xaxis2": {
+         "anchor": "y2",
+         "domain": [
+          0.37,
+          0.63
+         ],
+         "title": {
+          "text": "CPU frequencies (GHz)"
+         }
+        },
+        "xaxis3": {
+         "anchor": "y3",
+         "domain": [
+          0.74,
+          1
+         ],
+         "title": {
+          "text": "CPU frequencies (GHz)"
+         }
+        },
+        "xaxis4": {
+         "anchor": "y4",
+         "domain": [
+          0,
+          0.26
+         ],
+         "title": {
+          "text": "CPU frequencies (GHz)"
+         }
+        },
+        "xaxis5": {
+         "anchor": "y5",
+         "domain": [
+          0.37,
+          0.63
+         ],
+         "title": {
+          "text": "CPU frequencies (GHz)"
+         }
+        },
+        "xaxis6": {
+         "anchor": "y6",
+         "domain": [
+          0.74,
+          1
+         ],
+         "title": {
+          "text": "CPU frequencies (GHz)"
+         }
+        },
+        "yaxis": {
+         "anchor": "x",
+         "domain": [
+          0.6000000000000001,
+          1
+         ],
+         "range": [
+          0,
+          0.7488799899816514
+         ],
+         "title": {
+          "text": "Accuracy"
+         }
+        },
+        "yaxis2": {
+         "anchor": "x2",
+         "domain": [
+          0.6000000000000001,
+          1
+         ],
+         "range": [
+          0,
+          2757.9438299536705
+         ],
+         "title": {
+          "text": "Time (s)"
+         }
+        },
+        "yaxis3": {
+         "anchor": "x3",
+         "domain": [
+          0.6000000000000001,
+          1
+         ],
+         "range": [
+          0,
+          139.67890141899963
+         ],
+         "title": {
+          "text": "Power (W) - Kwollect"
+         }
+        },
+        "yaxis4": {
+         "anchor": "x4",
+         "domain": [
+          0,
+          0.4
+         ],
+         "range": [
+          0,
+          287864.8672880943
+         ],
+         "title": {
+          "text": "Energy (J) - Kwollect"
+         }
+        },
+        "yaxis5": {
+         "anchor": "x5",
+         "domain": [
+          0,
+          0.4
+         ],
+         "range": [
+          0,
+          56006.08672593
+         ],
+         "title": {
+          "text": "Energy (J) - MojitO/S"
+         }
+        },
+        "yaxis6": {
+         "anchor": "x6",
+         "domain": [
+          0,
+          0.4
+         ],
+         "range": [
+          0,
+          0.2478836357203034
+         ],
+         "title": {
+          "text": "CO<sub>2</sub> (gram)"
+         }
+        }
+       }
+      }
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    }
+   ],
+   "source": [
+    "import plotly.graph_objects as go\n",
+    "import plotly.express as px\n",
+    "from plotly.subplots import make_subplots\n",
+    "import numpy as np\n",
+    "import pandas as pd\n",
+    "from scipy.stats import norm\n",
+    "\n",
+    "# Function to calculate confidence interval\n",
+    "def calculate_ci(mean, std, n):\n",
+    "    confidence = 0.95  # % confidence interval\n",
+    "    tail_probability = (1 - confidence) / 2\n",
+    "    z_score = -1 * np.abs(norm.ppf(tail_probability))\n",
+    "    ci = z_score * (std / np.sqrt(n))\n",
+    "    return ci\n",
+    "\n",
+    "# Create a copy of df_grouped for plotting (may in future use df_grouped for other purposes)\n",
+    "df_plot = df_grouped.copy()\n",
+    "\n",
+    "# Calculate confidence intervals\n",
+    "df_plot['ci_power'] = df_plot.apply(lambda row: calculate_ci(row['mean_power'], row['std_power_combined'], row['n_data_power']), axis=1)\n",
+    "df_plot['ci_mojitos'] = df_plot.apply(lambda row: calculate_ci(row['mean_mojitos'], row['std_mojitos_combined'], row['n_data_mojitos']), axis=1)\n",
+    "\n",
+    "# Convert Energy Mojitos from µJ to J\n",
+    "df_plot['mean_mojitos'] = df_plot['mean_mojitos'] / 10e6\n",
+    "df_plot['ci_mojitos'] = df_plot['ci_mojitos'] / 10e6  # cause sampling in 0.1 seconds\n",
+    "df_plot['sum_mojitos'] = df_plot['sum_mojitos'] / 10e6\n",
+    "\n",
+    "df_plot['e=p*t'] = df_plot['mean_power'] * df_plot['time']\n",
+    "\n",
+    "# Convert fmax to GHz for plotting\n",
+    "df_plot[\"fmax\"] = (df_plot[\"fmax\"].astype(int) / 1e6).astype(str)\n",
+    "\n",
+    "# Sort by fmax\n",
+    "df_plot = df_plot.sort_values(by=\"fmax\")\n",
+    "\n",
+    "# List of instances\n",
+    "instances = df_plot[\"instance\"].unique()\n",
+    "\n",
+    "# Create subplots (2 rows, 3 columns)\n",
+    "fig = make_subplots(\n",
+    "    rows=2, cols=3,\n",
+    "    subplot_titles=( \"(a)\", \"(b)\", \"(c)\", \"(d)\", \"(e)\", \"(f)\"),\n",
+    "    vertical_spacing=0.2, horizontal_spacing=0.11\n",
+    ")\n",
+    "\n",
+    "# Generate a color map for instances\n",
+    "colors = px.colors.qualitative.Set1\n",
+    "color_map = {instance: colors[i % len(colors)] for i, instance in enumerate(instances)}\n",
+    "\n",
+    "# Define custom legend names for each instance (you can customize this as needed)\n",
+    "custom_legend_names = {\n",
+    "    \"fedAvg2Clients_cifar10_epoch1\": \"FedAvgClients, CIFAR10, 1 epoch\",  # Replace these with your custom names\n",
+    "    \"fedAvg2Clients_cifar10_epoch2\": \"FedAvgClients, CIFAR10, 2 epochs\",\n",
+    "    \"fedAvg_cifar10_epoch1\": \"FedAvg, CIFAR10, 1 epoch\",\n",
+    "    \"fedAvg_cifar10_epoch2\": \"FedAvg, CIFAR10, 2 epochs\",\n",
+    "    # Add more instances as necessary\n",
+    "}\n",
+    "\n",
+    "# Plot graphs for each instance\n",
+    "for instance in instances:\n",
+    "    df_instance = df_plot[df_plot[\"instance\"] == instance]\n",
+    "    color = color_map[instance]  # Get the corresponding color for the instance\n",
+    "    \n",
+    "    # Custom name for the legend entry\n",
+    "    custom_name = custom_legend_names.get(instance, instance)  # Use custom name if available\n",
+    "\n",
+    "    # Plot Accuracy\n",
+    "    fig.add_trace(\n",
+    "        go.Scatter(\n",
+    "            x=df_instance[\"fmax\"], y=df_instance[\"e=p*t\"] * 31 / (3.6 * 10e6),\n",
+    "            mode='markers', marker=dict(color=color),\n",
+    "            name=custom_name,  # Set custom name in legend\n",
+    "            showlegend=True\n",
+    "        ),\n",
+    "        row=2, col=3\n",
+    "    )\n",
+    "    \n",
+    "    # Plot Time\n",
+    "    fig.add_trace(\n",
+    "        go.Scatter(\n",
+    "            x=df_instance[\"fmax\"], y=df_instance[\"time\"],\n",
+    "            mode='markers', marker=dict(color=color),\n",
+    "            name=custom_name,  # Set custom name in legend\n",
+    "            showlegend=False\n",
+    "        ),\n",
+    "        row=1, col=2\n",
+    "    )\n",
+    "    \n",
+    "    # Plot Mean Power with confidence intervals\n",
+    "    fig.add_trace(\n",
+    "        go.Scatter(\n",
+    "            x=df_instance[\"fmax\"], y=df_instance[\"mean_power\"],\n",
+    "            mode='markers', marker=dict(color=color),\n",
+    "            name=custom_name,  # Set custom name in legend\n",
+    "            showlegend=False\n",
+    "        ),\n",
+    "        row=1, col=3\n",
+    "    )\n",
+    "    \n",
+    "    # Plot sum Mojitos with confidence intervals\n",
+    "    fig.add_trace(\n",
+    "        go.Scatter(\n",
+    "            x=df_instance[\"fmax\"], y=df_instance[\"sum_mojitos\"],\n",
+    "            mode='markers', marker=dict(color=color),\n",
+    "            name=custom_name,  # Set custom name in legend\n",
+    "            showlegend=False\n",
+    "        ),\n",
+    "        row=2, col=2\n",
+    "    )\n",
+    "    \n",
+    "    fig.add_trace(\n",
+    "        go.Scatter(\n",
+    "            x=df_instance[\"fmax\"], y=df_instance[\"accuracy\"],\n",
+    "            mode='markers', marker=dict(color=color),\n",
+    "            name=custom_name,  # Set custom name in legend\n",
+    "            showlegend=False\n",
+    "        ),\n",
+    "        row=1, col=1\n",
+    "    )\n",
+    "\n",
+    "    fig.add_trace(\n",
+    "        go.Scatter(\n",
+    "            x=df_instance[\"fmax\"], y=df_instance[\"e=p*t\"],\n",
+    "            mode='markers', marker=dict(color=color),\n",
+    "            name=custom_name,  # Set custom name in legend\n",
+    "            showlegend=False\n",
+    "        ),\n",
+    "        row=2, col=1\n",
+    "    )\n",
+    "\n",
+    "# Update layout\n",
+    "fig.update_layout(\n",
+    "    showlegend=True,\n",
+    "    height=800,\n",
+    "    font=dict(size=18),  # Title font size\n",
+    "    width=1300,\n",
+    "    legend=dict(\n",
+    "        font=dict(size=22), \n",
+    "        orientation=\"h\",  # Make the legend horizontal\n",
+    "        x=0.5,  # Center the legend horizontally\n",
+    "        y=-0.3,  # Move the legend below the plot (adjust as needed)\n",
+    "        xanchor=\"center\",  # Anchor the x-position in the center\n",
+    "        yanchor=\"bottom\"  # Anchor the y-position at the bottom\n",
+    "    )\n",
+    ")\n",
+    "\n",
+    "# Update axis titles for individual subplots\n",
+    "fig.update_xaxes(title_text=\"CPU frequencies (GHz)\", row=2, col=3)\n",
+    "fig.update_yaxes(title_text=\"CO<sub>2</sub> (gram)\", row=2, col=3)\n",
+    "\n",
+    "fig.update_xaxes(title_text=\"CPU frequencies (GHz)\", row=1, col=2)\n",
+    "fig.update_yaxes(title_text=\"Time (s)\", row=1, col=2)\n",
+    "\n",
+    "fig.update_xaxes(title_text=\"CPU frequencies (GHz)\", row=1, col=3)\n",
+    "fig.update_yaxes(title_text=\"Power (W) - Kwollect\", row=1, col=3)\n",
+    "\n",
+    "fig.update_xaxes(title_text=\"CPU frequencies (GHz)\", row=2, col=2)\n",
+    "fig.update_yaxes(title_text=\"Energy (J) - MojitO/S\", row=2, col=2)\n",
+    "\n",
+    "fig.update_xaxes(title_text=\"CPU frequencies (GHz)\", row=1, col=1)\n",
+    "fig.update_yaxes(title_text=\"Accuracy\", row=1, col=1)\n",
+    "\n",
+    "fig.update_xaxes(title_text=\"CPU frequencies (GHz)\", row=2, col=1)\n",
+    "fig.update_yaxes(title_text=\"Energy (J) - Kwollect\", row=2, col=1)\n",
+    "\n",
+    "# Adjust y-axes limits and labels\n",
+    "for i in range(1, 3):  # 2 rows\n",
+    "    for j in range(1, 4):  # 3 columns\n",
+    "        subplot_index = (i - 1) * 3 + j\n",
+    "        yaxis_name = \"y\" if subplot_index == 1 else f\"y{subplot_index}\"\n",
+    "\n",
+    "        # Get y data for this subplot\n",
+    "        traces = [trace for trace in fig.data if trace.yaxis == yaxis_name]\n",
+    "        y_values = [point for trace in traces if trace.y is not None for point in trace.y]\n",
+    "\n",
+    "        if y_values:  \n",
+    "            y_max = max(y_values)\n",
+    "            y_max_with_padding = y_max * 1.1  \n",
+    "            fig.update_layout(**{f\"yaxis{subplot_index if subplot_index > 1 else ''}\": dict(range=[0, y_max_with_padding])})\n",
+    "\n",
+    "# Increase font size for subplot titles\n",
+    "for annotation in fig['layout']['annotations']:\n",
+    "    annotation['font'] = dict(size=22)  # Increase font size\n",
+    "\n",
+    "# Show the plot\n",
+    "fig.show()\n",
+    "fig.write_image(\"energy_plot.pdf\")\n"
+   ]
+  }
+ ],
+ "metadata": {
+  "kernelspec": {
+   "display_name": "usr",
+   "language": "python",
+   "name": "python3"
+  },
+  "language_info": {
+   "codemirror_mode": {
+    "name": "ipython",
+    "version": 3
+   },
+   "file_extension": ".py",
+   "mimetype": "text/x-python",
+   "name": "python",
+   "nbconvert_exporter": "python",
+   "pygments_lexer": "ipython3",
+   "version": "3.10.12"
+  }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
diff --git a/Data_analysis.zip b/Data_analysis.zip
new file mode 100644
index 0000000000000000000000000000000000000000..ce8490455c2a8be7e51039669de70f6f005768ab
Binary files /dev/null and b/Data_analysis.zip differ
diff --git a/Log.zip b/Log.zip
new file mode 100644
index 0000000000000000000000000000000000000000..40932367e29357af9d76e4c47196b12c2998a987
Binary files /dev/null and b/Log.zip differ
diff --git a/README.md b/README.md
index ddf31b99638a07334b13e7347bf72678e9f7eab5..fdff77ee3aabd9afc24734c72db0af9ce0266c4e 100644
--- a/README.md
+++ b/README.md
@@ -1,93 +1,116 @@
 # FedEator_Results_analysis
 
+Unzip the folders: 
+```bash
+unzip Log.zip #original data
+unzip Data_analysis.zip #processed data (output from all steps follow)
+```
 
+All results of experiment are stored in `/Log/Flower_campaign`.
 
-## Getting started
-
-To make it easy for you to get started with GitLab, here's a list of recommended next steps.
-
-Already a pro? Just edit this README.md and make it your own. Want to make it easy? [Use the template at the bottom](#editing-this-readme)!
-
-## Add your files
+`/Data_analysis` will store the output of all data analysis steps.
 
-- [ ] [Create](https://docs.gitlab.com/ee/user/project/repository/web_editor.html#create-a-file) or [upload](https://docs.gitlab.com/ee/user/project/repository/web_editor.html#upload-a-file) files
-- [ ] [Add files using the command line](https://docs.gitlab.com/ee/gitlab-basics/add-file.html#add-a-file-using-the-command-line) or push an existing Git repository with the following command:
+## Data Analysis Steps
 
+### 0. **Process Mojitos Folder:**
+   - Calculate `sum_package_dram` for each timestamp in the Mojitos folder.
+   - Command to reproduce:
+```bash
+python3 0_mojitos.py --dir <path_to_instance_folder>
 ```
-cd existing_repo
-git remote add origin https://gitlab.irit.fr/sepia-pub/delight/fedeator_results_analysis.git
-git branch -M main
-git push -uf origin main
+```bash
+python3 0_mojitos.py --dir Log/Flower_campaign/Flower_instance_fedAvg_cifar10_epoch1
+python3 0_mojitos.py --dir Log/Flower_campaign/Flower_instance_fedAvg_cifar10_epoch2
+python3 0_mojitos.py --dir Log/Flower_campaign/Flower_instance_fedAvg2Clients_cifar10_epoch2
+python3 0_mojitos.py --dir Log/Flower_campaign/Flower_instance_fedAvg2Clients_cifar10_epoch1
 ```
 
-## Integrate with your tools
-
-- [ ] [Set up project integrations](https://gitlab.irit.fr/sepia-pub/delight/fedeator_results_analysis/-/settings/integrations)
-
-## Collaborate with your team
-
-- [ ] [Invite team members and collaborators](https://docs.gitlab.com/ee/user/project/members/)
-- [ ] [Create a new merge request](https://docs.gitlab.com/ee/user/project/merge_requests/creating_merge_requests.html)
-- [ ] [Automatically close issues from merge requests](https://docs.gitlab.com/ee/user/project/issues/managing_issues.html#closing-issues-automatically)
-- [ ] [Enable merge request approvals](https://docs.gitlab.com/ee/user/project/merge_requests/approvals/)
-- [ ] [Set auto-merge](https://docs.gitlab.com/ee/user/project/merge_requests/merge_when_pipeline_succeeds.html)
-
-## Test and Deploy
-
-Use the built-in continuous integration in GitLab.
-
-- [ ] [Get started with GitLab CI/CD](https://docs.gitlab.com/ee/ci/quick_start/index.html)
-- [ ] [Analyze your code for known vulnerabilities with Static Application Security Testing (SAST)](https://docs.gitlab.com/ee/user/application_security/sast/)
-- [ ] [Deploy to Kubernetes, Amazon EC2, or Amazon ECS using Auto Deploy](https://docs.gitlab.com/ee/topics/autodevops/requirements.html)
-- [ ] [Use pull-based deployments for improved Kubernetes management](https://docs.gitlab.com/ee/user/clusters/agent/)
-- [ ] [Set up protected environments](https://docs.gitlab.com/ee/ci/environments/protected_environments.html)
-
-***
-
-# Editing this README
-
-When you're ready to make this README your own, just edit this file and use the handy template below (or feel free to structure it however you want - this is just a starting point!). Thanks to [makeareadme.com](https://www.makeareadme.com/) for this template.
-
-## Suggestions for a good README
-
-Every project is different, so consider which of these sections apply to yours. The sections used in the template are suggestions for most open source projects. Also keep in mind that while a README can be too long and detailed, too long is better than too short. If you think your README is too long, consider utilizing another form of documentation rather than cutting out information.
-
-## Name
-Choose a self-explaining name for your project.
-
-## Description
-Let people know what your project can do specifically. Provide context and add a link to any reference visitors might be unfamiliar with. A list of Features or a Background subsection can also be added here. If there are alternatives to your project, this is a good place to list differentiating factors.
 
-## Badges
-On some READMEs, you may see small images that convey metadata, such as whether or not all the tests are passing for the project. You can use Shields to add some to your README. Many services also have instructions for adding a badge.
+### 1. **Analyze Processed Mojitos Folder:**
+   - Calculate required statistics (e.g., standard deviation, sum, mean) on the processed Mojitos data.
+   - Command to reproduce:
 
-## Visuals
-Depending on what you are making, it can be a good idea to include screenshots or even a video (you'll frequently see GIFs rather than actual videos). Tools like ttygif can help, but check out Asciinema for a more sophisticated method.
-
-## Installation
-Within a particular ecosystem, there may be a common way of installing things, such as using Yarn, NuGet, or Homebrew. However, consider the possibility that whoever is reading your README is a novice and would like more guidance. Listing specific steps helps remove ambiguity and gets people to using your project as quickly as possible. If it only runs in a specific context like a particular programming language version or operating system or has dependencies that have to be installed manually, also add a Requirements subsection.
-
-## Usage
-Use examples liberally, and show the expected output if you can. It's helpful to have inline the smallest example of usage that you can demonstrate, while providing links to more sophisticated examples if they are too long to reasonably include in the README.
+```bash
+python3 1_mojitos_ana.py --dir <path_to_instance_folder>
+```
+```bash
+python3 1_mojitos_ana.py --dir Log/Flower_campaign/Flower_instance_fedAvg_cifar10_epoch1
+python3 1_mojitos_ana.py --dir Log/Flower_campaign/Flower_instance_fedAvg_cifar10_epoch2
+python3 1_mojitos_ana.py --dir Log/Flower_campaign/Flower_instance_fedAvg2Clients_cifar10_epoch2
+python3 1_mojitos_ana.py --dir Log/Flower_campaign/Flower_instance_fedAvg2Clients_cifar10_epoch1
+```
 
-## Support
-Tell people where they can go to for help. It can be any combination of an issue tracker, a chat room, an email address, etc.
+### 2. **Analyze Power Data:**
+   - Calculate statistics (e.g., standard deviation, sum, mean) on the power data.
+   - Command to reproduce:
+```bash
+python3 2_power_ana.py --dir <path_to_instance_folder>
+```
+```bash
+python3 2_power_ana.py --dir Log/Flower_campaign/Flower_instance_fedAvg_cifar10_epoch1
+python3 2_power_ana.py --dir Log/Flower_campaign/Flower_instance_fedAvg_cifar10_epoch2
+python3 2_power_ana.py --dir Log/Flower_campaign/Flower_instance_fedAvg2Clients_cifar10_epoch2
+python3 2_power_ana.py --dir Log/Flower_campaign/Flower_instance_fedAvg2Clients_cifar10_epoch1
+```
 
-## Roadmap
-If you have ideas for releases in the future, it is a good idea to list them in the README.
+### 3. **Combine Mojitos and Power Data:**
+   - Combine the outputs from steps 1 and 2 (Mojitos and Power processed data).
+   - Command to reproduce:
+```bash
+python3 3_mean_energy.py --power <power_file_processed> --mojitos <mojitos_file_processed>
+```
+```bash
+python3 3_mean_energy.py --power Data_analysis/Output_level_1/merged_power_Flower_campaign_Flower_instance_fedAvg_cifar10_epoch1.csv --mojitos Data_analysis/Output_level_1/merged_mojitos_Flower_campaign_Flower_instance_fedAvg_cifar10_epoch1.csv
+python3 3_mean_energy.py --power Data_analysis/Output_level_1/merged_power_Flower_campaign_Flower_instance_fedAvg_cifar10_epoch2.csv --mojitos Data_analysis/Output_level_1/merged_mojitos_Flower_campaign_Flower_instance_fedAvg_cifar10_epoch2.csv
+python3 3_mean_energy.py --power Data_analysis/Output_level_1/merged_power_Flower_campaign_Flower_instance_fedAvg2Clients_cifar10_epoch2.csv --mojitos Data_analysis/Output_level_1/merged_mojitos_Flower_campaign_Flower_instance_fedAvg2Clients_cifar10_epoch2.csv
+python3 3_mean_energy.py --power Data_analysis/Output_level_1/merged_power_Flower_campaign_Flower_instance_fedAvg2Clients_cifar10_epoch1.csv --mojitos Data_analysis/Output_level_1/merged_mojitos_Flower_campaign_Flower_instance_fedAvg2Clients_cifar10_epoch1.csv
+```
 
-## Contributing
-State if you are open to contributions and what your requirements are for accepting them.
+### 4. **Analyze Flower Performance Data:**
+   - Process the performance data (accuracy, time).
+   - Command to reproduce:
+```bash
+python3 4_performance_ana.py --dir <path_to_instance_folder>
+```
+```bash
+python3 4_flower_ana.py --dir Log/Flower_campaign/Flower_instance_fedAvg_cifar10_epoch1
+python3 4_flower_ana.py --dir Log/Flower_campaign/Flower_instance_fedAvg2Clients_cifar10_epoch1
+python3 4_flower_ana.py --dir Log/Flower_campaign/Flower_instance_fedAvg2Clients_cifar10_epoch2
+python3 4_flower_ana.py --dir Log/Flower_campaign/Flower_instance_fedAvg_cifar10_epoch2
+```
 
-For people who want to make changes to your project, it's helpful to have some documentation on how to get started. Perhaps there is a script that they should run or some environment variables that they need to set. Make these steps explicit. These instructions could also be useful to your future self.
+### 5. **Combine Energy/Power and Performance Data:**
+   - Combine the Energy/Power data with performance data.
+   - Command to reproduce:
+```bash
+python3 5_combine_energy_fl.py -a <accuracy_time_file> -e <energy_file> -m <metadata_file>
+```
+```bash
+python3 5_combine_energy_fl.py -a Data_analysis/Output_level_2/flower_fedAvg2Clients_cifar10_epoch2_accuracy_time.csv -e /home/hdomai/Documents/RepoLab/Data/Data_analysis/Output_level_2/mean_energy_Flower_campaign_Flower_instance_fedAvg2Clients_cifar10_epoch2.csv -m Log/Flower_campaign/Flower_instance_fedAvg2Clients_cifar10_epoch2/Expetator_taurus-1.lyon.grid5000.fr_1740614797
+python3 5_combine_energy_fl.py -a Data_analysis/Output_level_2/flower_fedAvg_cifar10_epoch2_accuracy_time.csv -e /home/hdomai/Documents/RepoLab/Data/Data_analysis/Output_level_2/mean_energy_Flower_campaign_Flower_instance_fedAvg_cifar10_epoch2.csv -m Log/Flower_campaign/Flower_instance_fedAvg_cifar10_epoch2/Expetator_taurus-1.lyon.grid5000.fr_1740599416
+python3 5_combine_energy_fl.py -a Data_analysis/Output_level_2/flower_fedAvg2Clients_cifar10_epoch1_accuracy_time.csv -e Data_analysis/Output_level_2/mean_energy_Flower_campaign_Flower_instance_fedAvg2Clients_cifar10_epoch1.csv -m Log/Flower_campaign/Flower_instance_fedAvg2Clients_cifar10_epoch1/Expetator_taurus-1.lyon.grid5000.fr_1740657011
+python3 5_combine_energy_fl.py -a Data_analysis/Output_level_2/flower_fedAvg_cifar10_epoch1_accuracy_time.csv -e Data_analysis/Output_level_2/mean_energy_Flower_campaign_Flower_instance_fedAvg_cifar10_epoch1.csv -m Log/Flower_campaign/Flower_instance_fedAvg_cifar10_epoch1/Expetator_taurus-1.lyon.grid5000.fr_1740648134
+```
 
-You can also document commands to lint the code or run tests. These steps help to ensure high code quality and reduce the likelihood that the changes inadvertently break something. Having instructions for running tests is especially helpful if it requires external setup, such as starting a Selenium server for testing in a browser.
+### 6. **Compile All Instances into One Campaign File:**
+   - Gather all the combined instance files into one campaign file.
+   - Command to reproduce:
+```bash
+python3 6_final.py -f <combined_file_1> <combined_file_n> -c <str_of_campaign_name>
+```
+```bash
+python3 6_final.py -f Data_analysis/Output_level_3/combine_Flower_campaign_Flower_instance_fedAvg_cifar10_epoch1.csv Data_analysis/Output_level_3/combine_Flower_campaign_Flower_instance_fedAvg_cifar10_epoch2.csv Data_analysis/Output_level_3/combine_Flower_campaign_Flower_instance_fedAvg2Clients_cifar10_epoch1.csv Data_analysis/Output_level_3/combine_Flower_campaign_Flower_instance_fedAvg2Clients_cifar10_epoch2.csv -c Flower_full_campaign
+```
 
-## Authors and acknowledgment
-Show your appreciation to those who have contributed to the project.
+### 7. **Plot the Data (Visualization):**
+   - Visualize the combined campaign data using the Jupyter notebook.
+   - Open `7_PLOT.ipynb` and provide the path to the campaign file:
+```python
+file = '<path_to_campaign_file>'
+```
+```bash
+file = 'Data_analysis/Output_level_4/combine_Flower_full_campaign.csv'
+```
 
-## License
-For open source projects, say how it is licensed.
+![here is visualization](fedeator_results_analysis/energy_plot.pdf)
 
-## Project status
-If you have run out of energy or time for your project, put a note at the top of the README saying that development has slowed down or stopped completely. Someone may choose to fork your project or volunteer to step in as a maintainer or owner, allowing your project to keep going. You can also make an explicit request for maintainers.
diff --git a/energy_plot.pdf b/energy_plot.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..efd4ed88132a2963c5f56e36328fecdb6a7e9a61
Binary files /dev/null and b/energy_plot.pdf differ