Anonymiser un fichier XML à l’aide de faker

Dans un précédent article je vous ai présenté comment générer un dataframe contenant des fausses données de personne afin de vous constituer un jeu de données pour vos tests. Cependant, lorsqu’on travaille sur des pipelines de données on est souvent contraint d’utiliser un format de fichier bien défini. Eh oui tout n’est pas dataframe.

Prenons l’exemple d’une pipeline qui a besoin de traiter des fichiers XML contenant des données à caractère personnel, et vous avez besoin de faire des tests pour valider votre pipeline. C’est assez délicat d’utiliser ces données. Je vous propose donc une méthodologie afin d’anonymiser des fichiers XML.


Pseudonymiser ou anonymiser ?

La pseudonymisation consiste à remplacer les informations identifiantes par des pseudonymes (par exemple, remplacer le nom d’une personne par un identifiant unique). Cependant, un lien de correspondance est conservé dans un autre fichier ou système, ce qui permet, si nécessaire, de rétablir l’identité réelle de la personne. Autrement dit, la pseudonymisation est réversible.

L’anonymisation, au contraire, vise à supprimer toute possibilité d’identification d’une personne, même indirecte. Une fois les données anonymisées, il devient impossible de retrouver l’identité de l’individu concerné, car aucun lien ne subsiste entre les données et la personne.

Ces deux notions sont donc fondamentalement différentes : la pseudonymisation protège temporairement l’identité, tandis que l’anonymisation la rend définitivement indétectable.

Le besoin

Essayons de faire quelque chose de simple et surtout réutilisable. J’ai un fichier XML contenant des données à caractère personnel et je souhaite avoir un script Python capable de modifier les noms, prénom et email. Pour que notre outil soit paramétrable, nous allons répertorier les balises XML à modifier dans un fichier YAML.

Fichier XML exemple

Je vous propose le fichier XML ci-dessous contenant plusieurs balises. Ce qu’il faut retenir c’est que ce type de fichier est encore beaucoup utilisé dans le monde de la data et souvent pour échanger des données entre différents logiciels ou contenue dans des bases de données. Il existe des librairies Python capable de lire des fichiers XML, toutefois nous n’allons pas nous attarder sur cette librairie aujourd’hui.

<?xml version="1.0"?>
<Catalog>
   <Book id="bk101">
      <Author>Garghentini, Davide</Author>
      <first_name>John</first_name>
      <last_name>Doe</last_name>
      <email>JohnDoe@notme.org</email>
      <Title>XML Developer's Guide</Title>
      <Genre>Computer</Genre>
      <Price>44.95</Price>
      <PublishDate>2000-10-01</PublishDate>
      <Description>An in-depth look at creating applications
      with XML.</Description>
   </Book>
   <Book id="bk102">
      <Author>Garcia, Debra</Author>
      <Title>Midnight Rain</Title>
      <Genre>Fantasy</Genre>
      <Price>5.95</Price>
      <PublishDate>2000-12-16</PublishDate>
      <Description>A former architect battles corporate zombies,
      an evil sorceress, and her own childhood to become queen
      of the world.</Description>
   </Book>
</Catalog>Langage du code : HTML, XML (xml)

Nos fonctions de chargement et conversion

Commençons par faire une fonction capable de charger les balises à modifier contenue dans un fichier YAML ainsi que le fichier XML :

Maintenant qu’on à chargé nos deux fichiers rentrons dans le cœur du sujet. La prochaine fonction doit être capable de modifier un texte avec un élément de Faker

Et voilà une bonne chose de faite. Pour votre information, parcourir un fichier XML nécessite de respecter une arborescence bien définie. Je ne vais pas m’attarder là-dessus ici aujourd’hui. Afin de parcourir les données dans le fichier XML je vais utiliser la librairie ElementTree.

Passons maintenant au code final

Le fichier YAML

Maintenant que le script est prêt, il faut définir quelle vont être les balises à modifier. Pour cela on va se créer un fichier YAML contenant les balises à modifier et spécifier les méthodes faker à utiliser pour chaque balise. Disons que dans notre exemple de fichier XML, je souhaite modifier les balises suivantes : Authorfirst_namelast_name et email. Donc cela devrait nous donner le fichier de configuration YAML suivant :

Exécution du script

Maintenant que l’on a notre script, le fichier de configuration YAML et le fichier XML à anonymiser, on va enfin pouvoir essayer ça et comparée. Pour l’exécuter, rien de plus simple, depuis une console il faut donner au script les bons arguments :

xmlAnonym.py data4test.xml balises.yamlLangage du code : Bash (bash)

Conclusion

Enfin maintenant si on compare les deux fichiers, l’original et celui anonymisé grâce à notre script, on observe bien que les champs Authorfirst_namelast_name et email ont été modifiés.

Bien entendue vous pouvez utiliser le script pour plusieurs fichiers XML afin de vous constituer des jeux de données et travailler sur vos pipelines de données tout en respectant les règles RGPD.