Grade 7 analysis tool
Grade 7 analysis tool
def get_grade_color(grade):
"""
Assign colors to different grades.
Args:
grade (str): Grade of the student
Returns:
PatternFill: Color fill for the grade
"""
grade_colors = {
'ONE': PatternFill(start_color='00FF00', end_color='00FF00',
fill_type='solid'), # Green
'TWO': PatternFill(start_color='92D050', end_color='92D050',
fill_type='solid'), # Lime Green
'THREE': PatternFill(start_color='FFC000', end_color='FFC000',
fill_type='solid'), # Orange
'FOUR': PatternFill(start_color='FFA500', end_color='FFA500',
fill_type='solid'), # Dark Orange
'FAIL': PatternFill(start_color='FF0000', end_color='FF0000',
fill_type='solid'), # Red
'X': PatternFill(start_color='808080', end_color='808080',
fill_type='solid') # Gray
}
return grade_colors.get(grade, PatternFill())
def generate_student_data(num_students=30):
"""
Generate sample student data for the assessment.
Args:
num_students (int): Number of students to generate. Defaults to 30.
Returns:
list: List of student dictionaries with name, sex, and test score
"""
first_names_male = ['John', 'Michael', 'David', 'James', 'Robert', 'William',
'Daniel', 'Matthew', 'Joseph', 'Christopher']
first_names_female = ['Emma', 'Olivia', 'Sophia', 'Isabella', 'Ava', 'Mia',
'Charlotte', 'Amelia', 'Harper', 'Evelyn']
last_names = ['Smith', 'Johnson', 'Williams', 'Brown', 'Jones', 'Garcia',
'Miller', 'Davis', 'Rodriguez', 'Martinez']
students = []
for i in range(num_students):
# Randomly choose sex
sex = random.choice(['M', 'F'])
students.append({
'SN': i + 1,
'Name': f"{first_name} {last_name}",
'Sex': sex,
'Test Score': test_score
})
return students
def determine_grade(standardized_score):
"""
Determine grade based on standardized score.
Args:
standardized_score (float): Standardized test score
Returns:
tuple: (Grade, Description)
"""
if standardized_score >= 112:
return ('ONE', 'EXCELLENT')
elif 90 <= standardized_score < 112:
return ('TWO', 'VERY GOOD')
elif 75 <= standardized_score < 90:
return ('THREE', 'GOOD')
elif 40 <= standardized_score < 75:
return ('FOUR', 'AVERAGE')
elif standardized_score < 40:
return ('FAIL', 'BELOW AVERAGE')
else:
return ('X', 'ABSENT')
def create_grade_analysis_workbook():
"""
Create an Excel workbook for grade analysis with dashboard.
"""
# Create a new workbook
wb = openpyxl.Workbook()
# Determine grade
grade, description = determine_grade(standardized_score)
# Gender-wise summary
for sex in ['M', 'F', 'Total']:
row_data = [
f"{sex} Students",
results_by_gender[sex]['Total'],
results_by_gender[sex]['ONE'],
results_by_gender[sex]['TWO'],
results_by_gender[sex]['THREE'],
results_by_gender[sex]['FOUR'],
results_by_gender[sex]['FAIL'],
results_by_gender[sex]['X'],
f"{round((results_by_gender[sex]['ONE'] + results_by_gender[sex]['TWO']
+ results_by_gender[sex]['THREE']) / results_by_gender[sex]['Total'] * 100, 2)}%"
if results_by_gender[sex]['Total'] > 0 else "0%"
]
ws2.append(row_data)
bar_chart.add_data(data, titles_from_data=True)
bar_chart.set_categories(cats)
# Calculate percentages
percentage_data = [
[round(results_by_gender['M'][grade] / results_by_gender['M']['Total'] *
100, 2) for grade in grade_order],
[round(results_by_gender['F'][grade] / results_by_gender['F']['Total'] *
100, 2) for grade in grade_order]
]