-
Notifications
You must be signed in to change notification settings - Fork 9
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[Validation] Classe Validation qui retourne la decision de l’arbre de decision empirique de l’hopital Foche #52
Comments
@Karinehoo voir le script que Tiphaine avait développé: # -*- coding: utf-8 -*-
"""
Created on Tue Nov 20 15:34:14 2018
@author: 212561583
"""
import pandas as pd
import numpy as np
#------------------------------------------------------------------------------
def decisionLoop(test0,test1,test2):
if test0:
if test1:
return test2
else:
return False
else:
return test2
def test_0(ligne_glob): #Le patient était sous ECMO?
return ligne_glob.ECMO_during_surgery.values[0]
def test_1(ligne_bloc, pam_inf = 55, pam_sup = 65, threshold_percentage = 90):
#ECMO weaning test
pam = (ligne_bloc > pam_inf) & (ligne_bloc < pam_sup)
try:
test1_pam = pam.value_counts(normalize=True)[True]*100 > threshold_percentage
except:
test1_pam = False
test1_adrenaline = True # a remplir avec le vrai test: peu de noradrenaline et pas d'adrenaline
test1_pap = ligne_bloc.iloc[0] > ligne_bloc.iloc[15] #diminution des PAP, critère à affiner
return test1_pam & test1_adrenaline & test1_pap
def test_2(ligne_bloc):
# iNO weaning test
test2_pao2Fio2 = True # a remplir avec le vrai test: augmentation de ce rapport
test2_pap = ligne_bloc.iloc[15] > ligne_bloc.iloc[30] #diminution des PAP, critère à affiner
return test2_pao2Fio2 & test2_pap
def display_performance(results):
compare_egal = results[:,1] == results[:,2]
unique, counts = np.unique(compare_egal, return_counts=True)
compare_fauxPos = results[:,1] > results[:,2]
unique_fauxPos, counts_fauxPos = np.unique(compare_fauxPos, return_counts=True)
compare_fauxNeg = results[:,1] < results[:,2]
unique_fauxNeg, counts_fauxNeg = np.unique(compare_fauxNeg, return_counts=True)
print "Pourcentage de concordance: ", float(counts[list(unique).index(True)])/len(results)*100
print "Pourcentage de faux positifs: ", float(counts_fauxPos[list(unique_fauxPos).index(True)])/len(results)*100
print "Pourcentage de faux négatifs: ", float(counts_fauxNeg[list(unique_fauxNeg).index(True)])/len(results)*100
def apply_decisionTree(available_pat,df_glob,df):
results = np.zeros([len(available_pat),3])
ind = 0
for pat in available_pat:
ligne_glob = df_glob[df_glob.numero == float(pat)]
ligne_bloc = df[str(pat)]
test0 = test_0(ligne_glob)
test1 = test_1(ligne_bloc)
test2 = test_2(ligne_bloc)
results[ind,0] = pat
results[ind,1] = int(decisionLoop(test0,test1,test2))
results[ind,2] = ligne_glob[' immediate_extubation'].values[0]
ind += 1
return results
#------------------------------------------------------------------------------
fileName_glob = r'base LgTx IA 24oct2018.csv'
df_glob = pd.read_csv(fileName_glob,sep=";")
extub_pat = list(df_glob[df_glob[' immediate_extubation'] == 1].numero.astype('str'))
typeData = 'PASm' #'PAPmoy' #
fileName = r'\%s.csv'%typeData
df = pd.read_csv(fileName)
df = df.drop(df.columns[0],axis=1)
df = df.replace(0,np.nan,regex=True)
emptyCol = df.count() < len(df)*0.5
df = df.drop(df.columns[emptyCol],axis=1)
#------------------------------------------------------------------------------
# Décision de l'arbre sur un exemple de patient donné
"""results = apply_decisionTree(['186.0'],df_glob,df)
print "Decision finale arbre: ", results[0,1]
print "Decision finale réelle: ", results[0,2]"""
#------------------------------------------------------------------------------
# Application de l'arbre simulé à toute la base
available_pat = list(df.columns)
results = apply_decisionTree(available_pat,df_glob,df)
display_performance(results) |
Pour refaire l'arbre de décison empirique j'ai besoin notamment de savoir si il y a eu une ECMO durant l'opération et les variables qui le décrivent sont des variables "STATIC_CATEGORIES/patient_intraoperative" donc non prises en compte dans la class Dataset que l'on utilise pour la modélisation.
Désolée si c'est de la répétition et merci ! |
Hey @Karinehoo, top que tu avances là dessus. Si tu veux récupérer l'intégralité du CSV, tu peux aussi utiliser les variables définies dans le fichier
Pour ce qui concerne les variables intra opératoire, on peut tout à fait les ajouter, mais elles sont redondantes avec les données dynamiques et on voulait séparer les données statiques avant l'opération, des données dynamiques pendant opération (cf papier des chercheurs de l'hôpital de Berlin) |
No description provided.
The text was updated successfully, but these errors were encountered: