Nom à trouver
Ce notebook est à destination de l'équipe travaillant autours du projet.
L'objectif est de présenter sommairement le projet et les données.
Chaque jour, environ 50 000 personnes se présentent dans un service d'accueil des urgences (SAU) en France. En moyenne, 75% des patients retournent à domicile, et 20% sont hospitalisés. La durée moyenne de présence au SAU est longue. On estime que seulement 20% attendront moins d'une heure, tandis que ~30% attendront entre 1h et 2H et ~30% attendront en 2 et 4H. Enfin, un peu plus de 10% resteront au SAU entre 4 et 6H. Dans un contexte de pénurie de soignants, le recours à la consultation au SAU est en constante augmentation depuis plusieurs années. L'optimisation du circuit des urgences est une problématique centrale. Le cout humain et financier des dysfonctionnements du circuit et de l'offre de soin est important.
Le parcours classique du circuit des urgences est le suivant :
Le patient est classé selon un score de gravité (bleu, vert, jaune, orange, rouge, ou 1-2-3-4-5)
A la suite de cette consultation, plusieurs cas de figures selon la situation. Le patient peut sortir avec ou sans ordonnance si le diagnostic est posé par l'examen clinique et ne nécéssite ni examen, ni hospitalisation. Le patient peut nécéssiter la réalisation d'examens (prise de sang, radiographie, scanner) ou motiver un avis d'un spécialiste. Auquel cas il doit attendre
Entre chaque étape, le patient attend pendant une durée plus ou moins longue. Le médecin lui « jongle » avec plusieurs patients à la fois à des étapes différentes.
Nous proposons d'aider à raccourcir le temps entre l'arrivée du patient et sa sortie, en ne subordonnant pas la décision de réaliser un examen biologique à l'examen clinique du médecin. Nous savons que le temps entre l'arrivée au SAU et la première visite avec le médecin est le temps le plus long et le plus mal vécu par les patients.
Nous proposons à l'aide d'un algorithme d'apprentissage statistique de prédire, dès les données fournies par l'IAO, la nécéssité de réaliser un examen de biologie médicale, afin de permettre aux IDE de prélever cet examen juste après l'IAO, de sorte que le médecin dès sa première visite peut conclure avec les résultats de la biologie, qu'il aurait sans cela, demandé et attendu de récuperer avant de conclure et de prendre en charge le patient.
Nous faisons l'hypothèse que la réalisation ou non (variable qualitative binaire) d'une biologie médicale est (en grande partie) déterminée par les variables disponibles dès l'IAO.
Données d'entrée | Algorithme | Données de sortie |
---|---|---|
Vecteur {0,1}^d d'examens de biologie associée à sa réalisation (1) ou non (0) | ||
Age | MLP NLP (Embeddings, Word2Vec ...) Autres |
Sodium (Na) - {0,1} |
Sexe | Potassium (K) - {0,1} | |
Motif de consultation | Numération sanguine (NFS) - {0,1} | |
Paramètres vitaux (FC, SpO2, PA, T°, FR, EVA) | Hémocultures - {0,1} | |
Ordonnance d'entrée du patient | INR - {0,1} | |
... |
Les étapes clés de ce projet sont les suivantes :
Les données sont issus du projet MIMIC-IV.
Le projet MIMIC est un projet d'open-data médical initié par l'hopital Beth Israel Deaconess à Boston.
Initialement, seul des données de réanimation été accessible.
Pour sa 4ème édition, a été mis à disposition un jeu de données couvrant un spectre bien plus large :
L'ensemble de ces données ont été mis à disposition dans le cadre de projets complémentaires :
Ces bases sont complémentaires dans le sens où chaque collecte a été faite durant une période temporelle spécifique, qui se recoupe plus où moins.
Certains éléments nécessaires à l'exploitation de MIMIC-IV-ED sont présent dans MIMIC-IV.
La lecture de la documentation de MIMIC-IV et de MIMIC-IV-ED est vivement recommandé (lien ci-dessus).
En complément, un certains nombre de ressources est disponible sur le site du projet MIMIC-IV.
Nous proposons de travailler autours de ce jeu de données avec pour objectif la tache suivante : prédire les examens biologiques qui seront réalisés lors de l'arrivé d'un patient aux urgences
La base de données de biologie étant volumineuse (nous y reviendrons plus bas), un pré-traitement des données a été effectué.
Le pré-traitement est le suivant :
Un token de téléchargement des données vous a normallement été mis à disposition.
pip install -r requirements.txt
python download_data.py [TOKEN]
Le script de transformation est disponible dans database_constitution/database_constitution.py
.
Les données sont téléchargés dans le dossier data.
Il est facile de requêter une base sqlite à l'aide de pandas.
import pandas as pd
import sqlite3
# D'abord, il fait établir une connection avec la base
conn = sqlite3.connect("./data/mimic-iv.sqlite")
# Ensuite, on effectue des requête à l'aide de la fonction read_sql de pandas, pour récupérer tous les éléments de la table, il suffit de faire un SELECT * FROM nom_de_la_table
triage = pd.read_sql("SELECT * FROM triage", conn)
triage
index | subject_id | stay_id | temperature | heartrate | resprate | o2sat | sbp | dbp | pain | acuity | chiefcomplaint | |
---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 0 | 15585360 | 37573921 | 97.0 | 87.0 | 18.0 | 100.0 | 150.0 | 71.0 | 10.0 | 3.0 | |
1 | 1 | 17192424 | 34160628 | 98.6 | 82.0 | NaN | 100.0 | 111.0 | 81.0 | 3.0 | 3.0 | |
2 | 2 | 15248757 | 32172727 | 97.1 | 112.0 | 20.0 | 100.0 | 147.0 | 97.0 | 8.0 | 4.0 | |
3 | 3 | 16648037 | 38946064 | 98.5 | 59.0 | 18.0 | 99.0 | 160.0 | 86.0 | 2.0 | 2.0 | |
4 | 4 | 13492931 | 39828574 | 100.6 | 90.0 | 16.0 | 96.0 | 107.0 | 55.0 | 0.0 | 3.0 | ' |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
448967 | 448967 | 17192157 | 31192693 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | None |
448968 | 448968 | 15632852 | 37860864 | 98.2 | 115.0 | 18.0 | 100.0 | 124.0 | 68.0 | 0.0 | 3.0 | None |
448969 | 448969 | 17526143 | 30744048 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | 2.0 | None |
448970 | 448970 | 18321345 | 37024607 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | None |
448971 | 448971 | 11894181 | 39631961 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | 1.0 | None |
448972 rows × 12 columns
L'avantage de travailler avec une base sqlite, c'est qu'il nous permet de manipuler et transformer des données qui ne peuvent pas toujours tenir en mémoire vive.
Quelques exemples de traitements :
# Sélectionner un nombre limité de lignes
labevents_100 = pd.read_sql("SELECT * FROM labevents LIMIT 100", conn)
print("Dimension de labevents_100 : ", labevents_100.shape)
# Compter le nombre de ligne
labevents_n = pd.read_sql("SELECT COUNT(0) FROM labevents", conn)
print("Nombre de lignes dans labevents :", labevents_n.values[0][0])
# Filter des données
labevents_10000764 = pd.read_sql("SELECT * FROM labevents WHERE subject_id = 10000764", conn)
print("Contenu de labevents pour le patient n°10000764 :", labevents_10000764.shape)
Dimension de labevents_100 : (100, 17) Nombre de lignes dans labevents : 11594360 Contenu de labevents pour le patient n°10000764 : (27, 17)
Grâce à un système d'index, les transformations de données via sqlite se font relativement rapidement.
C'est notamment le cas pour les filtre (WHERE) et les jointure.
Un exemple de jointure :
# On récupère le libellé des examens
labevents_with_item = pd.read_sql("""
SELECT *
FROM labevents as le
LEFT JOIN d_labitems as li
ON le.itemid = li.itemid
LIMIT 1000
""", conn)
# Tous les types de jointures : LEFT, RIGHT, INNER, OUTER sont possible
# L'object retourné est toujours un pandas dataframe sur lequel on peux faire les transformations habituelles
labevents_with_item.head(10)
index | labevent_id | subject_id | hadm_id | specimen_id | itemid | charttime | storetime | value | valuenum | ... | flag | priority | comments | stay_id | index | itemid | label | fluid | category | loinc_code | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 0 | 2599 | 10000764 | NaN | 76601642 | 50971 | 2132-10-14 20:15:00 | 2132-10-14 21:04:00 | 4.1 | 4.1 | ... | None | STAT | None | 35420907 | 1236 | 50971 | Potassium | Blood | Chemistry | 2823-3 |
1 | 1 | 2578 | 10000764 | NaN | 6228584 | 51146 | 2132-10-14 20:15:00 | 2132-10-14 20:33:00 | 0.1 | 0.1 | ... | None | STAT | None | 35420907 | 192 | 51146 | Basophils | Blood | Hematology | 704-7 |
2 | 2 | 2579 | 10000764 | NaN | 6228584 | 51200 | 2132-10-14 20:15:00 | 2132-10-14 20:33:00 | 0.3 | 0.3 | ... | None | STAT | None | 35420907 | 619 | 51200 | Eosinophils | Blood | Hematology | 711-2 |
3 | 3 | 2580 | 10000764 | NaN | 6228584 | 51221 | 2132-10-14 20:15:00 | 2132-10-14 20:33:00 | 40.2 | 40.2 | ... | None | STAT | None | 35420907 | 765 | 51221 | Hematocrit | Blood | Hematology | 4544-3 |
4 | 4 | 2581 | 10000764 | NaN | 6228584 | 51222 | 2132-10-14 20:15:00 | 2132-10-14 20:33:00 | 14.1 | 14.1 | ... | None | STAT | None | 35420907 | 775 | 51222 | Hemoglobin | Blood | Hematology | 718-7 |
5 | 5 | 2582 | 10000764 | NaN | 6228584 | 51244 | 2132-10-14 20:15:00 | 2132-10-14 20:33:00 | 4.7 | 4.7 | ... | abnormal | STAT | None | 35420907 | 991 | 51244 | Lymphocytes | Blood | Hematology | 731-0 |
6 | 6 | 2583 | 10000764 | NaN | 6228584 | 51248 | 2132-10-14 20:15:00 | 2132-10-14 20:33:00 | 32.8 | 32.8 | ... | abnormal | STAT | None | 35420907 | 1016 | 51248 | MCH | Blood | Hematology | 785-6 |
7 | 7 | 2584 | 10000764 | NaN | 6228584 | 51249 | 2132-10-14 20:15:00 | 2132-10-14 20:33:00 | 35.1 | 35.1 | ... | abnormal | STAT | None | 35420907 | 1017 | 51249 | MCHC | Blood | Hematology | 786-4 |
8 | 8 | 2585 | 10000764 | NaN | 6228584 | 51250 | 2132-10-14 20:15:00 | 2132-10-14 20:33:00 | 93 | 93.0 | ... | None | STAT | None | 35420907 | 1019 | 51250 | MCV | Blood | Hematology | 787-2 |
9 | 9 | 2586 | 10000764 | NaN | 6228584 | 51254 | 2132-10-14 20:15:00 | 2132-10-14 20:33:00 | 3.8 | 3.8 | ... | None | STAT | None | 35420907 | 1051 | 51254 | Monocytes | Blood | Hematology | 742-7 |
10 rows × 23 columns
L'ensemble des tables disponible est le suivant :
pd.read_sql("""
SELECT tbl_name AS nom_de_la_table
FROM sqlite_master
GROUP BY tbl_name
""", conn)
nom_de_la_table | |
---|---|
0 | d_labitems |
1 | diagnosis |
2 | edstays |
3 | labevents |
4 | medrecon |
5 | microbiologyevents |
6 | patients |
7 | triage |
L'ensemble des tables correspondent aux fichiers correspondant au sein de MIMIC-IV-ED.
Il y a quelques exceptions qui proviennent de MIMIC-IV :
d_labitems contient le libellé des examens de biologie.
Chaque libellé a un identifiant unique itemid
. Il est utile à l'identification des examens dans la table labevents.
Plus de détail ici : https://mimic.mit.edu/docs/iv/modules/hosp/d_labitems/
pd.read_sql("SELECT * FROM d_labitems LIMIT 10", conn)
index | itemid | label | fluid | category | loinc_code | |
---|---|---|---|---|---|---|
0 | 0 | 51905 | Other Body Fluid | Chemistry | None | |
1 | 1 | 51532 | 11-Deoxycorticosterone | Blood | Chemistry | None |
2 | 2 | 51957 | 17-Hydroxycorticosteroids | Urine | Chemistry | None |
3 | 3 | 51958 | 17-Ketosteroids, Urine | Urine | Chemistry | None |
4 | 4 | 52068 | 24 Hr | Blood | Hematology | None |
5 | 5 | 51066 | 24 hr Calcium | Urine | Chemistry | None |
6 | 6 | 51067 | 24 hr Creatinine | Urine | Chemistry | None |
7 | 7 | 51068 | 24 hr Protein | Urine | Chemistry | None |
8 | 8 | 50853 | 25-OH Vitamin D | Blood | Chemistry | None |
9 | 9 | 51533 | 3t | Blood | Chemistry | None |
labevents contient les examents de biologie ainsi que leurs résultat. Chaque examen a deux dates associés :
Chaque ligne correspond au résultat d'un examen (par exemple, dosage du potassium, identifié par itemid
) et est identifié par un identifiant unique labevent_id
. Plusieurs examens peuvent être effectué sur le même prélèvement sanguin.
Chaque prélèvement est identifié par un identifiant unique specimen_id
.
Enfin, subject_id
identifie le patient, hadm_id
l'identifiant de séjour lorsque le patient a été hospitalisé au décours de son passage aux urgences et stay_id
l'identifiant du passage aux urgences.
Plus de détail ici : https://mimic.mit.edu/docs/iv/modules/hosp/labevents/
pd.read_sql("SELECT * FROM labevents LIMIT 10", conn)
index | labevent_id | subject_id | hadm_id | specimen_id | itemid | charttime | storetime | value | valuenum | valueuom | ref_range_lower | ref_range_upper | flag | priority | comments | stay_id | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 0 | 2599 | 10000764 | None | 76601642 | 50971 | 2132-10-14 20:15:00 | 2132-10-14 21:04:00 | 4.1 | 4.1 | mEq/L | 3.3 | 5.1 | None | STAT | None | 35420907 |
1 | 1 | 2578 | 10000764 | None | 6228584 | 51146 | 2132-10-14 20:15:00 | 2132-10-14 20:33:00 | 0.1 | 0.1 | % | 0.0 | 2.0 | None | STAT | None | 35420907 |
2 | 2 | 2579 | 10000764 | None | 6228584 | 51200 | 2132-10-14 20:15:00 | 2132-10-14 20:33:00 | 0.3 | 0.3 | % | 0.0 | 4.0 | None | STAT | None | 35420907 |
3 | 3 | 2580 | 10000764 | None | 6228584 | 51221 | 2132-10-14 20:15:00 | 2132-10-14 20:33:00 | 40.2 | 40.2 | % | 40.0 | 52.0 | None | STAT | None | 35420907 |
4 | 4 | 2581 | 10000764 | None | 6228584 | 51222 | 2132-10-14 20:15:00 | 2132-10-14 20:33:00 | 14.1 | 14.1 | g/dL | 14.0 | 18.0 | None | STAT | None | 35420907 |
5 | 5 | 2582 | 10000764 | None | 6228584 | 51244 | 2132-10-14 20:15:00 | 2132-10-14 20:33:00 | 4.7 | 4.7 | % | 18.0 | 42.0 | abnormal | STAT | None | 35420907 |
6 | 6 | 2583 | 10000764 | None | 6228584 | 51248 | 2132-10-14 20:15:00 | 2132-10-14 20:33:00 | 32.8 | 32.8 | pg | 27.0 | 32.0 | abnormal | STAT | None | 35420907 |
7 | 7 | 2584 | 10000764 | None | 6228584 | 51249 | 2132-10-14 20:15:00 | 2132-10-14 20:33:00 | 35.1 | 35.1 | % | 31.0 | 35.0 | abnormal | STAT | None | 35420907 |
8 | 8 | 2585 | 10000764 | None | 6228584 | 51250 | 2132-10-14 20:15:00 | 2132-10-14 20:33:00 | 93 | 93.0 | fL | 82.0 | 98.0 | None | STAT | None | 35420907 |
9 | 9 | 2586 | 10000764 | None | 6228584 | 51254 | 2132-10-14 20:15:00 | 2132-10-14 20:33:00 | 3.8 | 3.8 | % | 2.0 | 11.0 | None | STAT | None | 35420907 |
Parmis les examens de biologie, certains revêtent d'un statut particulier, il s'agit des examens de microbiologie, c'est à dire les examens recherchant la présence de bactérie dans un prélèvement biologique (sang, urine, selle, liquide céphalo-rachidien ...).
Ils sont enregistrés dans une table dédié : microbiologyevents
Le champs "spec_type_desc" contient le site de prélèvement, souvent le sang (BLOOD CULTURE) où les urines (URINES) (cf plus bas).
L'interprétation de ces examens faisant l'objet de spécificté, on retrouve de nombreuses colonnes spécifiant : la valeur quantitative de l'analyse, son interprétation, le nimbre de résistance de la bactérie identifié ... En première intention, il semble qu'il s'agit de champs que nous n'aurons pas à exploiter.
Plus de détail ici : https://mimic.mit.edu/docs/iv/modules/hosp/microbiologyevents/
pd.read_sql("SELECT * FROM microbiologyevents LIMIT 10", conn)
index | microevent_id | subject_id | hadm_id | micro_specimen_id | chartdate | charttime | spec_itemid | spec_type_desc | test_seq | ... | isolate_num | quantity | ab_itemid | ab_name | dilution_text | dilution_comparison | dilution_value | interpretation | comments | stay_id | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 0 | 1562 | 10004235 | None | 139903 | 2196-02-24 00:00:00 | 2196-02-24 12:40:00 | 70012 | BLOOD CULTURE | 1 | ... | 1.0 | None | 90013.0 | TOBRAMYCIN | <=1 | <= | 1.00 | S | None | 38926302 |
1 | 1 | 1558 | 10004235 | None | 139903 | 2196-02-24 00:00:00 | 2196-02-24 12:40:00 | 70012 | BLOOD CULTURE | 1 | ... | 1.0 | None | 90004.0 | AMPICILLIN | 8 | = | 8.00 | S | None | 38926302 |
2 | 2 | 1559 | 10004235 | None | 139903 | 2196-02-24 00:00:00 | 2196-02-24 12:40:00 | 70012 | BLOOD CULTURE | 1 | ... | 1.0 | None | 90005.0 | CEFAZOLIN | <=4 | <= | 4.00 | S | None | 38926302 |
3 | 3 | 1560 | 10004235 | None | 139903 | 2196-02-24 00:00:00 | 2196-02-24 12:40:00 | 70012 | BLOOD CULTURE | 1 | ... | 1.0 | None | 90008.0 | TRIMETHOPRIM/SULFA | <=1 | <= | 1.00 | S | None | 38926302 |
4 | 4 | 1561 | 10004235 | None | 139903 | 2196-02-24 00:00:00 | 2196-02-24 12:40:00 | 70012 | BLOOD CULTURE | 1 | ... | 1.0 | None | 90012.0 | GENTAMICIN | <=1 | <= | 1.00 | S | None | 38926302 |
5 | 5 | 1563 | 10004235 | None | 139903 | 2196-02-24 00:00:00 | 2196-02-24 12:40:00 | 70012 | BLOOD CULTURE | 1 | ... | 1.0 | None | 90017.0 | CEFTAZIDIME | <=1 | <= | 1.00 | S | None | 38926302 |
6 | 6 | 1564 | 10004235 | None | 139903 | 2196-02-24 00:00:00 | 2196-02-24 12:40:00 | 70012 | BLOOD CULTURE | 1 | ... | 1.0 | None | 90018.0 | CEFTRIAXONE | <=1 | <= | 1.00 | S | None | 38926302 |
7 | 7 | 1565 | 10004235 | None | 139903 | 2196-02-24 00:00:00 | 2196-02-24 12:40:00 | 70012 | BLOOD CULTURE | 1 | ... | 1.0 | None | 90019.0 | CIPROFLOXACIN | <=0.25 | <= | 0.25 | S | None | 38926302 |
8 | 8 | 1566 | 10004235 | None | 139903 | 2196-02-24 00:00:00 | 2196-02-24 12:40:00 | 70012 | BLOOD CULTURE | 1 | ... | 1.0 | None | 90022.0 | AMPICILLIN/SULBACTAM | <=2 | <= | 2.00 | S | None | 38926302 |
9 | 9 | 1567 | 10004235 | None | 139903 | 2196-02-24 00:00:00 | 2196-02-24 12:40:00 | 70012 | BLOOD CULTURE | 1 | ... | 1.0 | None | 90026.0 | PIPERACILLIN/TAZO | <=4 | <= | 4.00 | S | None | 38926302 |
10 rows × 26 columns
pd.read_sql("SELECT spec_type_desc, COUNT(0) total FROM microbiologyevents GROUP BY spec_type_desc", conn).sort_values("total", ascending=False).head(10)
spec_type_desc | total | |
---|---|---|
53 | URINE | 186509 |
6 | BLOOD CULTURE | 177616 |
47 | SWAB | 15476 |
35 | PERITONEAL FLUID | 5923 |
45 | STOOL | 5426 |
18 | CSF;SPINAL FLUID | 3847 |
1 | ABSCESS | 3011 |
32 | JOINT FLUID | 2341 |
52 | TISSUE | 1825 |
44 | SPUTUM | 1587 |
La table edstays contient la liste de tout les passages aux urgences.
Sont enregistré : l'identifiant du patient, l'identifiant du séjour si le patient est hospitalisé en aval de son passage aux urgences, l'identifiant du passage aux urgences, la date et heure d'entrée et sortie.
Plus de détail ici : https://mimic.mit.edu/docs/iv/modules/ed/edstays/
pd.read_sql("SELECT * FROM edstays LIMIT 10", conn)
index | subject_id | hadm_id | stay_id | intime | outtime | |
---|---|---|---|---|---|---|
0 | 0 | 10000115 | NaN | 38081480 | 2154-12-10 02:04:00 | 2154-12-10 02:16:00 |
1 | 1 | 10000115 | NaN | 30295111 | 2154-12-17 16:37:00 | 2154-12-17 17:38:00 |
2 | 2 | 10000473 | NaN | 33267868 | 2138-03-15 20:07:00 | 2138-03-15 20:26:00 |
3 | 3 | 10000764 | 27897940.0 | 35420907 | 2132-10-14 19:31:00 | 2132-10-14 23:32:59 |
4 | 4 | 10001038 | NaN | 34301067 | 2149-08-07 08:51:00 | 2149-08-07 08:55:00 |
5 | 5 | 10001757 | NaN | 30596003 | 2170-10-15 11:06:00 | 2170-10-15 11:26:00 |
6 | 6 | 10002563 | NaN | 36308013 | 2192-11-08 14:00:00 | 2192-11-08 14:23:00 |
7 | 7 | 10003299 | 28891311.0 | 33780565 | 2178-12-10 17:04:00 | 2178-12-10 21:36:00 |
8 | 8 | 10003299 | 21404960.0 | 39680380 | 2179-06-30 09:18:00 | 2179-06-30 16:35:45 |
9 | 9 | 10003299 | 29323205.0 | 32908139 | 2181-10-22 11:46:00 | 2181-10-22 19:09:15 |
La table patient contient la liste des patients ainsi que les information relative à leurs age et genre.
La base MIMIC-IV étant pseudonymisé, toutes les dates ont été falsifié, la table patient nous donne une approximation de la véritable date des enregistrement dans le champs anchor_year_group.
Plus d'informations ici : https://mimic.mit.edu/docs/iv/modules/core/patients/
pd.read_sql("SELECT * FROM patients LIMIT 10", conn)
index | subject_id | gender | anchor_age | anchor_year | anchor_year_group | dod | |
---|---|---|---|---|---|---|---|
0 | 0 | 10021917 | M | 54 | 2147 | 2017 - 2019 | None |
1 | 1 | 10033879 | F | 28 | 2173 | 2011 - 2013 | None |
2 | 2 | 10036909 | M | 50 | 2167 | 2011 - 2013 | None |
3 | 3 | 10050355 | F | 55 | 2168 | 2014 - 2016 | None |
4 | 4 | 10050389 | M | 43 | 2133 | 2014 - 2016 | None |
5 | 5 | 10050411 | F | 52 | 2150 | 2017 - 2019 | None |
6 | 6 | 10068290 | M | 29 | 2151 | 2014 - 2016 | None |
7 | 7 | 10127166 | F | 51 | 2149 | 2008 - 2010 | None |
8 | 8 | 10143090 | M | 48 | 2155 | 2011 - 2013 | None |
9 | 9 | 10148710 | M | 67 | 2137 | 2008 - 2010 | None |
La table triage contient les données de "tri" des patients.
Le circuit classique d'un passage aux urgences est le suivant :
Ainsi, l'ensemble des informations disponible à l'arrivé du patient sont enregistré dans cette table.
Le champs chiefcomplaint est un champs de texte libre, le reste contient des variables quantitative de paramètre vitaux recueillis par l'IAO.
Ce champs peux contenir une liste, qui est alors séparé par une virgule.
Il s'agit d'un champs qui a fait l'objet d'une désidentification, ainsi si une information personnelle était présente dans la liste, elle est remplacé par le caractère "___" (3 underscore à la suite).
pd.read_sql("SELECT * FROM triage LIMIT 10", conn)
index | subject_id | stay_id | temperature | heartrate | resprate | o2sat | sbp | dbp | pain | acuity | chiefcomplaint | |
---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 0 | 15585360 | 37573921 | 97.0 | 87.0 | 18.0 | 100.0 | 150.0 | 71.0 | 10.0 | 3.0 | |
1 | 1 | 17192424 | 34160628 | 98.6 | 82.0 | NaN | 100.0 | 111.0 | 81.0 | 3.0 | 3.0 | |
2 | 2 | 15248757 | 32172727 | 97.1 | 112.0 | 20.0 | 100.0 | 147.0 | 97.0 | 8.0 | 4.0 | |
3 | 3 | 16648037 | 38946064 | 98.5 | 59.0 | 18.0 | 99.0 | 160.0 | 86.0 | 2.0 | 2.0 | |
4 | 4 | 13492931 | 39828574 | 100.6 | 90.0 | 16.0 | 96.0 | 107.0 | 55.0 | 0.0 | 3.0 | ' |
5 | 5 | 11475777 | 38193311 | 97.1 | 85.0 | 16.0 | 100.0 | 138.0 | 86.0 | 7.0 | 3.0 | - |
6 | 6 | 16615356 | 38143467 | 98.5 | 100.0 | 16.0 | 100.0 | 130.0 | 94.0 | 8.0 | 3.0 | - |
7 | 7 | 17748455 | 33063682 | 99.4 | 152.0 | 18.0 | 96.0 | 136.0 | 77.0 | 0.0 | 1.0 | - |
8 | 8 | 13718556 | 30494050 | 98.5 | 84.0 | 14.0 | 100.0 | 124.0 | 92.0 | 4.0 | 3.0 | - |
9 | 9 | 13908077 | 39580901 | 97.0 | 96.0 | 18.0 | 98.0 | 129.0 | 44.0 | 4.0 | 2.0 | - |
pd.read_sql("SELECT * FROM triage WHERE LENGTH(chiefcomplaint) > 50 LIMIT 10", conn)
index | subject_id | stay_id | temperature | heartrate | resprate | o2sat | sbp | dbp | pain | acuity | chiefcomplaint | |
---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 1305 | 12601251 | 34627547 | 98.3 | 81.0 | 16.0 | 100.0 | 172.0 | 65.0 | 3.0 | 3.0 | Abdominal distention, Abd pain, Dyspnea on exe... |
1 | 1308 | 16663465 | 36113926 | 98.8 | 58.0 | 18.0 | 98.0 | 176.0 | 71.0 | 7.0 | 2.0 | Abdominal distention, Abd pain, S/P KIDNEY TRA... |
2 | 1331 | 14248362 | 34323484 | 98.3 | 90.0 | 17.0 | 98.0 | 140.0 | 70.0 | 0.0 | 2.0 | Abdominal distention, Abnormal labs, Jaundice,... |
3 | 1332 | 11493670 | 35944304 | 96.4 | 80.0 | 17.0 | 99.0 | 105.0 | 65.0 | 0.0 | 2.0 | Abdominal distention, Abnormal labs, Jaundice,... |
4 | 1340 | 15032149 | 34358091 | 96.6 | 51.0 | 20.0 | 100.0 | 128.0 | 77.0 | 2.0 | 2.0 | Abdominal distention, Abnormal sodium level, A... |
5 | 1341 | 18160217 | 37565547 | 98.1 | 82.0 | 16.0 | 100.0 | 116.0 | 55.0 | 0.0 | 3.0 | Abdominal distention, Abnormal sodium level, T... |
6 | 1345 | 14539683 | 30348440 | 96.9 | 80.0 | 14.0 | 100.0 | 128.0 | 58.0 | NaN | 2.0 | Abdominal distention, Altered mental status, J... |
7 | 1346 | 12491283 | 39692564 | 97.7 | 88.0 | 18.0 | 99.0 | 116.0 | 70.0 | 7.0 | 2.0 | Abdominal distention, Altered mental status, J... |
8 | 1350 | 16220647 | 39977711 | 98.3 | 94.0 | 16.0 | 100.0 | 121.0 | 63.0 | 6.0 | 3.0 | Abdominal distention, Anemia, Dyspnea, RUQ abd... |
9 | 1368 | 14912902 | 36669324 | 98.4 | 119.0 | 18.0 | 96.0 | 124.0 | 76.0 | 7.0 | 2.0 | Abdominal distention, Back pain, L Shoulder pa... |
La table medrecon contient la liste des traitements habituels du patient.
Par traitement habituel, on entends les traitement que le patient prenait avant même son passage aux urgences.
Ces traitements sont tous identifiés à l'aide d'identifiant produit :
Les traitements ont été regroupés à l'aide d'une classification nommé "Enhanced Therapeutic Class", chaque groupe est identifié par un code etccode
associé au libelé du groupe etcdescription
.
Une analyse plus poussée des traitements pourrait être nécessaires, elle imposerait d'exploiter le code produit NDC.
L'idéal est d'obtenir un code ATC, qui est une classification fonctionnelle très pratique pour identifier l'indication des médicaments.
Une approche pourrait être de se reposer sur l'API de la National Library of Medicine
(https://lhncbc.nlm.nih.gov/RxNav/).
Une travail similaire a été effectué par d'autres personnes : https://github.com/fabkury/ndc_map
pd.read_sql("SELECT * FROM medrecon LIMIT 10", conn)
index | subject_id | stay_id | charttime | name | gsn | ndc | etc_rn | etccode | etcdescription | |
---|---|---|---|---|---|---|---|---|---|---|
0 | 0 | 12363835 | 34078373 | 2177-02-13 03:31:00 | Caltrate 600 + D | 63395 | 11845014031 | 1 | 6143.0 | Minerals and Electrolytes - Calcium Replacemen... |
1 | 1 | 12363835 | 34078373 | 2177-02-13 03:31:00 | Coumadin | 6562 | 15330026801 | 1 | 806.0 | Anticoagulants - Coumarin |
2 | 2 | 12363835 | 34078373 | 2177-02-13 03:31:00 | Flonase | 18368 | 12280027016 | 1 | 301.0 | Nasal Corticosteroids |
3 | 3 | 12363835 | 34078373 | 2177-02-13 03:31:00 | lidocaine | 43256 | 10544037630 | 1 | 3932.0 | Dermatological - Topical Local Anesthetic Amides |
4 | 4 | 12363835 | 34078373 | 2177-02-13 03:31:00 | omeprazole | 43137 | 16714074801 | 1 | 445.0 | Gastric Acid Secretion Reducing Agents - Proto... |
5 | 5 | 12363835 | 34078373 | 2177-02-13 03:31:00 | ranitidine HCl | 11674 | 10544036030 | 1 | 443.0 | Gastric Acid Secretion Reducers - Histamine H2... |
6 | 6 | 12363835 | 34078373 | 2177-02-13 03:31:00 | Tylenol Extra Strength | 4490 | 10003011501 | 1 | 577.0 | Analgesic or Antipyretic Non-Opioid |
7 | 7 | 15128994 | 30058281 | 2167-08-29 04:27:00 | Dialyvite | 60020 | 10542000010 | 1 | 690.0 | B-Complex Vitamin Combinations |
8 | 8 | 15128994 | 30058281 | 2167-08-29 04:27:00 | allopurinol | 2535 | 11289101302 | 1 | 2602.0 | Hyperuricemia Therapy - Xanthine Oxidase Inhib... |
9 | 9 | 15128994 | 30058281 | 2167-08-29 04:27:00 | albuterol sulfate | 28090 | 21695042308 | 1 | 5970.0 | Asthma/COPD Therapy - Beta 2-Adrenergic Agents... |
Bien que ne faisant pas partit de l'objet du projet, la table diagnosis
a été inclut dans l'éventualité où nous aurions besoin de l'explorer.
L'ensemble des diagnostic sont identifié à l'aide de la classification internationale des maladie dans sa version 9 (ICD-9).
pd.read_sql("SELECT * FROM diagnosis LIMIT 10", conn)
index | subject_id | stay_id | seq_num | icd_code | icd_version | icd_title | |
---|---|---|---|---|---|---|---|
0 | 0 | 15825222 | 39090953 | 1 | 486 | 9 | PNEUMONIA,ORGANISM UNSPECIFIED |
1 | 1 | 15825222 | 39090953 | 2 | 4254 | 9 | PRIM CARDIOMYOPATHY NEC |
2 | 2 | 11554870 | 37245764 | 1 | 5609 | 9 | INTESTINAL OBSTRUCT NOS |
3 | 3 | 19748558 | 30511202 | 1 | 49392 | 9 | ASTHMA, UNSPECIFIED, WITH ACUTE EXACERBATION |
4 | 4 | 18008347 | 34907903 | 1 | 7842 | 9 | SWELLING IN HEAD & NECK |
5 | 5 | 15475846 | 30308014 | 1 | 78079 | 9 | OTHER MALAISE AND FATIGUE |
6 | 6 | 15475846 | 30308014 | 2 | 27651 | 9 | DEHYDRATION |
7 | 7 | 16538197 | 33556881 | 1 | 6084 | 9 | MALE GEN INFLAM DIS NEC |
8 | 8 | 18438529 | 35200231 | 1 | 30500 | 9 | ALCOHOL ABUSE-UNSPEC |
9 | 9 | 17185991 | 37532781 | 1 | 7840 | 9 | HEADACHE |