1 Commits

Author SHA1 Message Date
603ac5dbbd JavaDoc 2026-04-01 16:42:18 +02:00
10 changed files with 59 additions and 262 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 232 KiB

After

Width:  |  Height:  |  Size: 133 KiB

View File

@@ -117,12 +117,6 @@ namespace ecoparasite {
}
}
namespace ecoparasite.completion {
class Completion {
+ {static} completeColumnsMoyenne
}
}
namespace ecoparasite.unknown {
note top of ecoparasite.unknown : Ce paquet est temporaire pour des classes / interfaces qui devront avoir plus de déclinaisons.

View File

@@ -1,30 +0,0 @@
id,Especes,LT,Abdomen,Foie,Visceres,Autres,Total
1,Serra Spanish mackerel,257,7,1,0,18,26
2,Serra Spanish mackerel,252,263,5,0,356,624
3,Serra Spanish mackerel,254,51,1,12,76,140
4,Serra Spanish mackerel,242,158,6,0,222,386
5,Serra Spanish mackerel,254,67,1,10,94,172
6,Serra Spanish mackerel,251,140,1,0,159,300
7,Serra Spanish mackerel,258,281,5,0,310,596
8,Serra Spanish mackerel,250,113,2,6,153,274
9,Serra Spanish mackerel,244,81,2,0,89,172
10,Serra Spanish mackerel,244,,0,1,,247
11,Serra Spanish mackerel,-200,23,0,0,25,48
12,Serra Spanish mackerel,247,53,0,0,75,
13,Serra Spanish mackerel,250,11,0,0,19,30
14,Serra Spanish mackerel,264,72,7,0,105,184
15,Serra Spanish mackerel,258,18,2,0,38,58
16,Serra Spanish mackerel,268,3,0,2,7,12
17,Serra Spanish mackerel,244,5,0,0,5,10
18,Serra Spanish mackerel,236,18,0,0,22,40
19,Serra Spanish mackerel,,46,0,0,64,110
20,Serra Spanish mackerel,251,-5,0,0,162,268
21,Serra Spanish mackerel,166,0,0,0,0,0
22,Serra Spanish mackerel,166,1,0,0,1,2
23,Serra Spanish mackerel,162,4,1,0,7,12
24,Serra Spanish mackerel,169,0,0,0,0,0
25,Serra Spanish mackerel,170,0,0,0,0,0
26,Serra Spanish mackerel,176,0,0,,0,0
27,Serra Spanish mackerel,165,4,0,0,6,10
28,Serra Spanish mackerel,193,4,0,0,4,8
29,Serra Spanish mackerel,165,1,0,0,1,2
1 id Especes LT Abdomen Foie Visceres Autres Total
2 1 Serra Spanish mackerel 257 7 1 0 18 26
3 2 Serra Spanish mackerel 252 263 5 0 356 624
4 3 Serra Spanish mackerel 254 51 1 12 76 140
5 4 Serra Spanish mackerel 242 158 6 0 222 386
6 5 Serra Spanish mackerel 254 67 1 10 94 172
7 6 Serra Spanish mackerel 251 140 1 0 159 300
8 7 Serra Spanish mackerel 258 281 5 0 310 596
9 8 Serra Spanish mackerel 250 113 2 6 153 274
10 9 Serra Spanish mackerel 244 81 2 0 89 172
11 10 Serra Spanish mackerel 244 0 1 247
12 11 Serra Spanish mackerel -200 23 0 0 25 48
13 12 Serra Spanish mackerel 247 53 0 0 75
14 13 Serra Spanish mackerel 250 11 0 0 19 30
15 14 Serra Spanish mackerel 264 72 7 0 105 184
16 15 Serra Spanish mackerel 258 18 2 0 38 58
17 16 Serra Spanish mackerel 268 3 0 2 7 12
18 17 Serra Spanish mackerel 244 5 0 0 5 10
19 18 Serra Spanish mackerel 236 18 0 0 22 40
20 19 Serra Spanish mackerel 46 0 0 64 110
21 20 Serra Spanish mackerel 251 -5 0 0 162 268
22 21 Serra Spanish mackerel 166 0 0 0 0 0
23 22 Serra Spanish mackerel 166 1 0 0 1 2
24 23 Serra Spanish mackerel 162 4 1 0 7 12
25 24 Serra Spanish mackerel 169 0 0 0 0 0
26 25 Serra Spanish mackerel 170 0 0 0 0 0
27 26 Serra Spanish mackerel 176 0 0 0 0
28 27 Serra Spanish mackerel 165 4 0 0 6 10
29 28 Serra Spanish mackerel 193 4 0 0 4 8
30 29 Serra Spanish mackerel 165 1 0 0 1 2

View File

@@ -1,7 +0,0 @@
Espèce,zone,N,Prevalence,LT mm,Masse g
Salmo salar,Atlantique Ouest,21,100,210,-3
Clupea harengus,Atlantique Nord,10,80,150,200
Merluccius,Atlantique Nord,5,90,750,
Dicentrarchus labrax,Atlantique Nord,12,65,680,
Scomber scombrus,Atlantique Nord,6,30,280,630
Merluccius,Atlantique Nord,2,100,720,1720
1 Espèce zone N Prevalence LT mm Masse g
2 Salmo salar Atlantique Ouest 21 100 210 -3
3 Clupea harengus Atlantique Nord 10 80 150 200
4 Merluccius Atlantique Nord 5 90 750
5 Dicentrarchus labrax Atlantique Nord 12 65 680
6 Scomber scombrus Atlantique Nord 6 30 280 630
7 Merluccius Atlantique Nord 2 100 720 1720

View File

@@ -1,67 +1,41 @@
package ecoparasite.completion;
import ecoparasite.input.InputFactory;
import ecoparasite.input.InputFileException;
import ecoparasite.input.RawData;
import ecoparasite.input.RawDataOverflow;
import ecoparasite.poisson.Mackerel;
import ecoparasite.poisson.Poisson;
import java.util.HashSet;
import java.util.concurrent.Callable;
import java.util.function.*;
/**
* Permet de faire de la complétion de données.
* Si une valeur est manquante, elle sera remplacé par la moyenne ou par regression linéaire.
* Class incluant des méthodes Statiques de Completion des données
*/
public class Completion {
/**
* Permet de remplacer les valeurs inexistantes 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.
* @return Le HashSet avec les valeurs remplacés.
* @param <T> Le type de données cobaye. Exemple : Poisson, Population
* @param <V> Le type de la donnée à vérifier, doit être un Wrapper Number. Exemple : Double.
*/
public static <T,V extends Number> HashSet<T> completeColumnsMoyenne(HashSet<T> list, Function<T,V> getValue, BiConsumer<T,V> setValue ){
//TODO mais après remaniment
public static HashSet<Poisson> completePoissonMean(HashSet<Poisson> tablePoisson){
Double mean = calculateMean(list, getValue);
for(T item : list){
if( getValue.apply(item) == null ){
setValue.accept( item, (V) mean);
Double mean = mean(tablePoisson);
for (Poisson p : tablePoisson) {
if ( p.getInfestation() == null ) {
p.setInfestation(mean);
}
}
return list;
return tablePoisson;
}
/**
* Permet de calculer la moyenne d'une donnée des valeurs non nulles.
* @param list La liste de données cobaye.
* @param getValue La fonction qui permet d'obtenir la valeur de notre champ.
* @return La moyenne calculé.
* @param <T> Le type de données cobaye/ Exemple : Poisson
* @param <V> Le type de la donnée à vérifier, doit être un wrapper Number. Exemple : Double.
*/
public static <T,V extends Number> double calculateMean(HashSet<T> list, Function<T,V> getValue ){
private static Double mean(HashSet<Poisson> tablePoisson){
double mean = 0.0;
int i = 0;
Double mean = 0.0;
for( T item : list ){
V value = getValue.apply(item);
if( value != null) {
mean += value.doubleValue();
i++;
for (Poisson p : tablePoisson){
if (p.getInfestation() != null) {
mean += p.getInfestation();
}
}
return mean / i;
return mean / tablePoisson.size();
}
}

View File

@@ -1,13 +1,8 @@
package ecoparasite.nettoyage;
import ecoparasite.completion.Completion;
import ecoparasite.poisson.Poisson;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.function.BiConsumer;
import java.util.function.Function;
/**
* Class Définissant les méthodes statics de Nettoyage des données
@@ -21,73 +16,65 @@ public class Nettoyage {
*/
public static HashSet<Poisson> nettoiePoissonMean(HashSet<Poisson> tablePoisson){
Double mean = Completion.calculateMean(tablePoisson,Poisson::getInfestation); //Moyenne
Double mean = mean(tablePoisson); //Moyenne
Double ecart = ecartType(tablePoisson); // Ecart Type
ArrayList<Double> 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;
Double z = 0.0;
for (Poisson p : tablePoisson) {
z = ( p.getInfestation() - mean ) / ecart;
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)) {
if ( z >= 2.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).
* 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.
* @return Le HashSet avec les valeurs remplacés.
* @param <T> Le type de données cobaye. Exemple : Poisson, Population
* @param <V> Le type de la donnée à vérifier, doit être un Wrapper Number. Exemple : Double.
* Methode Privée permettant de calculer la moyenne
* @param tablePoisson Un Hashset de Poisson contenant nos données
* @return Un Double correspondant à la moyenne
*/
public static <T,V extends Number> HashSet<T> nettoieColumnsMoyenne(HashSet<T> list, Function<T,V> getValue, BiConsumer<T,V> setValue ){
private static Double mean(HashSet<Poisson> tablePoisson){
Double mean = Completion.calculateMean(list, getValue);
Double mean = 0.0;
ArrayList<Double> 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));
}
for (Poisson p : tablePoisson){
mean += p.getInfestation();
}
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) < firstQuart - (IQR * 1.5) || getValue.apply(item) > thirdQuart + (IQR * 1.5)){
setValue.accept( item, (V) mean);
}
return mean / tablePoisson.size();
}
return list;
/**
* Methode Privée permettant de calculer la variance
* @param tablePoisson Un Hashset de Poisson contenant nos données
* @return Un Double correspondant à la variance
*/
private static Double variance(HashSet<Poisson> tablePoisson){
Double vari = 0.0;
Double mean = mean(tablePoisson);
for (Poisson p : tablePoisson) {
vari += Math.pow( (p.getInfestation() - mean), 2);
}
return vari / tablePoisson.size();
}
/**
* Methode Privée permettant de calculer l'écart-type
* @param tablePoisson Un Hashset de Poisson contenant nos données
* @return Un Double correspondant à l'écart-type
*/
private static Double ecartType(HashSet<Poisson> tablePoisson){
Double vari = variance(tablePoisson);
return Math.sqrt(vari);
}

View File

@@ -1,91 +0,0 @@
package ecoparasite.poisson;
import ecoparasite.input.DataParsing;
import ecoparasite.input.InvalidParsingException;
import ecoparasite.input.RawData;
import ecoparasite.input.RawDataOverflow;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Objects;
import static java.lang.Double.valueOf;
public class MackerelSerra extends Poisson implements DataParsing {
/**
* Constructeur de MackerelSerra
* @param length
* @param infestation
*/
public MackerelSerra(String id, Double length, Double infestation) {
super(id, length, null, infestation);
}
/**
* Implémentation de la fonction parse de DataParsing.
* Renvoie un tableau de poissons à partir d'un RawData.
*
* @param data Notre RawData
* @param parseTypeId L'ID du type de parsing, ignoré ici.
* @return Le tableau de poissons.
* @throws RawDataOverflow Si on a un dépassement de données dans notre RawData.
* @throws InvalidParsingException
*/
public static HashSet<Poisson> parse(RawData data, int parseTypeId) throws RawDataOverflow, InvalidParsingException {
return MackerelSerra.parse(data);
}
/**
* Implémentation de la fonction parse de Dataparsing
* @param data Notre RawData.
* @return tableau des poissons
* @throws RawDataOverflow Si on a un dépassement de données dans notre RawDataOverflow.
*/
public static HashSet<Poisson> parse(RawData data) throws RawDataOverflow {
HashMap<String,String> temp = new HashMap<>();
HashSet<Poisson> fishSet;
fishSet = new HashSet<>();
for (int i = 0; i < data.getData().getFirst().size(); i++) {
temp = data.getEntry(i);
String id = !Objects.equals(temp.get("id"), "") ? (temp.get("id")) : null;
Double size = !Objects.equals(temp.get("LT"), "") ? valueOf(temp.get("LT")) : null;
Double infes = !Objects.equals(temp.get("Total"), "") ? valueOf(temp.get("Total")) : null;
Poisson newP = new MackerelSerra(id,size,infes);
newP.setFishParts( MackerelSerra.parsePartiePoisson(temp) );
fishSet.add(newP);
}
return fishSet;
}
/**
*
* @param entry
* @return
*/
private static HashSet<PartiePoisson> parsePartiePoisson(HashMap<String,String> entry){
HashSet<PartiePoisson> response = new HashSet<>();
for( String k: entry.keySet() ){
if( k.contains("Foie") || k.contains("Abdomen") || k.contains("Visceres") || k.contains("Autres")){
String bodyPart = k;
Double value = !Objects.equals(entry.get(k), "") ? valueOf(entry.get(k)) : null;
PartiePoisson p = new PartiePoisson(bodyPart, value);
response.add(p);
}
}
return response;
}
}

View File

@@ -9,8 +9,6 @@ import ecoparasite.poisson.Poisson;
import org.junit.jupiter.api.Test;
import java.util.HashSet;
import java.util.function.BiConsumer;
import java.util.function.Function;
import static org.junit.jupiter.api.Assertions.*;
@@ -25,10 +23,8 @@ class CompletionTest {
System.out.println(testp);
Function<Poisson,Double> getInfes = Poisson::getInfestation;
BiConsumer<Poisson,Double> setInfes = Poisson::setInfestation;
testp = Completion.completePoissonMean(testp);
testp = Completion.completeColumnsMoyenne(testp,getInfes,setInfes);
System.out.println(testp);
}
}

View File

@@ -6,7 +6,6 @@ import ecoparasite.input.InputFileException;
import ecoparasite.input.RawData;
import ecoparasite.input.RawDataOverflow;
import ecoparasite.poisson.Mackerel;
import ecoparasite.poisson.MackerelSerra;
import ecoparasite.poisson.Poisson;
import org.junit.jupiter.api.Test;
@@ -17,9 +16,9 @@ class NettoyageTest {
@org.junit.jupiter.api.Test
void nettoiePoissonMean() throws InputFileException, RawDataOverflow {
RawData test = InputFactory.readData("test2.csv", ",");
RawData test = InputFactory.readData("testNettoie.csv");
HashSet<Poisson> testp = MackerelSerra.parse(test);
HashSet<Poisson> testp = Mackerel.parse(test);
System.out.println(testp);

View File

@@ -1,25 +0,0 @@
package ecoparasite.poisson;
import ecoparasite.input.InputFactory;
import ecoparasite.input.InputFileException;
import ecoparasite.input.RawData;
import ecoparasite.input.RawDataOverflow;
import org.junit.jupiter.api.Test;
import java.util.HashSet;
import static org.junit.jupiter.api.Assertions.*;
class MackerelSerraTest {
@Test
void parse() throws InputFileException, RawDataOverflow {
RawData test = InputFactory.readData( "test2.csv" , ",");
HashSet<Poisson> fishs = MackerelSerra.parse( test );
for( Poisson poisson : fishs){
System.out.println(poisson);
}
}
}