From 8e75323e99e0a16963244f1341c81a49c3db9246 Mon Sep 17 00:00:00 2001 From: Benjamin Date: Wed, 8 Apr 2026 11:10:15 +0200 Subject: [PATCH] Finish Lecture Eval Nettoyage --- src/ecoparasite/LectureEval.java | 27 +++++++++ src/ecoparasite/nettoyage/Nettoyage.java | 57 +++++++------------ .../population/PopulationArgs.java | 8 +-- 3 files changed, 50 insertions(+), 42 deletions(-) diff --git a/src/ecoparasite/LectureEval.java b/src/ecoparasite/LectureEval.java index 8aa8c13..ba1cf62 100644 --- a/src/ecoparasite/LectureEval.java +++ b/src/ecoparasite/LectureEval.java @@ -1,15 +1,20 @@ 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 { @@ -90,6 +95,28 @@ public class LectureEval { System.out.println(p); } + // Complétion 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)); + }; + + // Complétion de la masse. + pop = Completion.completeColumnsMoyenne(pop, getWeight, setWeight); + System.out.println("---"); + 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); + } + } } diff --git a/src/ecoparasite/nettoyage/Nettoyage.java b/src/ecoparasite/nettoyage/Nettoyage.java index ebb4ac2..19468f6 100644 --- a/src/ecoparasite/nettoyage/Nettoyage.java +++ b/src/ecoparasite/nettoyage/Nettoyage.java @@ -14,53 +14,19 @@ import java.util.function.Function; */ public class Nettoyage { - /* - public static HashSet nettoiePoissonMean(HashSet tablePoisson){ - - Double mean = Completion.calculateMean(tablePoisson,Poisson::getInfestation); //Moyenne - - ArrayList infest = new ArrayList<>(); - for (Poisson p : tablePoisson) { - if (p.getInfestation() != null){ //Test des valeurs null pour les Tests Unitaires. Je ne devrais pas en avoir. - infest.add(p.getInfestation()); - } - } - - Collections.sort(infest); - - int quartIndex = infest.size()/4; - Double firstQuart = infest.get(quartIndex); - Double thirdQuart = infest.get(quartIndex *3); - Double IQR = thirdQuart - firstQuart; - - for (Poisson p : tablePoisson) { - - if (p.getInfestation() == null) { - p.setInfestation(mean); //Fonction codé en dur pour éviter des problèmes dans les Tests Unitaires : Completion devrais etre fait et valeur null ne devrait pas exister - } - else { - if (p.getInfestation() < firstQuart - (IQR * 1.5) || p.getInfestation() > thirdQuart + (IQR * 1.5)) { - p.setInfestation(mean); - } - } - } - - return tablePoisson; - } - */ - /** - * Permet de remplacer les valeurs inexistantes d'un paramètre d'un HashSet par la moyenne des autres valeurs (non nulles). + * 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. * * @param list La liste de données cobaye. * @param getValue La fonction (Getter) qui permet d'obtenir la valeur que l'on veut vérifier * @param setValue La fonction (Setter) qui permet de remplacer la valeur si null. + * @param allowNegative Savoir si une valeur négative est forcément aberrant. * @return Le HashSet avec les valeurs remplacés. * @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 ){ + public static HashSet nettoieColumnsMoyenne(HashSet list, Function getValue, BiConsumer setValue, boolean allowNegative ){ Double mean = Completion.calculateMean(list, getValue); @@ -79,7 +45,7 @@ public class Nettoyage { Double IQR = thirdQuart - firstQuart; for(T item : list){ - if( getValue.apply(item).doubleValue() < firstQuart - (IQR * 1.5) || getValue.apply(item).doubleValue() > thirdQuart + (IQR * 1.5)){ + if( 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, (V) mean); } } @@ -87,5 +53,20 @@ public class Nettoyage { return list; } + /** + * Polymorphisme de la fonction précédente. Autorise les valeurs abérrantes à être négative. + * @param list + * @param getValue + * @param setValue + * @return + * @param + * @param + * + * @see Nettoyage::nettoieColumnsMoyenne + */ + public static HashSet nettoieColumnsMoyenne(HashSet list, Function getValue, BiConsumer setValue){ + return nettoieColumnsMoyenne(list, getValue, setValue, true); + } + } diff --git a/src/ecoparasite/population/PopulationArgs.java b/src/ecoparasite/population/PopulationArgs.java index cf7c6c8..bf2bedb 100644 --- a/src/ecoparasite/population/PopulationArgs.java +++ b/src/ecoparasite/population/PopulationArgs.java @@ -187,10 +187,10 @@ public class PopulationArgs { return String.format( "Année: %d, N: %d, Length: %f, Width: %f, Prevalence: %f, IC: %f, Intensity: %f, Abondance: %f, Zone: %s", this.year, this.number, - this.length != null ? this.length.transformToDouble() : 0.0, - this.width != null ? this.width.transformToDouble() : 0.0, - this.prevalence != null ? this.prevalence.transformToDouble() : 0.0, - this.ic != null ? this.ic.transformToDouble() : 0.0, + this.length != null ? this.length.transformToDouble() : null, + this.width != null ? this.width.transformToDouble() : null, + this.prevalence != null ? this.prevalence.transformToDouble() : null, + this.ic != null ? this.ic.transformToDouble() : null, this.intensity, this.abondance, this.zone -- 2.39.5