| 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') |
| |
| |
| 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) |
|
|
| |
| 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() |
| |
| |
| 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) |
|
|