Informatique 1re année Pharmacie
FMP Rabat · 1re année Pharmacie · Informatique

Informatique appliquée & Python

>>> print("cours + TD + TP réunis, et le code s'exécute ici")

L'idée du module : le pharmacien d'aujourd'hui travaille au milieu des données (dossier patient, ordonnance électronique, stocks, études cliniques). Le cours théorique explique où l'informatique intervient en santé ; la partie Python t'apprend à manipuler ces données toi-même : variables → structures → objets → matrices (NumPy) → tableaux de données (pandas).

Chaque bloc de code noir est modifiable : clique sur ▶ Exécuter pour lancer du vrai Python 3.12 dans ton navigateur (rien à installer). Le premier lancement télécharge Python (~15 Mo) ; NumPy et pandas se chargent seulement quand un bloc les importe. Les variables restent en mémoire d'un bloc à l'autre, comme dans un notebook Jupyter/Colab.

BlocContenuSupports du cours
1. e-Santée-Health, DMI/DMP, interopérabilité, cybersécurité, cloud, Big Data, IA, blockchain, télémédecineCours 1 (Pr. El Handri), « Suite info »
2. Bases Pythonprint/input, variables, types, opérateurs, conditions, boucles, fonctions, try/except, regexpython part 1, Python.pdf, Python Programming, CODE PYTHON, TP0, TP1
3. Collectionsstr, list, tuple, set, dict, fichierspython part 1, Notions (set/try/regex)
4. POOclasse, objet, __init__, self, héritage, polymorphisme, encapsulationProgrammation Orientée Objet, td poo, exercices Étudiants/Employés
5. NumPy & matricesndarray, slicing, linalg (det, inv, solve, rang), mineurs/cofacteursBIBLIOTHÈQUE NUMPY, TD numpy, TP2-TP3, TD matrices 1-4, TD 6
6. Pandas & EDASeries/DataFrame, loc/iloc, filtres, groupby, NaN, merge, cutpartie pandas, TD Titanic, mini-projet Netflix, TP people.tsv
Vue d'ensemble

Carte du module

Clique sur un bloc (ou une pastille) : le panneau donne l'essentiel, les mots-clés et les TD/TP correspondants.

Bloc 1 · Cours théorique

Informatique appliquée à la santé et à la pharmacie

Ce bloc tombe surtout en QCM et en questions de définition. Ce qu'il faut retenir : les définitions (e-Health, m-Health, DMP…), les normes d'interopérabilité, le cadre légal, le modèle NIST du cloud et les 3V du Big Data.

Définitions

Les « informatiques » de santé

  • e-Health (e-Santé) : utilisation des technologies de l'information et de la communication (TIC) au service de la santé.
  • m-Health : la partie mobile de l'e-Santé (smartphones, applis, objets connectés).
  • Health Informatics : science de la gestion des données de santé (collecte, stockage, analyse, partage).
  • Pharmacy Informatics : son application au circuit du médicament (prescription → dispensation → suivi).
Exemples concrets

Ce que ça change à l'officine et à l'hôpital

  • e-prescription : ordonnance transmise électroniquement, signée, traçable, sans erreur de lecture.
  • CDSS (Clinical Decision Support System) : alertes d'interactions, de surdosage, aide au diagnostic (ex. IBM Watson).
  • LGP (logiciel de gestion de pharmacie) : stocks en temps réel, péremptions, facturation, tiers payant.
  • Robots de dispensation (ex. CHU Ibn Sina, 2022) et automates de préparation des doses.

Numériser, digitaliser, transformer

Numérisation

Passer un support papier → fichier (scanner une ordonnance). Le processus ne change pas.

→
Digitalisation

Utiliser le numérique pour refaire un processus (l'ordonnance est créée, envoyée et lue électroniquement).

La transformation digitale va plus loin : elle change l'organisation entière (nouveaux métiers, décisions guidées par les données, télé-pharmacie). Le cours parle aussi des « ères » 1.0 → 4.0 : informatisation administrative → dossiers numériques → connectivité/Internet → IA, IoT, Big Data.

Les dossiers du patient

SigleSignificationÀ retenir
DMI / DPIDossier Médical (Patient) InformatiséDossier tenu par un établissement (hôpital, clinique)
DMPDossier Médical PartagéDossier partagé entre professionnels et établissements, suit le patient
DPUDossier Patient UniqueUn seul dossier par patient au sein d'un réseau de soins
DPDossier PharmaceutiqueHistorique des médicaments délivrés (en France : 4 mois) consulté à chaque dispensation → interactions, doublons, abus
PACSPicture Archiving and Communication SystemArchivage et transmission des images médicales (radio, scanner, IRM, écho)
SIHSystème d'Information HospitalierL'ensemble des logiciels de l'hôpital (admissions, DPI, pharmacie, labo…)
Masque les réponses ; clique sur une case pour la révéler.

Interopérabilité : parler la même langue

Deux logiciels de santé ne peuvent échanger des données que s'ils partagent un format (comment on transporte) et une terminologie (comment on nomme).

NormeTypeSert à…
HL7Messagerie / format d'échangeÉchanger des messages entre logiciels hospitaliers (admission, résultats…)
FHIRStandard HL7 moderne (web, API)Échanger des « ressources » (Patient, Medication…) via Internet, format JSON/XML
SNOMED CTTerminologie cliniqueCoder les diagnostics, symptômes, actes de façon universelle
LOINCTerminologie biologiqueCoder les analyses de laboratoire et observations

Maroc et international

Maroc

Projet de DMP national, hôpital Cheikh Khalifa (dossier informatisé), téléconsultation Tbib24, robotisation de la pharmacie du CHU Ibn Sina (2022).

France

SNDS (Système National des Données de Santé), Health Data Hub, DMP et Dossier Pharmaceutique.

Monde

EHR (Electronic Health Record) aux USA, plateformes cloud (AWS, Google Cloud, IBM Watson Health).

Cybersécurité et cadre légal

Lois
  • Loi 09-08 (Maroc) : protection des personnes physiques à l'égard du traitement des données à caractère personnel (contrôle : CNDP).
  • RGPD / GDPR (Union européenne).
  • HIPAA (États-Unis) : confidentialité des données de santé.
Menaces
  • Ransomware : chiffre les données et exige une rançon (CHU de Rouen, 2019).
  • Phishing : faux mail/site pour voler des identifiants.
  • Fuite de données : attaque de la CNSS (avril 2025).
  • Panne logicielle : mise à jour CrowdStrike (juillet 2024), hôpitaux paralysés dans le monde.

Cloud computing : le modèle NIST

Le cloud, c'est utiliser des ressources informatiques (stockage, calcul, logiciels) à distance, à la demande, comme on consomme l'électricité du réseau au lieu d'avoir son propre générateur (analogie du cours). Le cloud commercial naît avec Amazon Web Services en 2006.

Le NIST définit…Contenu
5 caractéristiquesLibre-service à la demande · accès réseau large · mutualisation des ressources · élasticité rapide · service mesuré (on paie ce qu'on consomme)
3 modèles de serviceIaaS (infrastructure : serveurs, stockage) · PaaS (plateforme pour développer) · SaaS (logiciel prêt à l'emploi, ex. Gmail, un LGP en ligne)
4 modèles de déploiementPublic · privé · communautaire · hybride
Big Data

Les 3V

Volume (quantité énorme), Variété (textes, images, signaux, génome), Vélocité (flux en temps réel). Le cloud fournit l'infrastructure ; le Big Data, c'est l'analyse de ces masses de données (épidémiologie, pharmacovigilance, données de vie réelle).

IoT

Objets connectés

Glucomètres en continu, tensiomètres, oxymètres, montres → télésurveillance à domicile, alertes précoces, moins d'hospitalisations.

IA

Intelligence artificielle

Systèmes qui apprennent à partir de données pour reconnaître, prédire ou décider. En santé : lecture d'images par réseaux de neurones convolutifs (CNN), dépistage du cancer du sein (ex. BreastAI), rétinopathie diabétique, prévision des stocks.

Blockchain

Registre infalsifiable

Registre décentralisé et immuable : traçabilité du médicament (lutte contre la contrefaçon), consentement, essais cliniques.

Télémédecine
  • Téléconsultation : patient ↔ médecin à distance.
  • Téléexpertise : un professionnel demande l'avis d'un autre.
  • Télésurveillance : suivi à distance des données du patient.
Éthique
  • Confidentialité et consentement.
  • Biais des algorithmes (données non représentatives).
  • Validation humaine : l'IA aide, le professionnel décide et reste responsable.
Mémo : HL7 transporte, SNOMED nomme, LOINC mesure. NIST = 5-3-4 (caractéristiques, services, déploiements). Big Data = 3V.
Bloc 2 · Programmation

Les bases de Python

Compilé

Tout le code est traduit en langage machine avant l'exécution → fichier exécutable, très rapide (C, C++, Rust, Go).

vs
Interprété

Le code est lu et exécuté au fur et à mesure par un interpréteur → souple, facile à tester (Python, JavaScript).

Python est en fait hybride : le code est d'abord compilé en bytecode (.pyc), puis ce bytecode est interprété par la machine virtuelle Python (PVM). Environnements vus en TP : Anaconda + Spyder (TP0) et Google Colab (notebook en ligne).

print() et input()

print(v1, v2, sep=" ", end="\n") affiche ; input("message") lit une saisie et renvoie toujours une chaîne (str). Pour calculer, on convertit : int() ou float(). Ici, les valeurs tapées au clavier se mettent dans la zone jaune Entrées, une par ligne.

Variables et types

Pas de déclaration : la variable est créée à la première affectation et son type est déduit de la valeur (typage dynamique). Un nom commence par une lettre ou _, ne contient que lettres, chiffres et _, et distingue majuscules et minuscules.

TypeExempleDescription
str"Amoxicilline"Texte, non modifiable (immuable)
int500Entier positif ou négatif
float12.5Nombre décimal (à virgule flottante)
complex2 + 3jNombre complexe
boolTrueVrai / Faux, résultat d'une comparaison
list[1, 2, 2]Ordonnée, modifiable, doublons permis
tuple(1, 2)Ordonné, non modifiable
rangerange(2, 10, 2)Suite d'entiers générée à la demande (fin exclue)
set{1, 2}Non ordonné, sans doublons, pas d'index
dict{"nom": "Ali"}Paires clé → valeur, modifiable, clés uniques
frozensetfrozenset([1, 2])Set non modifiable
bytes / bytearray / memoryviewbytearray([65, 66])Octets (0-255) ; bytearray modifiable ; memoryview = vue sans copie
⚠ Erreurs dans les supports
  • CODE PYTHON.docx écrit « float : nombres entiers » → faux : float = nombres décimaux.
  • Même fichier : « tuple : liste (modifiable) » → faux : un tuple est immuable (c'est sa différence avec la liste).
  • Python.pdf (notes) : « une variable locale déclarée dans un bloc n'existe que dans ce bloc ». En Python, seules les fonctions (et classes/modules) créent une portée : une variable créée dans un if ou une boucle for reste accessible après.

Opérateurs

OpérateurExempleRésultat
/ division10 / 25.0 (toujours un float)
// division entière10 // 33
% modulo (reste)10 % 31
** puissance2 ** 38
+= affectationx = 5; x += 27
== / !=3 == 3.0True
and / or / notnot (5 > 2 and 1 > 3)True
in appartenance"para" in "paracétamol"True
is identité[1] is [1]False (deux objets distincts, même si ==)
& | ^ bit à bit6 & 32 (110 ET 011 = 010)

Conditions : if / elif / else

Le bloc est défini par l'indentation (4 espaces) après les deux-points. Python teste les conditions dans l'ordre et s'arrête à la première vraie.

Astuce : tester d'abord le cas invalide évite d'écrire 16 <= note <= 20 partout. Change la valeur dans « Entrées » (25, 9.5, 12…) et relance.

Boucles

for

Parcourt une séquence (liste, chaîne, range, dict…). range(2, 30, 3) → 2, 5, 8… (30 exclu).

while

Répète tant que la condition est vraie. Penser à faire évoluer la variable, sinon boucle infinie (bouton ■ Stop).

break / continue

break sort de la boucle ; continue passe directement au tour suivant.

else de boucle

Exécuté quand la boucle se termine normalement (pas exécuté si on sort par break).

Fonctions

def nom(paramètres): définit un bloc réutilisable ; return renvoie un résultat (sans return, la fonction renvoie None). Paramètres par défaut, arguments nommés, et lambda pour une petite fonction anonyme d'une ligne.

Erreurs : try / except

Expressions régulières (module re)

re.split(motif, texte) découpe ; re.sub(motif, remplacement, texte) remplace ; re.findall extrait tout ce qui correspond. Motifs utiles : \d chiffre, \d+ un ou plusieurs chiffres, \s espace, [,;] l'un des caractères.

Bloc 3 · Structures de données

Chaînes, listes, tuples, ensembles, dictionnaires

list [ ]tuple ( )set { }dict {k: v}
Ordonné / indexOui, l[0]Oui, t[0]Non, pas d'indexAccès par clé d["k"] ; ordre d'insertion conservé
ModifiableOuiNonOn ajoute/retire, on ne modifie pas un élémentOui
DoublonsPermisPermisInterdits (supprimés)Clés uniques
Ajouterappend, insert, extendImpossible (passer par list())add, updated["new"] = v, update
Retirerremove(val), pop(i), del l[i]del t (tout le tuple)remove (erreur si absent), discard (pas d'erreur), poppop(k), del d[k], clear()
⚠ À corriger dans « python part 1 » et CODE PYTHON
  • « set.pop() supprime le dernier élément » → un set n'a pas d'ordre : pop() retire un élément arbitraire.
  • « Un dictionnaire est une collection non ordonnée » → c'est vrai seulement avant Python 3.7 ; aujourd'hui, un dict conserve l'ordre d'insertion (mais on y accède toujours par clé, pas par position).
  • « You can convert the tuple into a list : tuple(list) » → c'est list(mon_tuple) qui convertit en liste ; tuple(...) fait l'inverse.
  • Fiche Notions : les exemples ont perdu leur indentation (le code ne tournerait pas) et re est utilisé sans import re.

Fichiers texte

with open("notes.txt", "r") as f: ouvre et ferme automatiquement le fichier. Modes : "r" lire, "w" écrire (écrase), "a" ajouter. Un fichier notes.txt d'exemple existe dans le dossier de travail de ce site.

Bloc 4 · Programmation orientée objet

Classes et objets

Au lieu de disperser des variables et des fonctions, la POO regroupe dans une même classe l'état (attributs) et le comportement (méthodes) d'un concept : un compte, un patient, un médicament.
Classe

Le plan, le moule : un nouveau type. Nom en PascalCase : class Medicament:

→
Objet (instance)

Un exemplaire concret, avec sa propre identité et son propre état : m = Medicament("Doliprane", 1000)

Instanciation : Python réserve la mémoire, lie l'objet à sa classe, appelle __init__, puis renvoie la référence.
__init__ (constructeur) initialise les attributs. Un objet ne doit jamais naître dans un état invalide → on valide dans __init__.
self = l'objet courant. m.afficher() équivaut à Medicament.afficher(m).
__str__ définit ce qu'affiche print(objet) (sinon <__main__.X object at 0x…>).

Héritage, redéfinition, polymorphisme

Héritage

class Enfant(Parent): récupère attributs et méthodes. Dans __init__, appeler super().__init__(...).

Redéfinition

(override) La classe fille réécrit une méthode du parent, sous le même nom.

Polymorphisme

Un même appel (e.calculer_salaire()) donne un comportement différent selon le type réel de l'objet. Le duck typing permet même cela sans héritage.

Encapsulation

ÉcritureConventionAccès depuis l'extérieur
self.nompubliclibre
self._nomprotégé (convention)possible, mais « ne pas toucher »
self.__nomprivéname mangling : renommé _Classe__nom → obj.__nom lève une AttributeError

On contrôle l'accès par des getters/setters, en Python de préférence avec @property (lecture) et @x.setter (écriture validée).

Les 3 relations à reconnaître : héritage « est un » (un EtudiantTempsAmenage est un Etudiant) · agrégation « contient » (un Cours contient des Etudiants qui existent sans lui) · association « utilise » (une Réservation relie un Client et une Chambre).
Bloc 5 · Calcul numérique

NumPy et les matrices

NumPy (Numerical Python) fournit l'objet ndarray : un tableau à N dimensions, de type homogène, beaucoup plus rapide qu'une liste, avec les opérations élément par élément et l'algèbre linéaire (np.linalg). On l'importe par convention avec import numpy as np.

Tableau.ndim.shapeLecture
np.array(46)0()Scalaire : pas de ligne ni de colonne
np.array([1,2,3])1(3,)Vecteur de 3 éléments
np.array([[1,2,3],[4,5,6]])2(2, 3)Matrice 2 lignes × 3 colonnes (toujours lignes, colonnes)
2 matrices 2×3 empilées3(2, 2, 3)2 matrices de 2 lignes et 3 colonnes
FonctionRôle
np.linalg.det(A)Déterminant (renvoie un float : 9.999999 au lieu de 10 → arrondir)
np.linalg.inv(A)Inverse (LinAlgError si det = 0 : matrice singulière)
np.linalg.solve(A, Y)Résout le système AX = Y (plus précis que inv(A) @ Y)
np.linalg.matrix_rank(A)Rang = nombre de lignes (ou colonnes) linéairement indépendantes
np.linalg.eig(A) / eigvalsValeurs (et vecteurs) propres
np.linalg.norm(v)Norme (longueur) d'un vecteur ou d'une matrice
np.delete(A, i, axis=0)Supprime la ligne i (axis=1 : la colonne) → sert à calculer les mineurs

Mineur, cofacteur, comatrice, inverse

Mineur M(i,j) = det de A privée de la ligne i et de la colonne j Cofacteur C(i,j) = (-1)^(i+j) × M(i,j) signes : + − + det(A) = Σ_j a(1,j) × C(1,j) (développement) − + − A⁻¹ = (1 / det A) × (comatrice)ᵀ + − +
Calculateur 3×3 : développement selon la 1re ligne
⚠ Pièges dans les supports NumPy
  • TD « Le module numpy » : np.concatanate(A, B) → orthographe et syntaxe correctes : np.concatenate((A, B)) (un seul argument : un tuple de tableaux).
  • td numpy, ex. 3 : « calculez l'inverse de [[1,2,3],[4,5,6],[7,8,9]] » → impossible : son déterminant vaut 0 (ligne 3 = 2×ligne 2 − ligne 1). NumPy lève LinAlgError: Singular matrix. La question « A = DU » n'a pas de solution générale ; la décomposition classique est A = LU (L triangulaire inférieure, U supérieure).
  • TP2/TP3 : « mineur A30 » n'a de sens qu'avec des indices Python (à partir de 0) ; en notation mathématique les indices commencent à 1. Précise toujours la convention.
Bloc 6 · Données tabulaires

Pandas et l'analyse exploratoire (EDA)

Series

Une colonne : valeurs + index. pd.Series([12, 15], index=["Ali", "Sara"])

⊂
DataFrame

Un tableau de plusieurs Series partageant le même index. Se crée depuis un dict ou un fichier : pd.read_csv()

Le fichier titanic.csv (891 passagers, Kaggle) est disponible ici. Ses colonnes commencent par une majuscule (Survived, Pclass, Sex, Age…) ; le TD les écrit en minuscules, donc on les renomme dès le chargement.

ÉcritureSélectionne…
df["age"]Une colonne (Series)
df[["name", "age"]]Plusieurs colonnes (DataFrame) : double crochet
df.loc[5, "name"]Par étiquette (index 5, colonne name) ; borne de fin incluse dans loc[0:3]
df.iloc[5, 3]Par position (6e ligne, 4e colonne) ; fin exclue dans iloc[0:3]
df[(df.sex == "female") & (df.age < 18)]Filtre booléen : & (et), | (ou), ~ (non), parenthèses obligatoires
df.loc[df.age > 60, ["name", "pclass"]]Filtre + choix de colonnes en une seule fois
Nettoyage
  • isnull()/isna() détecte les NaN
  • dropna() supprime, fillna(v) remplace
  • drop_duplicates(), astype("category")
  • rename(columns={...}), replace()
Transformer
  • map() sur une Series (dict ou fonction)
  • apply() ligne par ligne ou colonne par colonne
  • .str.split / .str.strip / .str.extract
  • pd.to_datetime(), .dt.year
Combiner
  • pd.concat([a, b]) empile
  • pd.merge(a, b, on="cle", how="left") joint comme en SQL
  • a.join(b) joint sur l'index
Remodeler
  • groupby().agg(), pivot_table()
  • unstack(), set_index([...]) (MultiIndex)
  • explode() une ligne par élément d'une liste
⚠ Coquilles du cours « partie pandas »
  • pd.isull() → c'est pd.isnull() (ou pd.isna()).
  • applymap() est dépréciée depuis pandas 2.1 : on écrit maintenant df.map(fonction) pour appliquer une fonction à chaque case.
Entraînement

TD et TP corrigés

Essaie d'abord seul : vide le bloc, écris ta version, exécute. La correction proposée n'est qu'une solution possible.

TP0 · Calculs simples (vitesse d'élimination, stock, moyenne pondérée) TP0
TP1 · Exercices 3, 4 et 6 (âge, nombre magique, menu) TP1
TP2 / TP3 · Manipuler une matrice NumPy TP2-3
TD 1 matrices · somme, produit, transposée, rang TD1
Ex. 1 : A (1×3) et B (3×3) → A + B impossible (tailles différentes) ; AB possible (1×3)·(3×3) → 1×3. Règle : la somme exige la même taille ; le produit A(m×n)·B(n×p) exige colonnes de A = lignes de B.
Ex. 2 : Xᵀ (2×3) : chaque ligne = une enzyme, chaque colonne = un patient.
Ex. 3 : XᵀX (3×3) = sommes des produits entre biomarqueurs (diagonale = Σ des carrés) → co-variation des biomarqueurs. XXᵀ (4×4) = similarité entre patients : les patients 1, 2 et 4 ont exactement le même profil (14 partout).
Ex. 4-7 : rang(M) = 2 (ligne 2 = 2×ligne 1 : biomarqueur redondant) ; rang(A) = 1 (mesure répétée, pas d'information nouvelle) ; rang(B) = 2 (L3 = L1 + 2×L2) puis 3 avec la ligne (6, 8, 9) ; rang(C) = 1 (toutes les lignes sont proportionnelles : colonnes dépendantes).
TD 2 · Trace, matrices symétriques / antisymétriques TD2
Ex. 1 : Tr(C) = 2 + 3 = 5 ; C² = [[4, 5], [0, 9]] → Tr(C²) = 13 ; Tr(AB) = Tr(BA) = 1.
Ex. 2 : Sᵀ = S ✔ ; Aᵀ = −A ✔ (diagonale nulle). S + A et S − A ne sont ni symétriques ni antisymétriques (et (S+A)ᵀ = S − A).
Ex. 3 : (M + Mᵀ)/2 est symétrique car sa transposée donne (Mᵀ + M)/2 ; (M − Mᵀ)/2 est antisymétrique. Pour M = [[1, 3], [−1, 4]] : S = [[1, 1], [1, 4]], A = [[0, 2], [−2, 0]].
Ex. 4 : AAᵀ = [[21, 2], [2, 34]] (2×2) ; AᵀA = [[1, 4, −2], [4, 25, 7], [−2, 7, 29]] (3×3) — les deux sont symétriques.
TD 3 · Déterminants, mineurs, cofacteurs TD3
ExerciceRésultatÀ retenir
1det B = 1×4 − 2×3 = −2 ; après échange des lignes : +2Échanger deux lignes change le signe
2det = 0L3 − L2 = L2 − L1 : lignes liées → matrice non inversible
3det [[3, 1], [2, 4]] = 10|det| = aire du parallélogramme construit sur u et v
4det M = −4|det| = 4 = volume du parallélépipède ; ≠ 0 → vecteurs indépendants
5det B = 1 → ×3 ligne : 3 ; échange : −1 ; L3 + 2L1 : 1Multiplier une ligne par k multiplie det par k ; ajouter un multiple d'une ligne ne change rien
6-8M₁₁ = 13, M₂₃ = 10, M₃₂ = −8 ; C₁₁ = 13, C₂₃ = −10, C₃₂ = 8Cofacteurs : [[13, −12, 20], [−4, 6, −10], [−7, 8, −10]], det A = 10
9Cofacteurs de C : [[8, −1, −6], [4, 8, −3], [−1, −2, 5]], det = 17Comatrice = transposée : [[8, 4, −1], [−1, 8, −2], [−6, −3, 5]]
10C₁₁ = 28, C₂₂ = 14, C₃₃ = 8, C₁₂ = 0, C₂₃ = 0Matrice triangulaire : det = produit de la diagonale = 56
11C₁₂ = 5, C₂₁ = 0, C₂₃ = 0, C₃₂ = −2, det E = −9Développer selon la ligne/colonne qui contient le plus de zéros (ici la colonne 2)
TD 4 · Matrices 4×4 : inverse par comatrice et par Gauss-Jordan TD4

Ex. 1 : det B = 10 ; cofacteurs de la 1re ligne : −3, −1, −1, 5 (vérifie : 2(−3) + 1(−1) + 3(−1) + 4(5) = 10 ✔). Ex. 2 : det C = −21 ≠ 0, donc C est inversible. Ex. 3 : mineur (L1, L3 ; C2, C4) = 1 ; mineur (L1, L2, L4 ; C1, C2, C3) = −12 ; mineur principal d'ordre 3 = 30.

TD 5 · Équilibrer une réaction chimique avec un système linéaire TD5

Idée : on cherche les coefficients x₁…xₙ. Pour chaque élément (Ca, C, O, H, Cl…), le nombre d'atomes à gauche = à droite → une équation linéaire homogène. Ex. CaCO₃ + HCl → CaCl₂ + H₂O + CO₂ : Ca : x₁ = x₃ ; C : x₁ = x₅ ; O : 3x₁ = x₄ + 2x₅ ; H : x₂ = 2x₄ ; Cl : x₂ = 2x₃. En fixant x₁ = 1 : CaCO₃ + 2 HCl → CaCl₂ + H₂O + CO₂.

TD 6 · Dosages et mélanges : systèmes linéaires TD6

Méthode : une inconnue par solution (ou médicament), une équation par substance. Les colonnes de la matrice sont les solutions, les lignes les substances : np.linalg.solve(A, cible).

⚠ Ce que révèle le calcul
  • Ex. 1 : 3,2 ml de solution 1 et 3,6 ml de solution 2 ✔.
  • Ex. 2 : la solution mathématique donne C = −0,31 L : impossible de verser un volume négatif. Avec ces trois solutions, les cibles 23/16/19 mmol ne sont pas atteignables (et additionner des mmol/L × L donne des mmol, pas des mmol/L : l'énoncé mélange quantité et concentration).
  • Ex. 3 : solution négative aussi (x₁ = −0,72 ; x₂ = −2,6) → prescription irréalisable avec ces médicaments. De plus l'énoncé donne des « mg par médicament » et demande des « ml » : il faut comprendre « mg/ml ».
  • Ex. 4 : solution positive (≈ 2,03 ; 4,28 ; 1,10), cohérente.
Moralité : toujours vérifier le sens physique d'une solution calculée.
TD numpy · Exercices 1 à 3 TD numpy
td poo · Exercice 1 : Compte et Banque td poo
TD POO · Gestion des employés (héritage, polymorphisme, agrégation) Employés
td poo · Exercice 3 : Abonnements (validation, propriétés read-only) td poo

Les tarifs de dépassement ne sont pas donnés dans l'énoncé : ceux-ci sont des exemples pour illustrer la redéfinition de facture().

TD Pandas · Titanic (13 questions) TD Titanic

Le fichier Kaggle n'a pas de doublons complets ; deux passagers n'ont pas de port d'embarquement → 889 lignes après nettoyage.

Examen 2025 · TP pandas sur people.tsv Examen

Le vrai people.tsv n'était pas fourni : le site utilise un fichier d'exemple aux valeurs fictives (mêmes colonnes : name, sex, size, age). Les réponses dépendront des données réelles le jour de l'examen ; c'est la méthode qui compte.

Mini-projet Netflix · la démarche sur un mini-échantillon EDA

Le fichier netflix_titles.csv (8 800 lignes) n'est pas fourni : voici les instructions clés du projet appliquées à un échantillon de 8 lignes inventées au même format. Le même code fonctionne sur le vrai fichier dans Colab.

Les graphiques (matplotlib/seaborn) demandés aux étapes 6 et 12 ne sont pas disponibles dans cet exécuteur : fais-les dans Colab.

Session normale 2025

Examen Python : corrigé

⚠ Ambiguïtés de l'énoncé
  • Q5 : le format de notes.txt n'est pas donné ; on suppose « nom note » par ligne et on prend le dernier mot.
  • Q7 parle de « valeurs non numériques (NaN) » : en réalité NaN est un float (« Not a Number ») ; on teste donc np.isnan.
  • Problème : « isbn est une variable de classe » mais doit identifier chaque livre → la lecture la plus logique : un compteur de classe qui attribue un numéro à chaque instance.
Brouillon

Console libre

Écris ce que tu veux : les fichiers titanic.csv, people.tsv et notes.txt sont disponibles. Ctrl+Entrée exécute le bloc actif.

Ne pas tomber dedans

Pièges classiques

input() renvoie une chaîne. input("âge") + 1 → TypeError ; "5" * 2 → "55". Convertir avec int()/float().
= n'est pas ==. = affecte, == compare. if x = 3: → SyntaxError.
/ donne toujours un float (10 / 2 = 5.0) ; // la division entière ; % le reste.
Les index commencent à 0 et la borne de fin est exclue : range(1, 5) → 1, 2, 3, 4 ; l[1:3] → éléments 1 et 2. Exception : df.loc[0:3] inclut 3.
Tuple d'un seul élément : ("x") est une chaîne, ("x",) un tuple.
{} crée un dictionnaire vide, pas un set : le set vide s'écrit set().
remove vs discard sur un set : remove lève KeyError si l'élément est absent, discard non.
append vs extend : [1,2].append([3,4]) → [1, 2, [3, 4]] ; extend → [1, 2, 3, 4].
Oublier self dans une méthode → TypeError « takes 0 positional arguments but 1 was given ».
Oublier super().__init__() dans la classe fille → les attributs du parent n'existent pas.
A * B n'est pas le produit matriciel avec NumPy : c'est case par case. Produit matriciel : A @ B ou np.dot(A, B).
Filtre pandas : and/or → ValueError ; utiliser &, | et des parenthèses autour de chaque condition.
Une méthode pandas renvoie souvent une copie : df.dropna() seul ne change rien ; écrire df = df.dropna().
Cours : confondre HL7 (format d'échange) et SNOMED/LOINC (terminologies) ; confondre DMI (un établissement) et DMP (partagé).
Mémorisation

Flashcards

Clique sur une carte pour la retourner.
Auto-évaluation

Quiz (30 questions)

0 / 0
Méthode

Plan de révision en 4 étapes

1 · Cours théorique

Tableaux en mode auto-test (dossiers, normes, NIST) jusqu'à 100 %. Les sigles tombent en QCM.

2 · Bases + collections

Refais TP0 et TP1 sans regarder : écris, exécute, corrige. Puis les blocs list/tuple/set/dict.

3 · POO + NumPy

Réécris la classe Employé de mémoire. Fais un TD de matrices à la main puis vérifie avec NumPy.

4 · Pandas + examen

TD Titanic complet, puis l'examen 2025 en temps limité (1 h 30). Termine par le quiz et les flashcards.