You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
49 lines
1.2 KiB
Python
49 lines
1.2 KiB
Python
|
|
|
|
# src/transformers/sensor_data.py
|
|
from typing import Dict, Any
|
|
import pandas as pd
|
|
import numpy as np
|
|
from datetime import datetime
|
|
from uuid import UUID, uuid4
|
|
from config import config
|
|
|
|
|
|
class WoDataTransformer:
|
|
def transform(self, df: pd.DataFrame) -> pd.DataFrame:
|
|
"""
|
|
Transform sensor data according to business rules
|
|
"""
|
|
# Create a copy to avoid modifying original data
|
|
transformed = df.copy()
|
|
|
|
# 1. Add UUID
|
|
transformed['id'] = uuid4()
|
|
|
|
# # 5. Drop unnecessary columns
|
|
# columns_to_drop = self.config.get('columns_to_drop', [])
|
|
# if columns_to_drop:
|
|
# transformed = transformed.drop(columns=columns_to_drop, errors='ignore')
|
|
|
|
return transformed
|
|
|
|
def validate(self, df: pd.DataFrame) -> bool:
|
|
"""
|
|
Validate transformed data
|
|
"""
|
|
if df.empty:
|
|
return False
|
|
|
|
# Check required columns
|
|
if not all(col in df.columns for col in config.get('columns')):
|
|
return False
|
|
|
|
# check id column and id is UUID
|
|
if 'id' not in df.columns:
|
|
return False
|
|
|
|
if not all(isinstance(val, UUID) for val in df['id']):
|
|
return False
|
|
|
|
return True
|