EC321 : évaluation en contrôle continu

Durée : 1h30
Tout document autorisé

1. Saisie clavier

Test de Ruffier-Dickson

Le test de Ruffier-Dickson est un test physique qui permet d'évaluer l'aptitude d'une personne à la pratique sportive. Ce test peut être, par exemple, pratiqué sous le contrôle d'un médecin afin d'obtenir un certificat médical de non contre-indication à une pratique sportive.

Le test se déroule en trois étapes:

  1. après un repos (couché) de quelques minutes, une prise de pouls du sujet donne la valeur P0 (en pulsations par minute)
  2. le sujet doit ensuite se lever et effectuer 30 flexions complètes de jambes en 45 secondes, bras tendus devant lui. Le pouls P1 est pris immédiatement après
  3. puis le sujet s'allonge à nouveau, et exactement une minute après la fin des flexions on relève une dernière fois sa fréquence cardiaque P2

L'indice de Ruffier-Dickson Id permet de quantifier l'adaptation à l'effort. Il se calcule de la manière suivante :

Id = [ ( P1 - 70 ) + 2 × ( P2 - P0 ) ] / 10

Intervalle Adaptation à l'effort
Id = 0 excellente
0 < Id ≤ 2 très bonne
2 < Id ≤ 4 bonne
4 < Id ≤ 6 moyenne
6 < Id ≤ 8 faible
8 < Id ≤ 10 très faible
Id > 10 mauvaise

Exercice 1

Écrivez un script ruffier-dickson.py qui calcule l'indice de Ruffier-Dickson à partir de la saisie au clavier des féquences cardiaques P0, P1 et P2 et affiche une interprétation en fonction de sa valeur.



#############################
#                           #
#  Test de Ruffier-Dickson  #
#                           #
#############################


P0 (ppm) ? 60
P1 (ppm) ? 80
P2 (ppm) ? 62

Id = 1.4
moyenne adaptation à l'effort
Correction
print('\n\n')
print('#############################')
print('#                           #')
print('#  Test de Ruffier-Dickson  #')
print('#                           #')
print('#############################')
print('\n')

p0 = float(input('P0 (ppm) ? '))
p1 = float(input('P1 (ppm) ? '))
p2 = float(input('P2 (ppm) ? '))

id = ( (p1 - 40) + 2*(p2 - p0) ) / 10

if id==0:
    interpretation = 'excellente'
elif id<=2:
    interpretation = 'très bonne'
elif id<=4:
    interpretation = 'bonne'
elif id<=6:
    interpretation = 'moyenne'
elif id<=8:
    interpretation = 'faible'
elif id<=10:
    interpretation = 'très faible'
else:
    interpretation = 'mauvaise'

print('\nId =', id)
print(interpretation, 'adaptation à l\'effort') 

2. Fichier Excel

Le fichier L2.xlsx contient différents relevés effectués par et sur des étudiants de L2 STAPS.

Télécharger le fichier

Exercice 2

Écrivez un script statistics.py qui calcule quelques statistiques descriptives à partir des données du fichier Excel L2.xlsx.



Statistiques descriptives du fichier L2.xlsx
============================================

171 étudiants recensés

Âge moyen 19.5 ± 1.0

30 % de femmes
70 % d'hommes

54 % de licenciés en club
46 % de non licenciés
Correction
import pandas as pd

df = pd.read_excel('L2.xlsx')

total = len(df.index)

female = df[ df['Sexe'] == "femme" ]
female_percentage = round(len(female.index) * 100 / total)

licensed = df[ df['Licencié'] == "oui" ]
licensed_percentage = round(len(licensed.index) * 100 / total)

print('\n\nStatistiques descriptives du fichier L2.xlsx')
print('============================================\n')
print(total, 'étudiants recensés')
print('\nÂge moyen', round(df['Age'].mean(), 1), '±', round(df['Age'].std(), 1))
print()
print(female_percentage, '% de femmes')
print(100-female_percentage, '% d\'hommes')
print()
print(licensed_percentage, '% de licenciés en club')
print(100-licensed_percentage, '% de non licenciés')

Exercice 3

Écrivez un script ruffier-dickson-excel.py qui, après avoir chargé le fichier L2.xlsx, calcule l'indice de Ruffier-Dickson pour tous les étudiants et stocke le résultat dans une nouvelle colonne nommée Id.

Le nouveau DataFrame sera sauvegardé dans un fichier Excel L2_Id.xlsx

Attention

Le fichier contient des erreurs de retranscription : pour certaines lignes, les valeurs de P0 et P1 ont été interverties. Vous veillerez à utiliser les bonnes valeurs pour le calcul de l'indice de Ruffier-Dickson.
Correction
import pandas as pd

df = pd.read_excel('L2.xlsx')

for i in df.index:
  if df['P0 (ppm)'][i] < df['P1 (ppm)'][i]:
    df.loc[i, 'Id'] = ( (df['P1 (ppm)'][i] - 40) + 2*(df['P2 (ppm)'][i] - df['P0 (ppm)'][i]) ) / 10
  else:
    df.loc[i, 'Id'] = ( (df['P0 (ppm)'][i] - 40) + 2*(df['P2 (ppm)'][i] - df['P1 (ppm)'][i]) ) / 10

writer = pd.ExcelWriter('L2_Id.xlsx', engine = 'xlsxwriter')
df.to_excel(writer, index = False)
writer.save()

3. API

L'API FruityVice recense les qualités nutritionnelles de plusieurs fruits. L'adresse https://www.fruityvice.com/api/fruit/all permet de récupérer la liste de tous les fruits.

via GIPHY

Exercice 4

Écrivez un script get_fruit_names.py qui affiche le nombre de fruits trouvés dans la liste et leur nom.

42 fruits found :

Apple
Apricot
Avocado
Banana
Blackberry
Blueberry
Cherry
Chocolate
Cranberry
Dragonfruit
...
Correction
import requests as rq

response = rq.get('https://www.fruityvice.com/api/fruit/all')

if response.status_code == 200:
  fruit_list = response.json()

  print(len(fruit_list), 'fruits found :')
  for fruit in fruit_list:
    print(fruit['name'])
else:
  print('Error', response.status_code, response.reason)

Exercice 5

Écrivez un script get_fruit_properties.py qui, à partir de la saisie du nom d'un fruit, recherche ses qualités nutritionnelles dans les résultats fournis par l'API.

Enter a fruit name: Tomato

Nutritions (100 g):
- Carbohydrates: 3.9 g
- Protein:       0.9 g
- Fat:           0.2 g
- Calories:      74 g
- Sugar:         2.6 g
Correction
import requests as rq

fruit_name = input('Enter a fruit name: ')

response = rq.get('https://www.fruityvice.com/api/fruit/' + fruit_name)

if response.status_code == 200:
  fruit = response.json()

  print('Nutritions (100 g):')
  print('- Carbohydrates:', fruit['nutritions']['carbohydrates'], 'g')
  print('- Protein:      ', fruit['nutritions']['protein'], 'g')
  print('- Fat:          ', fruit['nutritions']['fat'], 'g')
  print('- Calories:     ', fruit['nutritions']['calories'], 'g')
  print('- Sugar:        ', fruit['nutritions']['sugar'], 'g')
else:
  print('Error', response.status_code, response.reason)

Exercice 6

Écrivez un script record_fruit_properties.py qui stocke l'ensemble des qualités nutritionnelles dans un DataFrame afin de le sauvegarder dans un fichier Excel fruits.xlsx.

            name carbohydrates protein    fat calories  sugar
0          Apple          11.4     0.3    0.4       52   10.3
1        Apricot           3.9     0.5    0.1       15    3.2
2        Avocado          8.53       2  14.66      160   0.66
3         Banana            22       1    0.2       96   17.2
4     Blackberry             9     1.3    0.4       40    4.5
5      Blueberry           5.5       0    0.4       29    5.4
6         Cherry            12       1    0.3       50      8
7      Chocolate            58    8.51  30.57      531     54
8      Cranberry          12.2     0.4    0.1       46      4
9    Dragonfruit             9       9    1.5       60      8
10        Durian          27.1     1.5    5.3      147   6.75
11        Feijoa             8     0.6    0.4       44      3
12           Fig            19     0.8    0.3       74     16
13    Gooseberry            10     0.9    0.6       44      0
...          ...           ...     ...    ...      ...    ...
Correction
import requests as rq
import pandas as pd

response = rq.get('https://www.fruityvice.com/api/fruit/all')

if response.status_code == 200:
  fruit_list = response.json()

  df = pd.DataFrame([], columns=['name', 'carbohydrates', 'protein', 'fat', 'calories', 'sugar'])

  i = 0
  for fruit in fruit_list:
    df.loc[i, 'name']  = fruit['name']
    df.loc[i, 'carbohydrates']  = fruit['nutritions']['carbohydrates']
    df.loc[i, 'protein']  = fruit['nutritions']['protein']
    df.loc[i, 'fat']  = fruit['nutritions']['fat']
    df.loc[i, 'calories']  = fruit['nutritions']['calories']
    df.loc[i, 'sugar']  = fruit['nutritions']['sugar']
    i += 1

  writer = pd.ExcelWriter('fruits.xlsx', engine = 'xlsxwriter')
  df.to_excel(writer, index = False)
  writer.save()
else:
  print('Error', response.status_code, response.reason)