From a56c59456bb14c694d68d012c93e0f944458d2b4 Mon Sep 17 00:00:00 2001 From: Benjamin Date: Wed, 8 Apr 2026 15:25:40 +0200 Subject: [PATCH 1/2] 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); } From 7800a92daee829b2661e23054136a93a3a82da82 Mon Sep 17 00:00:00 2001 From: Benjamin Date: Mon, 27 Apr 2026 09:36:09 +0000 Subject: [PATCH 2/2] Supprimer src/ecoparasite/LectureEval.java --- src/ecoparasite/LectureEval.java | 124 ------------------------------- 1 file changed, 124 deletions(-) delete mode 100644 src/ecoparasite/LectureEval.java diff --git a/src/ecoparasite/LectureEval.java b/src/ecoparasite/LectureEval.java deleted file mode 100644 index 7d228a2..0000000 --- a/src/ecoparasite/LectureEval.java +++ /dev/null @@ -1,124 +0,0 @@ -package ecoparasite; - -import ecoparasite.completion.Completion; -import ecoparasite.input.InputFactory; -import ecoparasite.input.InputFileException; -import ecoparasite.input.RawData; -import ecoparasite.input.RawDataOverflow; -import ecoparasite.nettoyage.Nettoyage; -import ecoparasite.poisson.Poisson; -import ecoparasite.population.Population; -import ecoparasite.population.PopulationArgInterval; -import ecoparasite.population.PopulationArgs; - -import java.util.HashMap; -import java.util.HashSet; -import java.util.function.BiConsumer; -import java.util.function.Function; - -public class LectureEval { - - public static HashSet parseEval( RawData popRaw ){ - - HashSet popEspece = new HashSet<>(); - - int index = 1; - try { - while(true){ - HashMap fields = popRaw.getEntry(index); - - String espece = fields.get("Espèce"); - - Population population = new Population(espece); - - if( population.getTotal() == null ){ - population.setTotal( new PopulationArgs() ); - } - for( String k: fields.keySet() ){ - if( k.equals("Espèce") ) - continue; - - LectureEval.applyValueForPopEval( population.getTotal(), k, fields.get(k) ); - } - - popEspece.add(population); - index++; - } - } catch (RawDataOverflow e) { - // Fin de la liste. - } - - return popEspece; - } - - public static void applyValueForPopEval( PopulationArgs popArgs, String column, String value ){ - - if( value == null || value == "" ) // On n'ajoute pas les valeurs nulles. - return; - - switch (column){ - case "zone": - popArgs.setZone(value); - break; - case "N": - popArgs.setNumber( Integer.parseInt(value) ); - break; - case "Prevalence": - popArgs.setPrevalence(PopulationArgInterval.fromString(value)); - break; - case "LT mm": - popArgs.setLength(PopulationArgInterval.fromString(value)); - break; - case "Masse g": - popArgs.setWidth(PopulationArgInterval.fromString(value)); - break; - default: - break; - } - } - - public static void main(String[] args) throws RawDataOverflow { - - RawData popRaw; int index; - try { - popRaw = InputFactory.readData("test3.csv", "," ); - } catch(InputFileException e) { - System.out.println(e.getMessage()); - return; - } - - HashSet pop = parseEval(popRaw); - - // System.out.println( popRaw.getEntry(1) ); - - index = 1; - for( Population p: pop){ - System.out.println(String.valueOf(index++) + p); - } - - // Nettoyage de la masse. - Function getWeight = population -> { - return population.getTotal().getWidth() != null ? population.getTotal().getWidth().transformToDouble() : null; - }; - BiConsumer setWeight = (population, 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(String.valueOf(index++) + p); - } - - } - -}