From a56c59456bb14c694d68d012c93e0f944458d2b4 Mon Sep 17 00:00:00 2001 From: Benjamin Date: Wed, 8 Apr 2026 15:25:40 +0200 Subject: [PATCH] Fix dumb nettoyage --- src/ecoparasite/Application.java | 2 +- src/ecoparasite/LectureEval.java | 26 +++++++------ src/ecoparasite/nettoyage/Nettoyage.java | 37 +++++++++++++++++-- src/ecoparasite/representation/ValeursXY.java | 7 ++++ .../completion/CompletionTest.java | 2 + .../ecoparasite/nettoyage/NettoyageTest.java | 6 +-- 6 files changed, 59 insertions(+), 21 deletions(-) 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/LectureEval.java b/src/ecoparasite/LectureEval.java index ba1cf62..7d228a2 100644 --- a/src/ecoparasite/LectureEval.java +++ b/src/ecoparasite/LectureEval.java @@ -79,7 +79,7 @@ public class LectureEval { public static void main(String[] args) throws RawDataOverflow { - RawData popRaw; + RawData popRaw; int index; try { popRaw = InputFactory.readData("test3.csv", "," ); } catch(InputFileException e) { @@ -91,30 +91,32 @@ public class LectureEval { // System.out.println( popRaw.getEntry(1) ); + index = 1; for( Population p: pop){ - System.out.println(p); + System.out.println(String.valueOf(index++) + p); } - // Complétion de la masse. + // Nettoyage de la masse. Function getWeight = population -> { return population.getTotal().getWidth() != null ? population.getTotal().getWidth().transformToDouble() : null; }; BiConsumer setWeight = (population, aDouble) -> { - population.getTotal().setWidth(new PopulationArgInterval(aDouble,aDouble)); + population.getTotal().setWidth(aDouble != null ? new PopulationArgInterval(aDouble,aDouble) : null); }; + pop = Nettoyage.nettoieColumns(pop, getWeight, setWeight, false); + System.out.println("---"); + index = 1; + for( Population p: pop){ + System.out.println(String.valueOf(index++) + p); + } + // Complétion de la masse. pop = Completion.completeColumnsMoyenne(pop, getWeight, setWeight); System.out.println("---"); + index = 1; for( Population p: pop){ - System.out.println(p); - } - - // Nettoyage de la masse. - pop = Nettoyage.nettoieColumnsMoyenne(pop, getWeight, setWeight, false); - System.out.println("---"); - for( Population p: pop){ - System.out.println(p); + System.out.println(String.valueOf(index++) + p); } } 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); } -- 2.39.5