Le résultat vide d'un programme écrit en python

mus - Modifié le 29 avril 2024 à 11:22
mamiemando Messages postés 33088 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 30 avril 2024 - 30 avril 2024 à 14:53

Bonjour,

J'ai besoin de votre support sur la partie de programmation suivante :

""https://examen-api.s3.eu-west-1.amazonaws.com/Student/{ID}" où {ID} correspond à l'identifiant d'un apprenant.

  •  Développez d'abord une suite d'instructions pour gérer un unique apprenant, puis généralisez votre approche dans une boucle qui parcourt une liste d'identifiants, puis enfin définissez la fonction.
  • La manière la plus simple de procéder est d'instancier un DataFrame à partir d'une liste de dictionnaires

J'ai développé ceci mais le résultat n'affiche rien :

import pandas as pd
import requests
import numpy as np
import json

# Send a GET request to retrieve the list of student IDs from the endpoint
student_list = []
for ID in student_list:
    response = requests.get(f"https://examen-api.s3.eu-west-1.amazonaws.com/Student/{ID}")
    student_list = response.json()  
    df = pd.DataFrame(student_list)

    resultat = df.groupby('Student')['ID'].nunique()
    print(resultat)

Je vous remercie pour votre aide

5 réponses

yg_be Messages postés 22735 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 30 avril 2024 1 477
25 avril 2024 à 11:46

bonjour,

suggestion:

import pandas as pd
import requests
import numpy as np
import json

# Send a GET request to retrieve the list of student IDs from the endpoint
student_list = [1]
for ID in student_list:
    response = requests.get(f"https://examen-api.s3.eu-west-1.amazonaws.com/Student/{ID}")
    student_info = response.json()  
    print(student_info['StudentName'])

0

Je vous remercie pour votre réponse.

par contre ca m'affiche qu'un seul student avec 1

pour afficher tous les étudiants svp?il faut incrementer la liste?

Merci

0
blux Messages postés 26013 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 26 avril 2024 3 289
Modifié le 25 avril 2024 à 12:09

Salut,

Ne pas mettre l'id d'un étudiant devrait renvoyer en sortie un objet de type liste comprenant tous les étudiants (c'est d'ailleurs ce que tu as déclaré dans ton code).

0
mus > blux Messages postés 26013 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 26 avril 2024
25 avril 2024 à 15:15

merci pour ton retour,

tu veux dire que avec 'student'?

resultat = df.groupby('Student').nunique()

print(resultat)

0
yg_be Messages postés 22735 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 30 avril 2024 1 477
25 avril 2024 à 12:15

as-tu lu tout l'énoncé?

import pandas as pd
import requests
import numpy as np
import json

# Send a GET request to retrieve the list of student IDs from the endpoint
response = requests.get(f"https://examen-api.s3.eu-west-1.amazonaws.com/Students")
student_list = response.json()["StudentList"]
for ID in student_list:
    response = requests.get(f"https://examen-api.s3.eu-west-1.amazonaws.com/Student/{ID}")
    student_info = response.json()  
    print(ID,student_info['StudentName'])

0

ce qui est demandé c'est de gérer un unique,c'est pour ca j'ai essayé resultat = df.groupby('Student')['ID'].nunique(),qui ne donne rien:

L'endpoint à utiliser est ""https://examen-api.s3.eu-west-1.amazonaws.com/Student/{ID}" où {ID} correspond à l'identifiant d'un apprenant.

Conseils:

  • Ne définissez pas la fonction tout de suite. Développez d'abord une suite d'instructions pour gérer un unique apprenant, puis généralisez votre approche dans une boucle qui parcourt une liste d'identifiants, puis enfin définissez la fonction.
  • La manière la plus simple de procéder est d'instancier un DataFrame à partir d'une liste de dictionnaires sous la forme suivante:
0
blux Messages postés 26013 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 26 avril 2024 3 289
25 avril 2024 à 17:26

Déjà :

student_list = []
for ID in student_list:

Pour moi, tant que student_list n'est pas remplie, tu peux faire toutes les boucles que tu veux, ça va sortir vite !

Je commencerais déjà par un get http pour avoir la liste remplie.


0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
mamiemando Messages postés 33088 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 30 avril 2024 7 750
29 avril 2024 à 11:50

Bonjour,

Il y a plusieurs choses qui ne vont pas :

  • L'énoncé est incomplet : quels attributs veux tu récupérer étant donné un (ou plusieurs) identifiants d'étudiants ? Leur nom ?
    • Cela permettrait sans doute de clarifier pourquoi tu fais appel à groupby et un nunique.
  • Ta liste student_list (que j'appellerais plutôt student_ids) n'est pas peuplée. Par la même occasion, je renommerais ID en student_id, ce serait plus clair. En effet, en python, les noms de variables en capitales sont réservées aux "constantes" globales.
  • Le nom d'attribut contenant l'identifiant dans ta DataFrame n'est pas ID, mais StudentID. Pour s'en rendre compte, il suffit de regarder ce que retourne https://examen-api.s3.eu-west-1.amazonaws.com/Student/1
    • Exemple : 
      {
          "StudentID": 1,
          "StudentName": "David Williams",
          "StudentCursus": "DA",
          "StudentCourses": [
              4,
              2,
              1,
              3
          ]
      }
  • Le temps de développer ton programme, tu devrais ajouter un print après chaque instruction pour voir son résultat. Cela te permettrait de voir l'état de chaque variable et de mieux comprendre ce qui se passe.
  • N'importe que les modules que tu utilises explicitement. Dans ton cas, tu importes numpy ni json mais tu ne les utilises pas. Pour éviter ce genre d'erreur, tu peux utiliser flake8 :
  • Ce n'est pas fondamental, mais en début de fichier, il manque le shebang. Ce serait bien de l'ajouter pour faire de ton script un exécutable.

En partant du principe qu'on veut récupérer les noms des étudiants :

#!/usr/bin/env python3

import pandas as pd
import requests

student_ids = range(3)

for student_id in student_ids:
    url = f"https://examen-api.s3.eu-west-1.amazonaws.com/Student/{student_id}"
    response = requests.get(url)
    student_ids = response.json()
    df = pd.DataFrame(student_ids)
    print(df)
    resultat = df["StudentName"][0]
    print(resultat)

Bonne chance

0
yg_be Messages postés 22735 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 30 avril 2024 1 477
29 avril 2024 à 15:26

Comme écrit le 25 avril 2024 à 12:15, on peut récupérer la liste des id des étidiants ainsi:

response = requests.get(f"https://examen-api.s3.eu-west-1.amazonaws.com/Students")
student_ids = response.json()["StudentList"]
for student_id in student_ids:

Je ne vois pas trop bien le bénéfice de réutiliser la variable "student_ids" à l'intérieur de la boucle.  Au mieux, c'est une source de confusion.

0

Bonjour,

Je vous remercie pour ce retour et précisions.

Cdlt

0
mamiemando Messages postés 33088 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 30 avril 2024 7 750 > mus
30 avril 2024 à 14:53

@yg_be StatutContributeur ok pour récupérer toute la liste d'un coup, c'est effectivement mieux (j'avais loupé ce message).

@mus As-tu toutes tes réponses ? Si oui, peut-on basculer le sujet en résolu ?

0