import numpy as np import pandas as pd from pathlib import Path np.random.seed(42) epsilon = 1e-8 class Dataset: def __init__(self, inverse=False): filename = Path(__file__).resolve().parent / "Data" / "DataForThermoforming.xlsx" self.df = pd.read_excel(filename, sheet_name='CFRP') # remove rows by index # self.df = self.df.drop([20, 48], axis=0) self.df = self.df.drop([7, 78, 101, 129], axis=0) self.materials_map = {'CF/PEEK': 0, 'CF/PA6': 1} self.df['Materials'] = self.df['Materials'].map(self.materials_map) # normalize data if inverse: self.input_columns = ['Materials', 'Ply_Number', 'Fiber_Volume_Fractions', 'A1(abs)', 'B1(abs)', 'C1(abs)', 'Stress(Max) MPa'] self.output_columns = ['Initial_Temp (degree celsius)', 'Punch_Velocity (mm/s)', 'Cooling_Time (s)'] else: self.input_columns = ['Materials', 'Ply_Number', 'Fiber_Volume_Fractions', 'Initial_Temp (degree celsius)', 'Punch_Velocity (mm/s)', 'Cooling_Time (s)'] self.output_columns = ['A1(abs)', 'B1(abs)', 'C1(abs)', 'Stress(Max) MPa'] self.input_mean = self.df[self.input_columns].mean().to_numpy(dtype=np.float32) self.input_std = self.df[self.input_columns].std().to_numpy(dtype=np.float32) + epsilon self.output_mean = self.df[self.output_columns].mean().to_numpy(dtype=np.float32) self.output_std = self.df[self.output_columns].std().to_numpy(dtype=np.float32) + epsilon def get_input(self, normalize=False): data = self.df[self.input_columns].to_numpy(dtype=np.float32) if normalize: data = self.normalize_input(data) return data def get_output(self, normalize=False): data = self.df[self.output_columns].to_numpy(dtype=np.float32) if normalize: data = self.normalize_output(data) return data def __str__(self): return str(self.df.head()) def normalize_input(self, input_data): return (input_data - self.input_mean) / self.input_std def normalize_output(self, output_data): return (output_data - self.output_mean) / self.output_std def denormalize_input(self, normalized_input): return normalized_input * self.input_std + self.input_mean def denormalize_output(self, normalized_output): return normalized_output * self.output_std + self.output_mean if __name__ == "__main__": dataset = Dataset() # Example usage input_data = dataset.get_input(normalize=True) output_data = dataset.get_output(normalize=True) print("Input shape:", input_data.shape) print("Output shape:", output_data.shape)