# demo_simulated.py - Generate realistic demo data import pandas as pd import numpy as np from datetime import datetime, timedelta import random class SimulatedDemo: """Generate simulated attendance data for dashboard demo""" def __init__(self): self.employees = self._create_employees() self.attendance_log = [] def _create_employees(self): """Create employee database""" names = [ "Alice Johnson", "Bob Smith", "Carol White", "David Brown", "Eve Davis", "Frank Wilson", "Grace Lee", "Henry Kim", "Ivy Chen", "Jack Taylor" ] employees = [] for i, name in enumerate(names, 1): employees.append({ 'id': i, 'name': name, 'department': random.choice(['Engineering', 'Sales', 'HR', 'Marketing']), 'shift_start': '09:00', 'shift_end': '18:00' }) return employees def generate_attendance(self, days=30): """Generate simulated attendance data""" end_date = datetime.now() start_date = end_date - timedelta(days=days) attendance = [] for day in range(days): current_date = start_date + timedelta(days=day) # Skip weekends if current_date.weekday() >= 5: continue for employee in self.employees: # 90% attendance rate if random.random() < 0.9: check_in = self._random_time(current_date, 8, 10) check_out = self._random_time(current_date, 17, 19) status = self._determine_status(check_in, '09:00') attendance.append({ 'employee_name': employee['name'], 'date': current_date.strftime('%Y-%m-%d'), 'check_in': check_in.strftime('%H:%M'), 'check_out': check_out.strftime('%H:%M'), 'status': status, 'department': employee['department'] }) self.attendance_log = pd.DataFrame(attendance) return self.attendance_log def _random_time(self, date, hour_start, hour_end): """Generate random time within range""" hour = random.randint(hour_start, hour_end) minute = random.randint(0, 59) return date.replace(hour=hour, minute=minute) def _determine_status(self, check_in, shift_start): """Determine attendance status""" shift_hour, shift_min = map(int, shift_start.split(':')) shift_start_time = check_in.replace(hour=shift_hour, minute=shift_min) if check_in < shift_start_time: return 'early' elif check_in <= shift_start_time + timedelta(minutes=15): return 'on_time' else: return 'late' # Generate and save demo data demo = SimulatedDemo() attendance_data = demo.generate_attendance() # Save as CSV for dashboard attendance_data.to_csv('demo_attendance_data.csv', index=False) print("✅ Demo data generated and saved to 'demo_attendance_data.csv'")