Tau-Argus depuis R - données tabulées
¶
Package {rtauargus} ¶
Source: Package {rtauargus} ¶
vignettes/rtauargus_fr.Rmd
rtauargus_fr.Rmd
Introduction
Présentation du package
Le package rtauargus offre une interface R pour τ-Argus. Il permet de :
- créer des input (fichiers asc, tab et rda) à partir de données R ;
- de générer la séquence d’instructions à exécuter en mode batch (fichier arb) ;
- lancer un batch τ-Argus ;
- récupérer les résultats dans R.
La syntaxe de certains des arguments correspond étroitement à la syntaxe batch de τ-Argus. Cela permet d’utiliser un nombre important de fonctions sans multiplier les arguments des fonctions. Le package pourra également s’adapter plus facilement aux éventuelles modifications du logiciel (nouveaux algorithmes disponibles, options supplémentaires…). Les règles de syntaxes d’écriture du batch sont détaillés dans le manuel de référence de τ-Argus et sont égalements précisées dans la vignette options_safety_rules.
Le package a été développé sur la base de versions open source de τ-Argus (versions 4.2 et supérieures), en particulier la dernière version disponible au moment du développement (4.2.3).
Il n’est pas compatible avec la version 3.5.**_.
Configuration
Le paramétrage suivant doit être fait avant la première utilisation (et plus après).
τ-Argus
rtauargus fonctions utilisant τ-Argus nécessite que le logiciel puisse être utilisé depuis le poste de travail. Le dépôt github de τ-Argus est ici : https://github.com/sdcTools/tauargus. Les dernières versions peuvent être téléchargées ici : https://github.com/sdcTools/tauargus/releases.
Prise en main
Cette section explique comment effectuer une configuration minimale du package et comment appliquer des méthodes de suppression en une seule instruction.
Location de τ-Argus
Lors du chargement du package, la console affiche quelques informations :
En particulier, un emplacement plausible pour le logiciel τ-Argus est prédéfini. Celui-ci peut être modifié pour la durée de la session R, comme suit :
loc_tauargus <- "Y:/Logiciels/TauArgus/TauArgus4.2.3/TauArgus.exe"
options(rtauargus.tauargus_exe = loc_tauargus)
Une fois ce petit ajustement effectué, le package est prêt à être utilisé.
Pour une configuration plus personnalisée, voir les vignettes spécifiques.
Protéger un seul tableau avec la fonction
tab_rtauargus()
.
La fonction tab_rtauargus()
effectue un traitement
complet pour protéger le tableau et récupère immédiatement les résultats
dans R.
En s’abstrayant complètement du fonctionnement interne de τ-Argus, elle permet de réaliser l’ensemble des traitements en une seule instruction. Tous les fichiers intermédiaires sont créés dans un répertoire local.
tab_rtauargus()
requiert les arguments suivants :
-
tabular
: un data.frame contenant le tableau ; -
dir_name
: le répertoire pour les sorties ; -
files_name
: tous les fichiers τ-Argus seront nommés ainsi(différentes extensions) ; -
explanatory_vars
: le nom de toutes les variables explicatives danstabular
; -
secret_var
ousafety_rules
: la manière d’appliquer la suppression primaire (expliqué plus tard) -
totcode
: le code pour le total de chaque variable explicative danstabular
.
Tous les arguments et leurs options par défaut seront détaillés ( où ?).
Exemple minimal
Pour la présentation un tableau fictif sera utilisé :
act_size <-
data.frame(
ACTIVITY = c("01","01","01","02","02","02","06","06","06","Total","Total","Total"),
SIZE = c("tr1","tr2","Total","tr1","tr2","Total","tr1","tr2","Total","tr1","tr2","Total"),
VAL = c(100,50,150,30,20,50,60,40,100,190,110,300),
N_OBS = c(10,5,15,2,5,7,8,6,14,20,16,36),
MAX = c(20,15,20,20,10,20,16,38,38,20,38,38)
)
act_size
#> ACTIVITY SIZE VAL N_OBS MAX
#> 1 01 tr1 100 10 20
#> 2 01 tr2 50 5 15
#> 3 01 Total 150 15 20
#> 4 02 tr1 30 2 20
#> 5 02 tr2 20 5 10
#> 6 02 Total 50 7 20
#> 7 06 tr1 60 8 16
#> 8 06 tr2 40 6 38
#> 9 06 Total 100 14 38
#> 10 Total tr1 190 20 20
#> 11 Total tr2 110 16 38
#> 12 Total Total 300 36 38
Nous utiliserons ces deux règles de secret primaire :
- La règle de dominance n-k avec n=1 et k = 85.
- La règle de fréquence minimale avec n = 3 et un intervalle de protection à 10%.
Pour obtenir les résultats de la règle de dominance, nous devons
spécifier le plus grand contributeur de chaque cellule, correspondant à
la variable MAX
dans les données tabulées.
ex1 <- tab_rtauargus(
act_size,
dir_name = "tauargus_files/ex1",
files_name = "ex1",
explanatory_vars = c("ACTIVITY","SIZE"),
safety_rules = "FREQ(3,10)|NK(1,85)",
value = "VAL",
freq = "N_OBS",
maxscore = "MAX",
totcode = c(ACTIVITY="Total",SIZE="Total")
)
#> Start of batch procedure; file: Z:\SDC\OutilsConfidentialite\rtauargus\vignettes\tauargus_files\ex1\ex1.arb
#> <OPENTABLEDATA> "Z:\SDC\OutilsConfidentialite\rtauargus\vignettes\tauargus_files\ex1\ex1.tab"
#> <OPENMETADATA> "Z:\SDC\OutilsConfidentialite\rtauargus\vignettes\tauargus_files\ex1\ex1.rda"
#> <SPECIFYTABLE> "ACTIVITY""SIZE"|"VAL"||
#> <SAFETYRULE> FREQ(3,10)|NK(1,85)
#> <READTABLE> 1
#> Tables have been read
#> <SUPPRESS> MOD(1,5,1,0,0)
#> Start of the modular protection for table ACTIVITY x SIZE | VAL
#> End of modular protection. Time used 0 seconds
#> Number of suppressions: 2
#> <WRITETABLE> (1,4,,"Z:\SDC\OutilsConfidentialite\rtauargus\vignettes\tauargus_files\ex1\ex1.csv")
#> Table: ACTIVITY x SIZE | VAL has been written
#> Output file name: Z:\SDC\OutilsConfidentialite\rtauargus\vignettes\tauargus_files\ex1\ex1.csv
#> End of TauArgus run
Par défaut, la fonction affiche dans la console le contenu du journal
de bord dans lequel l’utilisateur peut lire toutes les étapes exécutées
par τ-Argus. Ceci peut être récupéré dans le fichier logbook.txt. Avec
verbose = FALSE
, les étapes seront seulement conservées
dans le journal.
Par défaut, la fonction renvoie le tableau fournit en entrée avec une
variable de plus appelée Status
, issue directement de
τ-Argus et décrivant le statut de chaque cellule comme suit :
-A
: cellule en secret primaire en raison de la règle de
fréquence ; -B
: cellule en secret primaire en raison de la
règle de dominance (1er contributeur) ; -C
: cellule en
secret primaire en raison de la règle de dominance(plus de contributeurs
dans le cas où n>1) ; -D
: cellule en secret secondaire
; -V
: cellules valides - pas besoin de masquer.
ex1
#> ACTIVITY SIZE VAL N_OBS MAX Status
#> 1 01 Total 150 15 20 V
#> 2 01 tr1 100 10 20 V
#> 3 01 tr2 50 5 15 V
#> 4 02 Total 50 7 20 V
#> 5 02 tr1 30 2 20 A
#> 6 02 tr2 20 5 10 D
#> 7 06 Total 100 14 38 V
#> 8 06 tr1 60 8 16 D
#> 9 06 tr2 40 6 38 B
#> 10 Total Total 300 36 38 V
#> 11 Total tr1 190 20 20 V
#> 12 Total tr2 110 16 38 V
Tous les fichiers générés par la fonction sont écrits dans le
répertoire spécifié (argument dir_name
). Le format par
défaut du tableau protégé est csv mais il peut être modifié. Tous les
fichiers τ-Argus (.tab, .rda, .arb et .txt) sont écrits dans le même
répertoire. Pour aller plus loin, vous pouvez consulter la dernière
version du manuel de τ-Argus téléchargeable ici : https://research.cbs.nl/casc/Software/TauManualV4.1.pdf.
Exemple avec une hiérarchie et pose du secret primaire via R
Données
Dans cet exemple, nous souhaitons protéger un tableau dans lequel le chiffre d’affaires des entreprises est ventilé par secteur d’activité et par taille. Pour charger les données :
data("turnover_act_size")
head(turnover_act_size)
#> # A tibble: 6 x 5
#> ACTIVITY SIZE N_OBS TOT MAX
#> <chr> <chr> <int> <dbl> <dbl>
#> 1 AZ Total 405 44475. 6212.
#> 2 BE Total 12878 24827613. 1442029.
#> 3 FZ Total 28043 8907311. 1065833.
#> 4 GI Total 62053 26962063. 3084242.
#> 5 JZ Total 8135 8584917. 3957364.
#> 6 KZ Total 8140 62556596. 10018017.
La signification de chaque variable est la suivante :
-ACTIVITY
: secteur d’activité, variables hiérarchiques
à trois niveaux décrites dans l’ensemble de données
activity_corr_table
. La racine est notée “Total” ;
-SIZE
: taille des entreprises (Nombre d’employés dans
trois modalités + la marge “Total”) ; -N_OBS
: Fréquence,
nombre d’entreprises ; -TOT
: valeur du chiffre d’affaires
en euros ; -MAX
: chiffre d’affaires de l’entreprise qui
contribue le plus à la cellule.
Fichier hiérarchique
Avant d’exécuter la fonction tab_rtauargus()
, nous
devons renseigner les imbrications de la hiérarchie dans le format
approprié pour τ-Argus, .i.e. un fichier .hrc
. A
partir d’un tableau de correspondance, la fonction
write_hrc2()
fait le travail pour vous.
Ici, le tableau de correspondance décrit l’imbrication des trois niveaux de secteurs d’activité, du plus agrégé au moins agrégé :
data(activity_corr_table)
head(activity_corr_table)
#> A10 A21 A88
#> 1 AZ A 01
#> 2 AZ A 02
#> 3 AZ X X
#> 4 BE B 06
#> 5 BE B 07
#> 6 BE B 08
hrc_file_activity <- write_hrc2(
corr_table = activity_corr_table,
file_name = "hrc/activity.hrc"
)
Secret primaire
Dans cet exemple, nous appliquerons nous-mêmes le secret primaire, c’est-à-dire sans l’aide de τ-Argus. L’idée est d’utiliser τ-Argus avec un fichier apriori (.hst). Qui permet de spécifier directement au logiciel quelles cellules sont à placer en secret primaire. Pour cela, nous créons une variable booléenne pour spécifier quelles cellules ne respectent pas les règles du secret primaire. En utilisant les mêmes règles que précédemment, on obtient :
Exécution de τ-Argus
Deux arguments doivent être ajoutés à la fonction
tab_rtauargus()
:
-secret_var
, indiquant le nom de la variable dans
tabular
qui renseigne le secret primaire ;
-hrc
, indiquant le nom du fichier hiérarchique à utiliser
pour la variable ACTIVITY
.
Puisque le secret primaire a été spécifié, il n’est pas nécessaire
d’utiliser les arguments, safety_rules
et
maxscore
. Le premier est fixé par défaut à “MAN(10)”, afin
d’appliquer un intervalle de protection à 10%.
Par défaut, tab_rtauargus()
exécute la méthode Modular
pour effectuer le secret secondaire. Ici, nous choisissons d’utiliser la
méthode Optimal en modifiant l’argument suppress
.
ex2 <- tab_rtauargus(
turnover_act_size,
dir_name = "tauargus_files/ex2",
files_name = "ex2",
explanatory_vars = c("ACTIVITY","SIZE"),
value = "TOT",
freq = "N_OBS",
secret_var = "is_secret_prim",
hrc = c(ACTIVITY = hrc_file_activity),
totcode = c(ACTIVITY="Total",SIZE="Total"),
suppress = "OPT(1,5)",
verbose=FALSE
)
Résultat
str(ex2)
#> 'data.frame': 414 obs. of 9 variables:
#> $ ACTIVITY : chr "01" "01" "02" "02" ...
#> $ SIZE : chr "Total" "tr1" "Total" "tr1" ...
#> $ N_OBS : int 18 18 387 381 6 1 1 4 4 84 ...
#> $ TOT : num 853 853 43623 35503 8120 ...
#> $ MAX : num 303 303 6212 6212 4812 ...
#> $ is_secret_freq: logi FALSE FALSE FALSE FALSE FALSE TRUE ...
#> $ is_secret_dom : logi FALSE FALSE FALSE FALSE FALSE TRUE ...
#> $ is_secret_prim: logi FALSE FALSE FALSE FALSE FALSE TRUE ...
#> $ Status : chr "V" "V" "V" "V" ...
table(ex2$Status)
#>
#> B D V
#> 77 64 273
Comme on peut le voir dans les résultats du table()
,dans
la sortie produite par τ-Argus tous les secrets primaires ont le statut
“B”. Pour corriger cela, nous pouvons faire :
Protéger plusieurs tableaux en même temps, avec la fonction
tab_muli_manager()
.
La fonction tab_multi_manager()
permet de traiter un
ensemble de tableaux (liés ou non). C’est un processus itératif, qui
effectue la pose de secret secondaire d’un tableau à la fois et qui
s’assure que les cellules communes ont le même statut. Lorsqu’une
cellule commune est concernée par le secret secondaire, elle répercute
le secret sur chaque tableau qui partage cette cellule commune. Le
processus se termine lorsque le secret secondaire est cohérent pour tous
les tableaux. Voir plus de détails dans les vignettes Gérer la
protection des tableaux liés.
Données
Pour cet exemple, deux tableaux seront utilisés :
data("turnover_act_size")
data("turnover_act_cj")
str(turnover_act_cj)
#> tibble [406 x 5] (S3: tbl_df/tbl/data.frame)
#> $ ACTIVITY: chr [1:406] "AZ" "BE" "FZ" "GI" ...
#> $ CJ : chr [1:406] "Total" "Total" "Total" "Total" ...
#> $ N_OBS : int [1:406] 405 12878 28043 62053 8135 8140 11961 41359 26686 25108 ...
#> $ TOT : num [1:406] 44475 24827613 8907311 26962063 8584917 ...
#> $ MAX : num [1:406] 6212 1442029 1065833 3084242 3957364 ...
Le deuxième tableau fournit le chiffre d’affaires des entreprises
ventilé par secteurs d’activité (ACTIVITY
) et par type
d’entreprise (CJ
).
Les deux tableaux ayant une variable explicative commune
(ACTIVITY
), ils ne peuvent être traités séparément sans
générer risque de rupture du secret secondaire.
Secret primaire
La première étape consiste à indiquer si chaque cellule respecte les règles primaires, ou non. Une variable booléenne est créée, égale à TRUE si la cellule n’est pas conforme.
Ici, on utilise les mêmes règles que précédemment.
Exécution de τ-Argus
Maintenant que le secret primaire a été spécifié pour les deux tableaux, nous pouvons lancer le processus.
ex3 <- tab_multi_manager(
list_tables = list_data_2_tabs,
list_explanatory_vars = list(
act_size = c("ACTIVITY", "SIZE"),
act_cj = c("ACTIVITY", "CJ")
),
hrc = c(ACTIVITY = hrc_file_activity),
dir_name = "tauargus_files/ex3",
value = "TOT",
freq = "N_OBS",
secret_var = "is_secret_prim",
totcode = "Total"
)
#> --- Current table to treat: act_size ---
#> --- Current table to treat: act_cj ---
#> --- Current table to treat: act_size ---
Par défaut, la fonction utilise un wrapper de la fonction
tab_rtauargus()
, appelé tab_rtauargus2()
, pour
appliquer le secret secondaire avec τ-Argus. De nombreux paramètres par
défaut sont définis. En particulier :
- Intervalle de protection fixé à 10 ;
- Méthode de suppression fixée à “MOD(1,5,1,0,0) ;
- Output au format csv.
Lors de son exécution, la fonction affiche à chaque itération quel tableau est traité.
La vignette Gérer la protection des tableaux liés fournit
une présentation complète de la fonction
tab_multi_manager()
.
Détail de la vignette
- Authors: Julien Jamme & Nathanael Rastout
- Last update: 21/09/2023
- Version of rtauargus used: 1.2.0
- Version of τ-Argus used : TauArgus 4.2.3
- R version used : 4.2.3