Archives de catégorie : Santé

Un exemple où le choix de l’IA a toute son importance .

L’utilisation de l’intelligence artificielle (IA) dans le développement de logiciels est devenue presque incontournable. Dans cet article, je vais partager une expérience sur l’utilisation de l’IA pour accéder à des bases de données médicamenteuses en français.

Les avantages de l’IA dans le Développement

L’IA peut grandement accélérer le processus de développement en automatisant des tâches répétitives comme la recherche de documentation ou l’analyse de code. Par exemple, en donnant un exemple de classe, l’IA va pouvoir vous générer un template utilisable de fichier de test, elle pourra également vous montrer comment générer rapidement un ensemble de données « vraisemblable ». S’en passer serait prendre un risque important de perte d’efficacité.

Les limitations de l’IA

Cependant, il est important de noter que chaque IA a ses limitations. Dans le cas, suivant, on voit les manques de ChatGPT du, sans doute, à une actualisation des données depuis la création de ses données d’apprentissage. Sur le cas suivant, la différence de réponse va soit vous permettre d’accélérer votre travail, soit vous menez dans une solution impossible à réaliser dans un temps raisonnable.

J’ai récemment eu besoin d’accéder à une base de données médicamenteuse en français. J’ai d’abord consulté ChatGPT, qui m’a orienté vers la Base de données publique des médicaments du gouvernement français. Cependant, cette base de données ne propose pas d’API publique, ce qui limite son utilisation dans un contexte de développement. La solution proposée par chatGpt était soit de scraper le site, soit de me tourner vers des solutions concurrentes (non officiel) ou sur des données de recherche.

En revanche, la solution proposée par Bard (Google) était plus complète, offrant non seulement des informations sur la base de données mais aussi des alternatives pour y accéder. En effet, si ce site ne propose pas directement une api pour consulter ses données, il propose un téléchargement d’une série de fichier décrivant l’ensemble des médicaments . Si ce n’est une API, cela reste une méthode efficace pour avoir accès aux données souhaitées.

En conclusion,

Se fier à une unique source de données, quelles qu’elle soit, IA ou non, est une erreur. L’IA peut être un outil puissant pour les développeurs, mais il est crucial de comprendre ses avantages et ses limitations. Il faut tester et toujours mettre en doute une solution qui ne vous parait pas la plus simple.

L’adoption de la blockchain dans les applications médicales

La sécurisation des données dans les applications médicales est le point essentiel. Il vous faut toujours savoir qui, à quoi et quand une donnée est accédé. Cette donnée est sensible et soumise à une réglementation stricte. La blockchain est lune technologie qui permet de stocker et de vérifier de manière sécurisée les transactions et les données. Son adoption dans les applications médicales offre plusieurs avantages pour le secteur de la santé.

Pourquoi son adoption (ou pas) ?

La blockchain permet d’améliorer la sécurité des données médicales. Les informations médicales sont sensibles et doivent être protégées contre les accès non autorisés. La blockchain utilise des algorithmes cryptographiques avancés pour garantir l’intégrité et la confidentialité des données médicales, ce qui réduit le risque de falsification ou de violation de la vie privée. Cette technologie facilite la traçabilité et l’authenticité des données médicales. Dans le domaine de la santé, il est essentiel de pouvoir suivre l’origine et l’historique des données médicales, telles que les résultats des tests, les dossiers médicaux et les prescriptions. Grâce à la blockchain, chaque transaction est enregistrée de manière transparente et immuable, ce qui permet de vérifier l’authenticité des données et de retracer leur parcours.

La blockchain est également une technologie qui favorise l’interopérabilité des systèmes de santé. Les applications médicales peuvent utiliser la blockchain comme un protocole standard pour échanger des données médicales entre différentes plateformes et institutions. Cela facilite la collaboration et le partage d’informations entre les différents acteurs du secteur de la santé, tels que les hôpitaux, les médecins et les laboratoires.

Enfin, la blockchain offre des opportunités pour améliorer la gestion des identités dans les applications médicales. Grâce à la blockchain, il est possible de créer des identités numériques uniques et vérifiables pour les patients, les médecins et d’autres acteurs du domaine médical. Cela simplifie les processus d’identification, de vérification et d’autorisation, tout en préservant la confidentialité des données personnelles.

Les défis ?

L’adoption de la blockchain dans les applications médicales présente également des défis. Parmi ceux-ci, on retrouve la mise à l’échelle de la blockchain pour gérer un grand volume de transactions, la compatibilité avec les réglementations en matière de protection des données, et les coûts associés à la mise en place et à la maintenance d’une infrastructure blockchain.

Pour quelles types d’applications ?

Gestion des dossiers médicaux électroniques : La blockchain peut être utilisée pour créer un système sécurisé de gestion des dossiers médicaux électroniques. Les dossiers médicaux pourraient être stockés sur la blockchain, ce qui permettrait aux patients et aux professionnels de la santé d’accéder aux informations médicales de manière sécurisée et transparente, tout en préservant la confidentialité.

Suivi de la chaîne d’approvisionnement pharmaceutique : La blockchain peut être utilisée pour suivre le cheminement des médicaments depuis leur fabrication jusqu’à leur utilisation par les patients. Cela permet de garantir l’authenticité des médicaments, de lutter contre la contrefaçon et de surveiller les conditions de stockage pour assurer la qualité des produits pharmaceutiques.

Partage sécurisé des données de recherche médicale : La blockchain peut faciliter le partage sécurisé des données de recherche médicale entre différentes institutions et chercheurs. Les données pourraient être stockées de manière décentralisée sur la blockchain, garantissant ainsi la transparence, l’intégrité et la traçabilité des informations, tout en préservant la confidentialité des patients.

Gestion des consentements et autorisations : La blockchain peut être utilisée pour gérer les consentements et les autorisations des patients concernant l’accès à leurs données médicales. Les patients pourraient utiliser des identités numériques vérifiables sur la blockchain pour contrôler et donner leur consentement à différentes entités pour accéder à leurs informations médicales.

Systèmes d’assurance santé basés sur la blockchain : La blockchain peut être utilisée pour créer des systèmes d’assurance santé décentralisés et transparents. Les contrats d’assurance et les paiements pourraient être automatisés en utilisant des contrats intelligents sur la blockchain, réduisant ainsi les coûts administratifs et les risques de fraude.

Une technologie en vogue ou réelle ?

C’est aujourd’hui une technologie qui a dépassé le cadre de l’innovation. De nombreuses preuves de concept ont été réalisées … mais peut-on réellement parler d’une technologie accessible tel une brique classique.

Voici quelques pokes reconnu :

MedRec (2017) est un projet de recherche développé par le Massachusetts Institute of Technology (MIT) qui utilise la blockchain pour la gestion sécurisée des dossiers médicaux électroniques. Il permet aux patients de contrôler l’accès à leurs données médicales et de partager des informations spécifiques avec des professionnels de la santé. Ce projet datant de 2017 (https://www.media.mit.edu/publications/medrec-blockchain-for-medical-data-access-permission-management-and-trend-analysis/) expose comment il est possible de partager une information sensible en se basant sur une blockchain connue : l’Etherum.

SimplyVital Health utilise la blockchain pour développer des solutions de suivi et de partage des données de santé pour les fournisseurs de soins de santé et les patients. Leur plateforme, appelée Health Nexus, permet de stocker les dossiers médicaux, de suivre les résultats des traitements et de faciliter les remboursements d’assurance.

Lancé en 2017 et après plusieurs levée de fond importante, le projet semble inactif depuis 2021 …

Medicalchain est une plateforme basée sur la blockchain qui vise à sécuriser et à faciliter le partage des données médicales. Elle permet aux patients d’accéder à leurs dossiers médicaux, de donner leur consentement pour le partage des informations et de consulter des médecins en ligne en toute confidentialité.

Le projet semble toujours actif mais la roadmap affichée en ligne s’arrête en 2019 … Ce n’est pas bon signe …

En résumé

La technologie semble intéressante sur le papier mais pour le moment son adoption est lente. Ce qui est sur c’est que de depuis 2017, la date du papier pour le projet Medrec, la technologie blockchain n’est pas devenue un élément incontournable de la sécurisation du développement des applications médicales. Le terme blockchain ne fait pas encore part des mots clés des offres d’emploi dans le domaine des applications médicales.

Est-ce qu’il faut continuer à s’informer sur ces technologies ? Je pense que oui. Le domaine de la donnée médicale est encore trop peu sécurisé. L’échange de données non protégées est encore trop fréquent sous couvert qu’il s’agit de données anonymisées.

A suivre donc …

Crédits :

Les images proviennent de Freepik

Image de macrovector

Image de starline

Image de pressfoto

Base transparence – échec lors de la montée en charge

Dans l’article précédent, nous étions partis sur une extraction des données.
En effet, notre objectif était d’avoir une résultat rapide afin d’avoir des données affichages.  Nous sommes donc sur un cas d’école entre le cas utilisé par un développeur qui travail sur une extraction afin de valider ses travaux … qui échoue une fois les données de production utilisées.

En regardant le volume des données, rien de plus normal. Nous utilisons comme base de travail 3 fichiers de plusieurs gigas que nous combinons entre eux avant de faire les opérations. Autant dire que cela explose très rapidement.

En ré-ordonnant les opérations, et filtrant les données, tout rentre dans l’ordre.

Le code est le suivant :

 

self.loader.load_avantages(light)
data_avantages = self.loader.avantages[[‘entreprise_identifiant’, ‘avant_montant_ttc’]]

#calcul de la rémunération (avantage)
data = data_avantages.groupby([« entreprise_identifiant »])[« avant_montant_ttc »].sum().sort_values(ascending=False).head(nb_entreprise)

### jointure entreprise et avantage
self.loader.load_entreprises()
data_merge = merge(data, self.loader.entreprises, how= »left », left_on=[« entreprise_identifiant »], right_on= »identifiant »)
data_merge.to_excel(writer, sheet_name= »Avantage »)


A noter :

data = data_avantages.groupby([« entreprise_identifiant »])[« avant_montant_ttc »].sum().sort_values(ascending=False).head(nb_entreprise)

4 opérations dans cette ligne.

  • Le groupby permet de regrouper l’ensemble des avantages  par entreprise.
  • Le sum : permet de les cumuler
  • Le sort_values : permet de les trier dans l’ordre croissant
  • Le head permet de ne récupérer que les nb_entreprises les plus important.

Le github du projet a été mis à jour : https://github.com/SaugetMarc/transparence

 

 

 

 

 

 

Python Pandas Excel : un premier formatage

L’objectif de cet article est donc de montrer une chaîne complète de traitement de l’information, permettant à partir d’un ensemble de fichier résultat de type CSV, d’aller à un tableau formaté, pouvant être directement diffusé.

Le choix des données initiales

Pour avoir une base de travail, le plus simple est de partir sur des données issues de l’Open Data. Ces données sont facilement accessibles, fournies dans un résultat exploitable .. et sont souvent des mines d’information.

Mon choix c’est fait sur la base de données Transparence. Ces données sont directement accessible sur le portail suivant : transparence-santé.

La modélisation des données est la suivante :

    • Un fichier pour la description des entreprises
    • Un fichier pour la description des avantages
    • Un fichier pour la description des conventions.

La manipulation des données en Python

Nous allons faire simple, car dans ce cas précis, l’objectif est de voir comment charger les données, renseigner les jointures entre elles et produire quelques résultats.

Les données sont actuellement centrées sur l’entreprise. Notre  exemple sera de construire un graphique  contenant  les 50 entreprises les plus dépensières (convention + avantage).

Chargement et jointure des fichiers

Pour le chargement des fichiers, le plus simple est d’utiliser les méthodes mises à disposition par le frameworks Panda.  Mais avant tout chose, il est nécessaire de se faire un jeu de données possédant une taille utilisable pour les tests.

Le plus simple est de prendre une sous-sélection des fichiers de bases. Avec un environnement bash, la commande head permet de faire cela très rapidement.

head -n 50 avantage.csv > avantage_light.csv 

Une bonne habitude est d’utiliser dès que possible un fichier de configuration pour votre projet.  Les chaînes magiques ont malheureusement tendance à rester beaucoup trop longtemps dans les projets

DATA = {

'avantage' : 'data/avantage_light.csv',
'convention': 'data/convention_light.csv',
'entreprise': 'data/entreprise.csv',
'remuneration':'data/remuneration_light.csv'

}

Le chargement des fichiers se fait avec la commande suivante :

defloadcsv(self):
self.entreprises = read_csv(settings.DATA['entreprise'], header=0, delimiter=',', error_bad_lines=False)
self.avantages = read_csv(settings.DATA['avantage'], header=0, delimiter=';', error_bad_lines=False)
self.conventions = read_csv(settings.DATA['convention'], header=0, delimiter=';', error_bad_lines=False)
self.remunerations = read_csv(settings.DATA['remuneration'], header=0, delimiter=';', error_bad_lines=False)

Les travaux préparatoires sont maintenant terminés

Après une rapide analyse des fichiers, tous utilisent l’identifiant de l’entreprise comme données de jointure. Le seul point à prendre en compte porte sur le fait que suivant le fichier, l’identifiant n’a pas le même nom.  Il faut donc préciser le nom de la colonne pour pouvoir faire un rapprochement.

La jointure se fait donc à l’aide de la commande suivante :

data_merge = merge(self.loader.avantages, self.loader.entreprises, how="left", left_on=["entreprise_identifiant"], right_on="identifiant")
 
Puis, afin de regrouper les données par secteurs, il faut faire une opération de regroupement sur deux informations : le secteur et le nom de l’entreprise :
(La commande finale  head(50) permet de limiter l’extraction au 50 premières lignes, utile en cas de test)
 
data = data_merge.groupby(["secteur","entreprise_identifiant"])["avant_montant_ttc"].sum().head(50)
L’enregistrement basic dans un fichier excel se fait avec la commande suivante :
data.to_excel(writer, sheet_name="Avantage")
Simple, mais peu exploitable en production. En effet, le résultat obtenu n’est pas des plus présentable.
 

Construction du fichier excel formaté.

worksheet = writer.sheets["Avantage"]
format_size = 'C2:C'+str(data.shape[0]+1)
worksheet.conditional_format(format_size, {'type': '3_color_scale'})
worksheet.set_column('A:C', 20)

Avec ces 4 petites lignes, on a :

    • Déterminer la taille de la table
    • Changer le format de la dernière colonne (en gradiant)
    • Redimensionner la taille des 3 colonnes de notre table.

 

Pour aller plus loin, allez faire tour sur  Xlswriter.   L’ensemble des sources de ce petit projet sont ici

 

 

 

 

Power Bi, Open Data et listing des pharmacies

Voici un petit article présentant comment il est possible d’obtenir un listing dans Power BI présentant une grande majorité des pharmacies.

La première étape est de récupérer un fichier contenant l’ensemble des établissements de santé.
Le choix se fait sur le fichier Fichier Finess:

Le choix est déterminé par la certification du fichier et sa fréquence de sa mise à jour.

Ce dossier du site Open Data contient en fait plusieurs documents distincts dont le détail est visible dans l’aperçu précédent.

Pour ce premier article, nous n’aurons besoin que du fichier contenant les extractions Finess des établissements ainsi que la géolocalisation de ces établissements. En supplément, il est possible de consulter le 1er fichier permettant d’obtenir un descriptif des différentes informations contenus dans le dossier.

Le traitement dans Power Bi sera minimaliste. La première étape consiste à importer les différents fichiers CSV. Après import des fichiers, il faut faire attention au typage automatique des colonnes. En effet, pour se faire, Power BI fait un échantillonnage sur les premières colonnes du fichier. Dans le cas des départements, cela pose problème car le type numérique du début de fichier n’est pas conservé sur son intégralité (2A / 2B pour la corse par exemple). Il est donc recommandé de conserver le type alphanumérique pour toutes valeurs qui n’est pas un nombre exploitable. Ceci se fait très facilement en appliquant changeant le type.

Pour le fichier structure, les étapes sont les suivantes :

  1. Source : import initial
  2. Promoted Headers : permet de sélectionner la première ligne comme entête de la table
  3. Changed Type : permet de passer du type numérique à alphanumérique
  4. Merged Queries : permet de faire une jointure entre le référentiel des types de voie et la table structure.

Un autre point à mentionner est que, dans le fichier fournit, le type de voie est donné sous la forme d’un référentiel qui n’est pas fourni. Pour le construire relativement rapidement, il suffit d’utiliser un tableur et de sélectionner l’ensemble des valeurs distincte de la colonne typvoie. Une fois la sélection obtenue, il est possible de créer son propre référentiel après avoir complété l’ensemble des libellés associés.

 

Nous obtenons donc 3 fichiers qu’il est possible le lier par la suite dans l’écran de modélisation.

Un dernier point de détail concerne le widget utilisé pour la localisation des établissements. Celui fonctionne à l’aide des adresses postales. L’inconvénient est quand le fichier fourni, l’adresse est éclaté dans plusieurs champs. Un moyen simple pour contourner ce problème est d’ajouter une colonne calculée à notre table, regroupant l’ensemble des champs devant être joint. On peut voir dans cette formule l’utilisation du référentiel sur le type de voie et l’ajout, en dur, du pays. Le fichier étant localisé par nature, il ne contient pas la notion de pays.

En conclusion, nous obtenons l’ensemble des établissements de santé, géolocalisées, dans des listes filtrables.

Maisons de santé, un projet en devenir

Travaillant depuis maintenant deux ans pour un éditeur de logiciel en phase avec le monde de la santé, c’est avec un grand intérêt que je suis le projet de l’Asip Santé quand à son label maisons de la santé.

L’objectif est de permettre aux acteur de la santé de s’assurer que le logiciel qu’ils évaluent ou qu’ils possèdent répond correctement à un ensemble conséquent mais indispensable de fonctionnalités.

A l’inverse, cette homologation permet pour un éditeur de connaître, dans les grandes lignes le périmètre d’une solution pour ce type d’acteur.

A titre perso, cette définition de périmètre me permet de voir l’étendu du travail à accomplir pour réaliser ce type de développement … et après un premier passage sur le DSFT de l’Asip santé ( lien ext ), il y a du travail en perspective.