Face_Detection / demo_simulated.py
roseyshi's picture
Upload 16 files
6f2dcbc verified
Raw
History Blame Contribute Delete
3.31 kB
# 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'")