diff --git a/controller/controller/DataFrameCreator.py b/controller/controller/DataFrameCreator.py new file mode 100644 index 0000000000000000000000000000000000000000..1bcd4f5164b7aa9e693539a6b051b2840e5cc6e1 --- /dev/null +++ b/controller/controller/DataFrameCreator.py @@ -0,0 +1,38 @@ +import os +import pandas as pd + + +class DataFrameCreator: + def __init__(self, f_path): + self.folder_path = f_path + + def create_dataframes(self): + dfs = {} + + for root, _, files in os.walk(self.folder_path): + for filename in files: + if filename.endswith('.dat'): + file_path = os.path.join(root, filename) + dataframe_name = os.path.splitext(filename)[0] + dataframe_type = dataframe_name.split('-')[1] + dataframe = pd.read_csv(file_path, delimiter=" ", header=0) + + if dataframe_type in dfs: + inner_dict = dfs[dataframe_type] + if dataframe_name in inner_dict: + # DataFrame hinzufügen + inner_dict[dataframe_name] = pd.concat([inner_dict[dataframe_name], dataframe], ignore_index=True) + else: + inner_dict[dataframe_name] = dataframe + else: + dfs[dataframe_type] = { + dataframe_name: dataframe + } + + merged_dfs = {} + for outer_key in dfs: + merged_dataframe = pd.concat(dfs[outer_key].values(), keys=dfs[outer_key].keys()) + merged_dataframe_sorted = merged_dataframe.sort_index() + merged_dfs[outer_key] = merged_dataframe_sorted + + return merged_dfs diff --git a/controller/controller/SeabornPlotter.py b/controller/controller/SeabornPlotter.py new file mode 100644 index 0000000000000000000000000000000000000000..4fe138cd1bcb1fdc634a639ea35a674ec8f0e77a --- /dev/null +++ b/controller/controller/SeabornPlotter.py @@ -0,0 +1,31 @@ +import numpy as np +import matplotlib.pyplot as plt +import seaborn as sns + + +class SeabornPlotter: + def __init__(self, dataframe): + self.dataframe = dataframe + self.current_plot = None + + def plot(self): + df = self.dataframe + x = df['size'] + y = df['duration'] + x_start = df['size'].min() / 2 + y_start = 0.001 + x_end = df['size'].max() * 2 + y_end = df['duration'].max() + x_num_points = 100 + y_step = 0.001 + x_bins = np.logspace(np.log10(x_start), np.log10(x_end), num=x_num_points).tolist() + y_bins = [y_start + (y_step * i) for i in range(int((y_end - y_start) / y_step) + 1)] + + f, ax = plt.subplots(figsize=(16, 20)) + sns.scatterplot(x=x, y=y, s=5, color=".15", hue=list(self.dataframe.index.get_level_values(0))) + sns.histplot(x=x, y=y, bins=[x_bins, y_bins], pthresh=.1, cmap="coolwarm") + ax.set_xscale('log') + ax.set_yscale('log') + + plt.tight_layout() + plt.show() diff --git a/controller/controller/UtilityClasses.py b/controller/controller/UtilityClasses.py new file mode 100644 index 0000000000000000000000000000000000000000..5ed1dc82626c49e9d49bb0e4ffef56cb633626e2 --- /dev/null +++ b/controller/controller/UtilityClasses.py @@ -0,0 +1,7 @@ +import datetime + + +class DataConvert: + @staticmethod + def convert_unix(timestamp): + return datetime.datetime.fromtimestamp(timestamp) \ No newline at end of file diff --git a/controller/controller/main.py b/controller/controller/main.py new file mode 100644 index 0000000000000000000000000000000000000000..9ede88c1ff138a236710809fd16dd6837c9fe7ff --- /dev/null +++ b/controller/controller/main.py @@ -0,0 +1,25 @@ +import os +import numpy as np +import pandas as pd +import datetime +import matplotlib +import matplotlib.pyplot as plt +import seaborn as sns +from .SeabornPlotter import SeabornPlotter +from .DataFrameCreator import DataFrameCreator +matplotlib.use('TkAgg') + + +# --------------Main------------ +def main(): + folder_path = '/home/user/C++/detectorwritesim/output' + creator = DataFrameCreator(folder_path) + dataframes = creator.create_dataframes() + plotter = SeabornPlotter(dataframes['write']) + + # Plot erstellen + plotter.plot() + + +if __name__ == "__main__": + main()