import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from datetime import datetime, timedelta
# Set random seed for reproducibility
np.random.seed(2025)
# Generate nurse data
def generate_nurse_data():
nurses = []
# ED Specialists (4 nurses) - only work in ED
for i in range(1, 5):
nurses.append({
'nurse_id': i,
'name': f'Nurse ED-{i}',
'department': 'ED',
'departments_qualified': ['ED'],
'nurse_type': 'Specialist',
'skill_level': np.random.choice(['Junior', 'Senior', 'Senior', 'Expert'], p=[0.2, 0.5, 0.2, 0.1]),
'experience_years': np.random.randint(1, 15),
'can_work_night': np.random.choice([True, True, False], p=[0.6, 0.3, 0.1]),
'weekend_days_worked_this_month': np.random.randint(0, 3)
})
# Med-Surg Specialists (5 nurses) - only work in Med-Surg
for i in range(5, 10):
nurses.append({
'nurse_id': i,
'name': f'Nurse MS-{i-4}',
'department': 'Med-Surg',
'departments_qualified': ['Med-Surg'],
'nurse_type': 'Specialist',
'skill_level': np.random.choice(['Junior', 'Senior', 'Senior'], p=[0.3, 0.5, 0.2]),
'experience_years': np.random.randint(1, 12),
'can_work_night': np.random.choice([True, True, False], p=[0.7, 0.2, 0.1]),
'weekend_days_worked_this_month': np.random.randint(0, 3)
})
# ICU Specialists (4 nurses) - only work in ICU
for i in range(10, 14):
nurses.append({
'nurse_id': i,
'name': f'Nurse ICU-{i-9}',
'department': 'ICU',
'departments_qualified': ['ICU'],
'nurse_type': 'Specialist',
'skill_level': np.random.choice(['Senior', 'Expert', 'Expert'], p=[0.4, 0.4, 0.2]),
'experience_years': np.random.randint(3, 20),
'can_work_night': True, # ICU nurses must be able to work nights
'weekend_days_worked_this_month': np.random.randint(0, 3)
})
# Flexible Float Pool (7 nurses) - can work in ANY department
for i in range(14, 21):
nurses.append({
'nurse_id': i,
'name': f'Nurse FLOAT-{i-13}',
'department': 'Float',
'departments_qualified': ['ED', 'Med-Surg', 'ICU'],
'nurse_type': 'Flexible',
'skill_level': np.random.choice(['Junior', 'Senior', 'Senior', 'Expert'], p=[0.15, 0.5, 0.25, 0.1]),
'experience_years': np.random.randint(2, 15),
'can_work_night': np.random.choice([True, True, True, False], p=[0.75, 0.15, 0.05, 0.05]), # Most can work nights
'weekend_days_worked_this_month': np.random.randint(0, 3)
})
return pd.DataFrame(nurses)
nurses_df = generate_nurse_data()
print("NURSENEXT HOSPITAL - NURSE ROSTER")
print("=" * 100)
print(nurses_df.to_string(index=False))
print("\n" + "=" * 100)
print(f"Total nurses: {len(nurses_df)}")
print(f"\nBy type:")
print(f" Specialists: {len(nurses_df[nurses_df['nurse_type']=='Specialist'])} nurses")
print(f" - ED: {len(nurses_df[nurses_df['department']=='ED'])} nurses")
print(f" - Med-Surg: {len(nurses_df[nurses_df['department']=='Med-Surg'])} nurses")
print(f" - ICU: {len(nurses_df[nurses_df['department']=='ICU'])} nurses")
print(f" Flexible (Float Pool): {len(nurses_df[nurses_df['nurse_type']=='Flexible'])} nurses (can work any department)")
print(f"\nBy skill level: Junior={len(nurses_df[nurses_df['skill_level']=='Junior'])}, "
f"Senior={len(nurses_df[nurses_df['skill_level']=='Senior'])}, "
f"Expert={len(nurses_df[nurses_df['skill_level']=='Expert'])}")NURSENEXT HOSPITAL - NURSE ROSTER
====================================================================================================
nurse_id name department departments_qualified nurse_type skill_level experience_years can_work_night weekend_days_worked_this_month
1 Nurse ED-1 ED [ED] Specialist Junior 3 True 0
2 Nurse ED-2 ED [ED] Specialist Senior 13 False 0
3 Nurse ED-3 ED [ED] Specialist Senior 2 False 1
4 Nurse ED-4 ED [ED] Specialist Senior 1 True 0
5 Nurse MS-1 Med-Surg [Med-Surg] Specialist Senior 1 True 1
6 Nurse MS-2 Med-Surg [Med-Surg] Specialist Senior 2 True 1
7 Nurse MS-3 Med-Surg [Med-Surg] Specialist Junior 10 False 0
8 Nurse MS-4 Med-Surg [Med-Surg] Specialist Senior 6 False 0
9 Nurse MS-5 Med-Surg [Med-Surg] Specialist Senior 10 True 0
10 Nurse ICU-1 ICU [ICU] Specialist Senior 8 True 2
11 Nurse ICU-2 ICU [ICU] Specialist Expert 10 True 2
12 Nurse ICU-3 ICU [ICU] Specialist Expert 18 True 2
13 Nurse ICU-4 ICU [ICU] Specialist Expert 18 True 1
14 Nurse FLOAT-1 Float [ED, Med-Surg, ICU] Flexible Senior 4 True 2
15 Nurse FLOAT-2 Float [ED, Med-Surg, ICU] Flexible Senior 2 True 0
16 Nurse FLOAT-3 Float [ED, Med-Surg, ICU] Flexible Expert 8 True 0
17 Nurse FLOAT-4 Float [ED, Med-Surg, ICU] Flexible Senior 5 True 2
18 Nurse FLOAT-5 Float [ED, Med-Surg, ICU] Flexible Senior 2 True 1
19 Nurse FLOAT-6 Float [ED, Med-Surg, ICU] Flexible Expert 11 True 0
20 Nurse FLOAT-7 Float [ED, Med-Surg, ICU] Flexible Senior 8 True 1
====================================================================================================
Total nurses: 20
By type:
Specialists: 13 nurses
- ED: 4 nurses
- Med-Surg: 5 nurses
- ICU: 4 nurses
Flexible (Float Pool): 7 nurses (can work any department)
By skill level: Junior=2, Senior=13, Expert=5