diff --git a/src/ecoparasite/Application.java b/src/ecoparasite/Application.java index 05c83e6..50b33ef 100644 --- a/src/ecoparasite/Application.java +++ b/src/ecoparasite/Application.java @@ -27,8 +27,8 @@ public class Application { Function getInfes = Poisson::getInfestation; BiConsumer setInfes = Poisson::setInfestation; + mackerelSet = Nettoyage.nettoieColumns( mackerelSet, getInfes, setInfes, false ); mackerelSet = Completion.completeColumnsLinear( mackerelSet, getLength, getInfes, setInfes ); - mackerelSet = Nettoyage.nettoieColumnsLinear( mackerelSet, getLength, getInfes, setInfes, false ); HashSet mackerelXY = ValeursXY.convertToXY( mackerelSet, getLength, getInfes ); diff --git a/src/ecoparasite/nettoyage/Nettoyage.java b/src/ecoparasite/nettoyage/Nettoyage.java index 0005775..edf745a 100644 --- a/src/ecoparasite/nettoyage/Nettoyage.java +++ b/src/ecoparasite/nettoyage/Nettoyage.java @@ -14,6 +14,31 @@ import java.util.function.Function; */ public class Nettoyage { + public static HashSet nettoieColumns(HashSet list, Function getValue, BiConsumer setValue, boolean allowNegative ){ + + ArrayList array = new ArrayList<>(); + for ( T item : list) { + if (getValue.apply(item)!= null){ //Test des valeurs null pour les Tests Unitaires. Je ne devrais pas en avoir. + array.add(getValue.apply(item).doubleValue()); + } + } + + Collections.sort(array); + + int quartIndex = array.size()/4; + Double firstQuart = array.get(quartIndex); + Double thirdQuart = array.get(quartIndex *3); + Double IQR = thirdQuart - firstQuart; + + for(T item : list){ + if( getValue.apply(item) == null || getValue.apply(item).doubleValue() < firstQuart - (IQR * 1.5) || getValue.apply(item).doubleValue() > thirdQuart + (IQR * 1.5) || ( !allowNegative && getValue.apply(item).doubleValue() < 0 ) ){ + setValue.accept( item, null); + } + } + + return list; + } + /** * Permet de remplacer les valeurs abérrantes d'un paramètre d'un HashSet par la moyenne des autres valeurs (non nulles). * Exemple d'utilisation : T = Poisson, V = Double, getValue = Poisson::getInfestation, setValue = Poisson::setInfestation. @@ -26,6 +51,7 @@ public class Nettoyage { * @param Le type de données cobaye. Exemple : Poisson, Population * @param Le type de la donnée à vérifier, doit être un Wrapper Number. Exemple : Double. */ + /* public static HashSet nettoieColumnsMoyenne(HashSet list, Function getValue, BiConsumer setValue, boolean allowNegative ){ Double mean = Completion.calculateMean(list, getValue); @@ -52,6 +78,7 @@ public class Nettoyage { return list; } + */ /** * Polymorphisme de la fonction précédente. Autorise les valeurs abérrantes à être négative. @@ -62,10 +89,10 @@ public class Nettoyage { * @param * @param * - * @see Nettoyage::nettoieColumnsMoyenne + * @see Nettoyage::nettoieColumns */ - public static HashSet nettoieColumnsMoyenne(HashSet list, Function getValue, BiConsumer setValue){ - return nettoieColumnsMoyenne(list, getValue, setValue, true); + public static HashSet nettoieColumns(HashSet list, Function getValue, BiConsumer setValue){ + return nettoieColumns(list, getValue, setValue, true); } /** @@ -81,6 +108,7 @@ public class Nettoyage { * @param Le type de données cobaye. Exemple : Poisson, Population * @param Le type de la donnée à vérifier, doit être un Wrapper Number. Exemple : Double. */ + /* public static HashSet nettoieColumnsLinear(HashSet list, Function getX, Function getY, BiConsumer setY, boolean allowNegative ){ double meanX = Completion.calculateMean(list, getX); @@ -112,6 +140,7 @@ public class Nettoyage { return list; } + */ /** * Polymorphisme de la fonction nettoyage de colonne linéaire avec par défaut, l'autorisation des valeurs négatives. @@ -123,7 +152,9 @@ public class Nettoyage { * @param * @param */ + /* public static HashSet nettoieColumnsLinear(HashSet list, Function getX, Function getY, BiConsumer setY){ return nettoieColumnsLinear(list, getX, getY, setY, true); } + */ } diff --git a/src/ecoparasite/representation/ValeursXY.java b/src/ecoparasite/representation/ValeursXY.java index db33d12..0e0d420 100644 --- a/src/ecoparasite/representation/ValeursXY.java +++ b/src/ecoparasite/representation/ValeursXY.java @@ -36,4 +36,11 @@ public class ValeursXY { return xy; } + /* + public static ValeursXY getMinX( HashSet list ){ + + } + + */ + } diff --git a/tests/ecoparasite/completion/CompletionTest.java b/tests/ecoparasite/completion/CompletionTest.java index 52717de..683d497 100644 --- a/tests/ecoparasite/completion/CompletionTest.java +++ b/tests/ecoparasite/completion/CompletionTest.java @@ -4,6 +4,7 @@ import ecoparasite.input.InputFactory; import ecoparasite.input.InputFileException; import ecoparasite.input.RawData; import ecoparasite.input.RawDataOverflow; +import ecoparasite.nettoyage.Nettoyage; import ecoparasite.poisson.Mackerel; import ecoparasite.poisson.Poisson; import org.junit.jupiter.api.Test; @@ -44,6 +45,7 @@ class CompletionTest { Function getInfes = Poisson::getInfestation; BiConsumer setInfes = Poisson::setInfestation; + testp = Nettoyage.nettoieColumns(testp,getInfes,setInfes,false); testp = Completion.completeColumnsLinear(testp,getLength,getInfes,setInfes); System.out.println(testp); } diff --git a/tests/ecoparasite/nettoyage/NettoyageTest.java b/tests/ecoparasite/nettoyage/NettoyageTest.java index 97c32d9..f4695d4 100644 --- a/tests/ecoparasite/nettoyage/NettoyageTest.java +++ b/tests/ecoparasite/nettoyage/NettoyageTest.java @@ -50,11 +50,7 @@ class NettoyageTest { Function getInfes = Poisson::getInfestation; BiConsumer setInfes = Poisson::setInfestation; - testp = Completion.completeColumnsLinear( testp, getLength, getInfes, setInfes ); - - System.out.println(testp); - - testp = Nettoyage.nettoieColumnsLinear( testp, getLength, getInfes, setInfes, false ); + testp = Nettoyage.nettoieColumns( testp, getInfes, setInfes, false ); System.out.println(testp); }