EC321 : évaluation en contrôle continu

Durée : 2h
Tout document autorisé

1. Saisie clavier

Estimation de la masse grasse

La méthode des 3 plis cutanés proposée par Jackson et Pollock permet d'estimer le pourcentage de masse graisseuse en fonction de l'âge A et du genre du sujet.

La densité corporelle D est calculée selon les formules suivantes.

Pour une femme :

D = 1.0994921 - 0.0009929 × (P1 + P2 + P3) + 0.0000023 × (P1 + P2 + P3)2 - 0.0001392 × A

Pour un homme :

D = 1.10938 - 0.0008267 × (P1 + P2 + P3) + 0.0000016 × (P1 + P2 + P3)2 - 0.0002574 × A

Le pourcentage de masse graisseuse PMG est défini comme suit :

PMG = 495 / D - 450

Exercice 1

Écrivez un script body-fat.py qui calcule le pourcentage de masse graisseuse à partir de la saisie au clavier des plis cutanés P1, P2 et P3 de l'âge A et du genre du sujet.

Homme (H) ou femme (F) ? H
Age ? 50
pli au niveau du triceps (mm) ? 7
pli Supra iliaque (mm) ? 12
pli au niveau de la cuisse (mm) ? 11

Masse grasse : 11 %
Correction
gender = input('Homme (H) ou femme (F) ? ')
age = float(input('Age ? '))
p1 = float(input('pli au niveau du triceps (mm) ? '))
p2 = float(input('pli Supra iliaque (mm) ? '))
p3 = float(input('pli au niveau de la cuisse (mm) ? '))

s = p1 + p2 + p3

if gender == 'F':
    body_density = 1.0994921 - 0.0009929 * s + 0.0000023 * s * s  - 0.0001392 * age
else:
    body_density = 1.10938  - 0.0008267 * s + 0.0000016 * s * s - 0.0002574 * age

body_fat =  495 / body_density - 450
print('Masse grasse :', round(body_fat), '%')

2. Fichier Excel

Le fichier NBA2021-2022.xlsx contient l'intégralité des matchs de la saison 2021-2022 de la NBA.

Télécharger le fichier

Exercice 2

Écrivez un script best-score-west-conference.py qui affiche le plus gros score marqué par une équipe de la conférence West.

157
Correction
import pandas as pd

games = pd.read_excel('EC321/NBA2021-2022.xlsx')

west_home_games = games[ games['home_team_conference'] == 'West' ]
home_best = west_home_games['home_team_score'].max()

west_visitor_games = games[ games['visitor_team_conference'] == 'West' ]
visitor_best = west_visitor_games['visitor_team_score'].max()

print(max(home_best, visitor_best))

Exercice 3

Écrivez un script biggest-score-difference.py qui affiche la date du match, ainsi que le nom des équipes, durant lequel on a observé la plus grande différence de score.

Astuce

Vous pouvez ajouter une nouvelle colonne au tableau contenant la valeur absolue de la différence des scores pour chaque match.
2021-12-02
MEM 152
OKC 79
Correction
import pandas as pd

games = pd.read_excel('EC321/NBA2021-2022.xlsx')

for i in games.index:
    games.loc[i, 'difference'] = abs(games['home_team_score'][i] - games['visitor_team_score'][i])

idmax = games['difference'].idxmax()

print(games['date'][idmax])
print(games['home_team_name'][idmax], games['home_team_score'][idmax])
print(games['visitor_team_name'][idmax], games['visitor_team_score'][idmax])

3. API

L'API CityBikes répertorie les opérateurs de vélos en libre service à travers le monde.

Exercice 4

Écrivez un script operators.py qui affiche la liste des opérateurs présents sur le territoire français.

Opérateurs en France :

- Vélib' Métropole
- Libélo
- LE vélo Star
- V³
- V'Lille
- IDECycle
- cy'clic
- Vélô
- Vélam
- VéloCité
...
Correction
import requests as rq

response = rq.get('http://api.citybik.es/v2/networks')
if response.status_code == 200:
    data = response.json()

    for operator in data['networks']:
        if operator['location']['country'] == 'FR':
            print(operator['name'])
else:
    print('Error', response.status_code, response.reason) 

Exercice 5

Écrivez un script operators-map.py qui, sur un fond de carte centrée sur Paris, place un marqueur pour chaque opérateur sur le territoire français avec une info bulle contenant le nom de l'opérateur et le nombre de stations de vélos en libre service.

Correction
import requests as rq
import folium as fl

m = fl.Map(location=[48.856612, 2.352233], tiles='OpenStreetMap', zoom_start=5)

response = rq.get('http://api.citybik.es/v2/networks')
if response.status_code == 200:
    data = response.json()

    for operator in data['networks']:
        if operator['location']['country'] == 'FR':
            response = rq.get('http://api.citybik.es' + operator['href'])
            if response.status_code == 200:
                details = response.json()
                info = details['network']['name'] + '
' + \ str(len(details['network']['stations'])) + ' stations' fl.Marker([operator['location']['latitude'], operator['location']['longitude']], popup=info).add_to(m) else: print('Error', response.status_code, response.reason) else: print('Error', response.status_code, response.reason) m.save('operators.html')