7
votes

Comment puis-je et ré-classer les données?

Certaines des données que je travaille contiennent des informations sensibles (noms de personnes, dates, emplacements, etc.). Mais je dois parfois partager des "chiffres" avec d'autres personnes pour obtenir de l'aide pour l'analyse statistique ou le traiter sur des machines plus puissantes où je ne peux pas contrôler qui regarde les données.

Idéalement, je voudrais travailler comme ceci:

  1. Lisez les données dans R (Regardez-la, nettoyez-la, etc.)
  2. Sélectionnez une image de données que je souhaite décomposer, exécutez-la via un package et recevoir deux "fichiers": les données de classification et un fichier de traduction. Ce dernier je vais me garder.
  3. Les données détachées peuvent être partagées, manipulées et traitées sans soucis.
  4. Je re-classer les données traitées avec le fichier de traduction.

    Je suppose que cela peut également être utile lorsque vous téléchargez des données pour le traitement "dans le nuage" (Amazon, etc.).

    Avez-vous été dans cette situation? J'ai d'abord pensé à écrire une fonction "Randomize" moi-même, mais je me suis rendu compte qu'il n'y a pas de fin sur la sophistiquée que cela peut être fait (par exemple, compenser des timbres temporels sans perte de commande). Peut-être qu'il y a déjà une méthode ou un outil défini?

    Merci à tous ceux qui contribuent à [r] -tag ici au débordement de pile!

r

1 commentaires

Les dates et les emplacements (analyse spatiale) sont compliqués.


3 Réponses :


3
votes

Un moyen de faire cela est avec correspondant code>. D'abord, je fais un petit Dataframe: xxx pré>

puis je fais une clé: p> xxx pré>

Vous devez enregistrer cette clé évidemment quelque part. Maintenant, je peux coder les personnes: p> xxx pré>

si je veux à nouveau les noms de personne, je peux indexer la clé code>: p> xxx pré>

ou utilisez Tranform code>, cela fonctionne également si les données sont modifiées tant que l'ID de la personne reste la même: P>

foo <-rbind(foo,foo[sample(1:4),],foo[sample(1:4,2),],foo)
foo
   person      score
1       2  0.3186301
2       1 -0.5817907
3       4  0.7145327
4       3 -0.8252594
21      1 -0.5817907
41      3 -0.8252594
31      4  0.7145327
15      2  0.3186301
32      4  0.7145327
16      2  0.3186301
11      2  0.3186301
12      1 -0.5817907
13      4  0.7145327
14      3 -0.8252594
transform(foo, person=key[person])
    person      score
1   Mickey  0.3186301
2   Donald -0.5817907
3    Daisy  0.7145327
4  Scrooge -0.8252594
21  Donald -0.5817907
41 Scrooge -0.8252594
31   Daisy  0.7145327
15  Mickey  0.3186301
32   Daisy  0.7145327
16  Mickey  0.3186301
11  Mickey  0.3186301
12  Donald -0.5817907
13   Daisy  0.7145327
14 Scrooge -0.8252594


1 commentaires

La solution ci-dessus supprime cependant le nom lorsque je travaille avec des informations sur la santé privée dans la recherche médicale, les noms sont les plus faciles à traiter. Chaque personne est attribuée à un code de sujet d'étude. La date de service, la date de naissance et le code postal sont plus difficiles à traiter.



3
votes

Pouvez-vous simplement attribuer un GUID à la ligne à partir de laquelle vous avez supprimé toutes les informations sensibles? Tant que vos collègues dépourvus de la clairance de sécurité ne plaisent pas avec le GUID, vous pourrez intégrer des modifications et des ajouts qu'ils peuvent faire simplement en rejoignant le GUID. Ensuite, cela devient simplement une question de génération de valeurs de bogus ersatz pour les colonnes dont vous avez purgé les données. Nom1, lastname2, City1, City2, etc. Modifier: vous auriez une table pour chaque colonne purged, par exemple. Ville, état, zip, prénom, lastname, chacun d'entre eux contenant l'ensemble distinct des valeurs classées réelles dans cette colonne et une valeur entière. Donc, que "Jones" pourrait être représentée dans le jeu de données désinfectée, disons, Nom22, "Schenectady" en tant que City343, "90210" comme ZIPCODE716. Cela donnerait à vos collègues valides de fonctionner avec (par exemple, ils auraient le même nombre de villes distinctes que vos données réelles, juste avec des noms anonymisés) et les interrelations des données anonymisées sont préservées. Edit2: Si l'objectif est de Donnez à vos collègues des données désinfectées toujours statistiquement significatives, alors les colonnes de date nécessiteraient un traitement spécial. Par exemple. Si vos collègues doivent faire des calculs statistiques à l'âge de la personne, vous devez leur donner quelque chose près de la date d'origine, pas si près qu'il pourrait être révélateur, mais pas jusqu'à présent qu'il pouvait incliner l'analyse.


1 commentaires

C'est ce que je vais suggérer. Un globalide avec des valeurs de domaine d'insertion, de mise à jour, de suppression. Autres champs de suivi possibles serait éditeur, EdiDDate



3
votes

sonne comme un problème de contrôle de la divulgation statistique. Jetez un coup d'œil à package sdcmicro .

Edit: Il suffit de réaliser que vous avez un problème légèrement différent. Le contrôle de la divulgation statistique consiste à «endommager» les données de manière à réduire le risque de divulgation. En "dommageant" des données, vous perdez des informations - c'est le prix que vous payez pour réduire le risque de divulgation. Vos données contiendront moins d'informations. Votre analyse peut donc donner des résultats différents ou moins comme une analyse effectuée sur les données d'origine.

dépend de ce que vous allez faire avec vos données.


0 commentaires