예제 #1
0
def creation_fiche_medecin(onto):
    print('Traitement fichier medecin...')
    # Récupérer une liste de toutes les classes de l'onto
    classes = list(onto.classes())
    individus = list(onto.individuals())
    # Lire le fichier qui contient les infos sur les patients
    fiche_df = pd.read_csv('Data/rapport_du_medecin.csv')

    # On parcourt le fichier qui contient les infos remplies par le médecin sur le patient
    for index, row in fiche_df.iterrows():
        # Récupérer le code du patient consulté
        code_patient = get_num_individu(row['A consulté le patient'], onto)
        patient = individus[code_patient]
        # Instancier le médecin
        medecin = classes[get_num_classe('Medecin', onto)]()
        medecin.name = str(row['Nom']) + '_' + str(row['Prénom'])
        medecin.ID = str(row['Nom']) + '_' + str(row['Prénom'])
        medecin.Nom = row['Nom']
        medecin.Prenom.append(row['Prénom'])
        medecin.Spécialité.append(row['Spécialité'])
        # Ajouter la consultation
        medecin.Date_Consultation.append(row['Date consultation'])
        # Infos sur le patient
        patient.ausculté_par.append(onto.search(iri='*' + medecin.name)[0])
        medecin.a_ausculté.append(onto.search(iri='*' + patient.name)[0])
        patient.Gravité_symptomes.append(row['Gravité symptomes'])
        # Orientation du patient par le medecin
        patient.orienté_vers.append(
            onto.search(iri='*' + row['Orientation'])[0])
        patient.Prise_En_Charge.append(row['Prise en charge'])
        patient.Suspicion_Covid = True if row[
            'Suspicion Covid'] == 'Oui' else False

    # Output vers le fichier .owl
    # onto.save(file='ontology_patients.owl', format='ntriples')

    return onto
 class habite_a(Patient >> classes[get_num_classe('Localisation', onto)]
                ):
     pass
 class prend(Patient >> classes[get_num_classe('Traitements', onto)]):
     pass
 class est_atteint_de(
         Patient >> classes[get_num_classe('Maladies', onto)]):
     pass
def instancier_patients(onto):

    print('Traitement fichier patients...')
    # Récupérer une liste de toutes les classes de l'onto
    classes = list(onto.classes())
    # Lire le fichier qui contient les infos sur les patients
    patients_df = pd.read_csv('Data/informations_patient.csv')

    # Parcourir le fichier de patient ligne par ligne
    for index, row in patients_df.iterrows():
        # Récupérer le numéro de la classe Patient
        patient = classes[get_num_classe('Patient', onto)]
        pat = patient()  # Instancier le patient
        # Remplir toute les infos du patient selon les donnés du fichier csv
        pat.Sexe = row['Sexe']
        pat.name = row['ID']
        pat.ID = row['ID']
        pat.Age = row['Age']
        pat.Nom = row['Nom']
        pat.Prenom.append(row['Prénom'])
        pat.Poids = row['Poids']
        pat.Taille = row['Taille']
        pat.Temperature = row['Temperature']
        pat.Est_Enceinte = True if row['Enceinte'] == 'oui' else False
        # Traitement de la localisation
        # Récupérer le numéro de la wilaya du patient dans l'ontologie pour l'instancier
        num_wilaya = (get_num_classe(str(row['Wilaya']), onto) -
                      get_num_classe('Adrar', onto) + 1)
        commune = onto.search(iri='*' + str(row['Commune']) + '_' +
                              str(num_wilaya))
        pat.habite_a.append(commune[0])
        # Récupérer les maladies, symptomes et traitements fournis par le patient
        maladies = str(row['Antécédent médical']).split(',')
        medics = str(row['Traitements']).split(',')
        symptomes = str(row['Symptomes']).split(',')
        # Parcourir les symptomes mentionnés par le patient
        for sp in symptomes:
            # Vérifier que la variable n'est pas vide
            if sp != 'nan':
                # Si elle est déjà instancié, on la lie à l'object property
                if (onto.search(iri='*' + sp) != []):
                    pat.présente.append(onto.search(iri='*' + sp)[0])
                # Sinon on l'instancie
                else:
                    symptome = classes[get_num_classe('Symptomes', onto)]
                    symp = symptome(sp.replace(' ', ''))
                    pat.présente.append(symp)
        # Récupérer les traitements que prend le patient
        for tr in medics:
            if tr != 'nan':
                if (onto.search(iri='*' + tr) != []):
                    pat.prend.append(onto.search(iri='*' + tr)[0])
                else:
                    traitement = classes[get_num_classe('Traitements', onto)]
                    trait = traitement(tr.replace(' ', ''))
                    pat.prend.append(trait)
        # Parcourir les maladies mentionnés par le patient
        for md in maladies:
            if md != 'nan':
                if (onto.search(iri='*' + md) != []):
                    pat.est_atteint_de.append(onto.search(iri='*' + md)[0])
                else:
                    maladie = classes[get_num_classe('Maladies', onto)]
                    mld = maladie(md.replace(' ', ''))
                    pat.est_atteint_de.append(mld)

    # Output vers le fichier .owl
    # onto.save(file='ontology_patients.owl', format='ntriples')
    return onto