diff --git a/visualizer/visualizer/DataFrameCreator.py b/visualizer/visualizer/DataFrameCreator.py index 5815510c91e9c739aeda8daee44ee54321cde60e..7f343098eabe64981ebac5182d91d41eb419c6cc 100644 --- a/visualizer/visualizer/DataFrameCreator.py +++ b/visualizer/visualizer/DataFrameCreator.py @@ -1,5 +1,6 @@ import os import pandas as pd +import re class DataFrameCreator: @@ -7,6 +8,7 @@ class DataFrameCreator: self.folder_path = f_path self.v_dfs = {} self.l_dfs = {} + self.s_dfs = {} @staticmethod def _merge_dataframes(dfs): @@ -26,12 +28,29 @@ class DataFrameCreator: dataframe = pd.read_csv(file_path, delimiter=" ", header=0) return dataframe, dataframe_type, dataframe_name + @staticmethod + def _extract_statistics(data, filename): + result = {} + group = re.search(r"(.*):", data).group(1) + result["Group"] = group + + values = re.findall(r"\d+\.\d+", data) + result["min"] = float(values[0]) + result["mean"] = float(values[1]) + result["10%"] = float(values[2]) + result["med"] = float(values[3]) + result["90%"] = float(values[4]) + result["max"] = float(values[5]) + result["speed"] = float(values[6]) + + return result + def read_various_data(self, root, filename): dataframe, dataframe_type, dataframe_name = self._set_dataframe(root, filename) if dataframe_type in self.v_dfs: inner_dict = self.v_dfs[dataframe_type] if dataframe_name in inner_dict: - # DataFrame hinzufügen + # Add Dataframe inner_dict[dataframe_name] = pd.concat([inner_dict[dataframe_name], dataframe], ignore_index=True) else: @@ -41,9 +60,38 @@ class DataFrameCreator: dataframe_name: dataframe } + def read_statistic_data(self, root, filename): + if filename.endswith('.dat'): + data_list = [] + path = os.path.join(root, filename) + with open(path, "r") as file: + lines = file.readlines() + for line in lines: + data = line.strip() + if data.startswith("worker") or data.startswith("posix"): + data_dict = self._extract_statistics(data, filename) + data_list.append(data_dict) + + dataframe = pd.DataFrame(data_list) + dataframe_type = filename + dataframe_name = filename.split('.')[0] # Verwende den Dateinamen ohne Erweiterung als DataFrame-Namen + + if dataframe_type in self.s_dfs: + inner_dict = self.s_dfs[dataframe_type] + if dataframe_name in inner_dict: + # Add DataFrame + inner_dict[dataframe_name] = pd.concat([inner_dict[dataframe_name], dataframe], + ignore_index=True) + else: + inner_dict[dataframe_name] = dataframe + else: + self.s_dfs[dataframe_type] = { + dataframe_name: dataframe + } + def read_long_data(self, root, filename): dataframe, dataframe_type, dataframe_name = self._set_dataframe(root, filename) - # Berechnung der Zeitdifferenz in Sekunden ab dem ersten Wert + # Calculation of time difference in seconds from the first value if not dataframe.empty: dataframe['start'] = pd.to_datetime(dataframe['start'], unit='s') start_time = dataframe['start'].iloc[0] @@ -52,7 +100,7 @@ class DataFrameCreator: if dataframe_type in self.l_dfs: inner_dict = self.l_dfs[dataframe_type] if dataframe_name in inner_dict: - # DataFrame hinzufügen + # Add Dataframe inner_dict[dataframe_name] = pd.concat([inner_dict[dataframe_name], dataframe], ignore_index=True) else: @@ -66,8 +114,7 @@ class DataFrameCreator: for root, _, folder in os.walk(self.folder_path): if os.path.basename(root) == "statistics": for filename in folder: - print("this was statistic" + filename) - continue + self.read_statistic_data(root, filename) elif os.path.basename(root) == "Data_Set_Long": for filename in folder: self.read_long_data(root, filename) @@ -77,4 +124,5 @@ class DataFrameCreator: various_dfs = self._merge_dataframes(self.v_dfs) long_dfs = self._merge_dataframes(self.l_dfs) - return various_dfs, long_dfs + statistics_dfs = self._merge_dataframes(self.s_dfs) + return various_dfs, long_dfs, statistics_dfs diff --git a/visualizer/visualizer/SeabornPlotter.py b/visualizer/visualizer/SeabornPlotter.py index 940c0a0ef572d2785c3ccb4cefa3801ed1cf7a94..f91b0a2f7de68765dbd3a8fef15b1a6c2d450b26 100644 --- a/visualizer/visualizer/SeabornPlotter.py +++ b/visualizer/visualizer/SeabornPlotter.py @@ -66,3 +66,15 @@ class SeabornPlotter: plt.xticks(rotation=45) plt.savefig(title + ".svg", format='svg') plt.show() + + def plot_statistics(self): + df = self.dataframe + for frame in df + plt.figure(figsize=(10, 6)) + sns.boxplot(data=df[['min', 'mean', '10%', 'med', '90%', 'max']], palette='pastel') + plt.xlabel('Statistical Measures') + plt.ylabel('Time (Y-Axis)') + plt.title('Boxplot of Statistical Measures for Each Group') + plt.grid(True) + + plt.show() diff --git a/visualizer/visualizer/main.py b/visualizer/visualizer/main.py index 489cc2a5a3743d740eba543861506e523a780af8..d6622fcab236fdd15cfc6d09c76556603fc295f6 100644 --- a/visualizer/visualizer/main.py +++ b/visualizer/visualizer/main.py @@ -16,9 +16,13 @@ def main(): # Import Data creator = DataFrameCreator(data_path) - v_dataframes, l_dataframes = creator.create() + v_dataframes, l_dataframes, s_dataframes = creator.create() - # Plot + # Plot Statistics + s_plotter = SeabornPlotter(s_dataframes, 'statistics') + s_plotter.plot_statistics() + + # Plot Data for frame in v_dataframes.keys(): if not v_dataframes[frame].empty: # Setup Plotter