Spaces:
Build error
Build error
| # 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'") |