/** * Entry point. * * @param args the arguments */ public static void main(String[] args) throws IOException { // Define data Data data = getData(); // Define attribute types data.getDefinition().setAttributeType("age", getHierarchyAge()); data.getDefinition().setAttributeType("zipcode", getHierarchyZipcode()); data.getDefinition().setAttributeType("disease1", AttributeType.SENSITIVE_ATTRIBUTE); data.getDefinition().setAttributeType("disease2", AttributeType.SENSITIVE_ATTRIBUTE); // Create an instance of the anonymizer ARXAnonymizer anonymizer = new ARXAnonymizer(); ARXConfiguration config = ARXConfiguration.create(); config.addPrivacyModel(new KAnonymity(3)); config.addPrivacyModel( new HierarchicalDistanceTCloseness("disease1", 0.6d, getHierarchyDisease())); config.addPrivacyModel(new RecursiveCLDiversity("disease2", 3d, 2)); config.setMaxOutliers(0d); config.setQualityModel(Metric.createEntropyMetric()); // Now anonymize ARXResult result = anonymizer.anonymize(data, config); // Print info printResult(result, data); // Process results if (result.getGlobalOptimum() != null) { System.out.println(" - Transformed data:"); Iterator<String[]> transformed = result.getOutput(false).iterator(); while (transformed.hasNext()) { System.out.print(" "); System.out.println(Arrays.toString(transformed.next())); } } }
/** * Entry point. * * @param args the arguments * @throws IOException */ public static void main(String[] args) throws IOException { // Define data DefaultData data = Data.create(); data.add("zipcode", "age", "disease"); data.add("47677", "29", "gastric ulcer"); data.add("47602", "22", "gastritis"); data.add("47678", "27", "stomach cancer"); data.add("47905", "43", "gastritis"); data.add("47909", "52", "flu"); data.add("47906", "47", "bronchitis"); data.add("47605", "30", "bronchitis"); data.add("47673", "36", "pneumonia"); data.add("47607", "32", "stomach cancer"); // Define hierarchies DefaultHierarchy age = Hierarchy.create(); age.add("29", "<=40", "*"); age.add("22", "<=40", "*"); age.add("27", "<=40", "*"); age.add("43", ">40", "*"); age.add("52", ">40", "*"); age.add("47", ">40", "*"); age.add("30", "<=40", "*"); age.add("36", "<=40", "*"); age.add("32", "<=40", "*"); // Only excerpts for readability DefaultHierarchy zipcode = Hierarchy.create(); zipcode.add("47677", "4767*", "476**", "47***", "4****", "*****"); zipcode.add("47602", "4760*", "476**", "47***", "4****", "*****"); zipcode.add("47678", "4767*", "476**", "47***", "4****", "*****"); zipcode.add("47905", "4790*", "479**", "47***", "4****", "*****"); zipcode.add("47909", "4790*", "479**", "47***", "4****", "*****"); zipcode.add("47906", "4790*", "479**", "47***", "4****", "*****"); zipcode.add("47605", "4760*", "476**", "47***", "4****", "*****"); zipcode.add("47673", "4767*", "476**", "47***", "4****", "*****"); zipcode.add("47607", "4760*", "476**", "47***", "4****", "*****"); // Define sensitive value hierarchy DefaultHierarchy disease = Hierarchy.create(); disease.add( "flu", "respiratory infection", "vascular lung disease", "respiratory & digestive system disease"); disease.add( "pneumonia", "respiratory infection", "vascular lung disease", "respiratory & digestive system disease"); disease.add( "bronchitis", "respiratory infection", "vascular lung disease", "respiratory & digestive system disease"); disease.add( "pulmonary edema", "vascular lung disease", "vascular lung disease", "respiratory & digestive system disease"); disease.add( "pulmonary embolism", "vascular lung disease", "vascular lung disease", "respiratory & digestive system disease"); disease.add( "gastric ulcer", "stomach disease", "digestive system disease", "respiratory & digestive system disease"); disease.add( "stomach cancer", "stomach disease", "digestive system disease", "respiratory & digestive system disease"); disease.add( "gastritis", "stomach disease", "digestive system disease", "respiratory & digestive system disease"); disease.add( "colitis", "colon disease", "digestive system disease", "respiratory & digestive system disease"); disease.add( "colon cancer", "colon disease", "digestive system disease", "respiratory & digestive system disease"); data.getDefinition().setAttributeType("age", age); data.getDefinition().setAttributeType("zipcode", zipcode); data.getDefinition().setAttributeType("disease", AttributeType.SENSITIVE_ATTRIBUTE); // Create an instance of the anonymizer ARXAnonymizer anonymizer = new ARXAnonymizer(); ARXConfiguration config = ARXConfiguration.create(); config.addCriterion(new KAnonymity(3)); config.addCriterion(new HierarchicalDistanceTCloseness("disease", 0.6d, disease)); config.setMaxOutliers(0d); config.setMetric(Metric.createEntropyMetric()); // Now anonymize ARXResult result = anonymizer.anonymize(data, config); // Print info printResult(result, data); // Process results System.out.println(" - Transformed data:"); Iterator<String[]> transformed = result.getOutput(false).iterator(); while (transformed.hasNext()) { System.out.print(" "); System.out.println(Arrays.toString(transformed.next())); } }