Application pratique : Analyse de données avec des techniques de groupement
Maintenant que vous comprenez plusieurs méthodes pour regrouper des données, appliquons ces techniques pour résoudre un problème du monde réel : l'analyse d'un ensemble de données de dossiers d'étudiants. Nous utiliserons différentes méthodes de groupement pour extraire des informations utiles des données.
Configuration de l'exemple d'ensemble de données
Tout d'abord, créons notre ensemble de données de dossiers d'étudiants :
-
Créez un nouveau fichier nommé student_analysis.py dans le répertoire /home/labex/project.
-
Ajoutez le code suivant pour configurer les données d'exemple :
import itertools
from collections import defaultdict
## Sample student data
students = [
{"id": 1, "name": "Emma", "grade": "A", "subject": "Math", "score": 95},
{"id": 2, "name": "Noah", "grade": "B", "subject": "Math", "score": 82},
{"id": 3, "name": "Olivia", "grade": "A", "subject": "Science", "score": 90},
{"id": 4, "name": "Liam", "grade": "C", "subject": "Math", "score": 75},
{"id": 5, "name": "Ava", "grade": "B", "subject": "Science", "score": 88},
{"id": 6, "name": "William", "grade": "A", "subject": "History", "score": 96},
{"id": 7, "name": "Sophia", "grade": "B", "subject": "History", "score": 85},
{"id": 8, "name": "James", "grade": "C", "subject": "Science", "score": 72},
{"id": 9, "name": "Isabella", "grade": "A", "subject": "Math", "score": 91},
{"id": 10, "name": "Benjamin", "grade": "B", "subject": "History", "score": 84}
]
print("Student Records:")
for student in students:
print(f"ID: {student['id']}, Name: {student['name']}, Subject: {student['subject']}, Grade: {student['grade']}, Score: {student['score']}")
- Enregistrez le fichier.
Utilisation de defaultdict pour regrouper les étudiants par matière
Analysons quels étudiants suivent chaque matière :
- Ajoutez le code suivant à votre fichier
student_analysis.py :
print("\n--- Students Grouped by Subject ---")
## Group students by subject using defaultdict
subject_groups = defaultdict(list)
for student in students:
subject_groups[student["subject"]].append(student["name"])
## Print students by subject
for subject, names in subject_groups.items():
print(f"{subject}: {names}")
- Enregistrez le fichier.
Calcul des scores moyens par matière
Calculons le score moyen pour chaque matière :
- Ajoutez le code suivant à votre fichier
student_analysis.py :
print("\n--- Average Scores by Subject ---")
## Calculate average scores for each subject
subject_scores = defaultdict(list)
for student in students:
subject_scores[student["subject"]].append(student["score"])
## Calculate and print averages
for subject, scores in subject_scores.items():
average = sum(scores) / len(scores)
print(f"{subject} Average: {average:.2f}")
- Enregistrez le fichier.
Utilisons maintenant itertools.groupby() pour analyser la répartition des notes :
- Ajoutez le code suivant à votre fichier
student_analysis.py :
print("\n--- Grade Distribution (using itertools.groupby) ---")
## Sort students by grade first
sorted_students = sorted(students, key=lambda x: x["grade"])
## Group and count students by grade
grade_counts = {}
for grade, group in itertools.groupby(sorted_students, key=lambda x: x["grade"]):
grade_counts[grade] = len(list(group))
## Print grade distribution
for grade, count in grade_counts.items():
print(f"Grade {grade}: {count} students")
- Enregistrez le fichier.
Combinaison de techniques : Analyse avancée
Enfin, effectuons une analyse plus complexe en combinant nos techniques de groupement :
- Ajoutez le code suivant à votre fichier
student_analysis.py :
print("\n--- Advanced Analysis: Grade Distribution by Subject ---")
## Group by subject and grade
subject_grade_counts = defaultdict(lambda: defaultdict(int))
for student in students:
subject = student["subject"]
grade = student["grade"]
subject_grade_counts[subject][grade] += 1
## Print detailed grade distribution by subject
for subject, grades in subject_grade_counts.items():
print(f"\n{subject}:")
for grade, count in grades.items():
print(f" Grade {grade}: {count} students")
-
Enregistrez le fichier.
-
Exécutez le script complet :
python3 /home/labex/project/student_analysis.py
Vous devriez voir une analyse complète des données des étudiants, comprenant :
- Les dossiers des étudiants
- Les étudiants regroupés par matière
- Les scores moyens par matière
- La répartition globale des notes
- La répartition des notes par matière
Cet exemple démontre comment différentes techniques de groupement peuvent être combinées pour effectuer une analyse de données complexe avec un code relativement simple. Chaque approche a ses forces :
defaultdict est excellent pour un groupement simple sans avoir à vérifier l'existence de la clé
itertools.groupby() est efficace pour travailler avec des données triées
- La combinaison de techniques permet un groupement à plusieurs niveaux et une analyse complexe
La sélection de la bonne technique de groupement dépend de vos besoins spécifiques et de la structure de vos données.