-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathgenerate_data.py
More file actions
96 lines (78 loc) · 3.86 KB
/
Copy pathgenerate_data.py
File metadata and controls
96 lines (78 loc) · 3.86 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
import csv
import random
import os
def generate_student_data(num_students_per_class=30):
"""
Generates synthetic student data mapped to existing advisors.
Data format: id, name, cgpa, marks, department, yearOfStudy, className, classAdvisorName
"""
first_names = ["John", "Jane", "Alice", "Bob", "Charlie", "Diana", "Ethan", "Fiona", "George", "Hannah",
"Ian", "Julia", "Kevin", "Laura", "Mike", "Nina", "Oliver", "Paula", "Quinn", "Rachel",
"Sam", "Tina", "Uma", "Victor", "Wendy", "Xavier", "Yara", "Zack", "Aiden", "Bella",
"Caleb", "Chloe", "Daniel", "Emily", "Finn", "Grace", "Henry", "Isabella", "Jack", "Lily"]
last_names = ["Smith", "Johnson", "Williams", "Jones", "Brown", "Davis", "Miller", "Wilson", "Moore", "Taylor",
"Anderson", "Thomas", "Jackson", "White", "Harris", "Martin", "Thompson", "Garcia", "Martinez", "Robinson",
"Clark", "Rodriguez", "Lewis", "Lee", "Walker", "Hall", "Allen", "Young", "Hernandez", "King"]
# 1. Read Advisors
advisors = []
advisor_file = 'public/advisors.csv'
if not os.path.exists(advisor_file):
# Fallback to root if not in public
advisor_file = 'advisors.csv'
with open(advisor_file, mode='r') as f:
reader = csv.DictReader(f)
for row in reader:
advisors.append(row)
# 2. Generate Students
students = []
# Prefix mapping for unique IDs
dept_prefix = {
"CSE": "CS", "ECE": "EC", "CSBS": "CB", "AIDS": "AD", "AIML": "AM",
"CS": "CO", "IT": "IT", "BME": "BM", "MCT": "MC", "MECH": "ME",
"EEE": "EE", "CVL": "CV", "VLSI": "VL", "ACT": "AC"
}
# Tracking roll numbers per year and department
roll_counters = {}
for advisor in advisors:
dept = advisor['department']
year_label = advisor['yearOfStudy']
class_name = advisor['className']
advisor_name = advisor['name']
# Batch year for ID
year_prefix = {"1st": "24", "2nd": "23", "3rd": "22", "4th": "21"}[year_label]
short_dept = dept_prefix.get(dept, "XX")
# Initialize counter if not exists
counter_key = f"{year_prefix}{short_dept}"
if counter_key not in roll_counters:
roll_counters[counter_key] = 1
for i in range(num_students_per_class):
current_roll = roll_counters[counter_key]
roll_num = str(current_roll).zfill(3)
student_id = f"{year_prefix}{short_dept}{roll_num}"
roll_counters[counter_key] += 1
name = f"{random.choice(first_names)} {random.choice(last_names)}"
# CGPA and Marks
raw_cgpa = random.gauss(7.8, 1.0)
cgpa = round(max(5.0, min(10.0, raw_cgpa)), 2)
marks_mean = (cgpa / 10.0) * 85 + 5
marks = round(max(40.0, min(100.0, random.gauss(marks_mean, 8))), 1)
students.append({
"id": student_id,
"name": name,
"cgpa": cgpa,
"marks": marks,
"department": dept,
"yearOfStudy": year_label,
"className": class_name,
"classAdvisorName": advisor_name
})
# 3. Write Output
output_files = ['frontend/public/students.csv', 'backend/data/students.csv', 'students.csv']
for out_file in output_files:
with open(out_file, mode='w', newline='') as f:
writer = csv.DictWriter(f, fieldnames=["id", "name", "cgpa", "marks", "department", "yearOfStudy", "className", "classAdvisorName"])
writer.writeheader()
writer.writerows(students)
print(f"Generated {len(students)} students across {len(advisors)} classes.")
if __name__ == "__main__":
generate_student_data(30)