Methode Static de nettoyage des valeurs abérrante et absurde
+
public static<T, V extends Number>HashSet<T>nettoieColumnsMoyenne(HashSet<T> list,
+ Function<T,V> getValue,
+ BiConsumer<T,V> setValue,
+ boolean allowNegative)
+
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.
+
Type Parameters:
+
T - Le type de données cobaye. Exemple : Poisson, Population
+
V - Le type de la donnée à vérifier, doit être un Wrapper Number. Exemple : Double.
Parameters:
-
tablePoisson - Un Hashset de Poisson contenant nos données
+
list - La liste de données cobaye.
+
getValue - La fonction (Getter) qui permet d'obtenir la valeur que l'on veut vérifier
+
setValue - La fonction (Setter) qui permet de remplacer la valeur si null.
+
allowNegative - Savoir si une valeur négative est forcément aberrant.
Permet de remplacer les valeurs abérrantes d'un paramètre d'un HashSet à l'aide d'une regression linéaire, corrélation entre deux valeurs.
+Exemple d'utilisation : T = Poisson, V = Double, getX = Poisson::getWidth, getY = Poisson::getInfes, setY = Poisson::setInfes
+
+
Type Parameters:
+
T - Le type de données cobaye. Exemple : Poisson, Population
+
V - Le type de la donnée à vérifier, doit être un Wrapper Number. Exemple : Double.
+
Parameters:
+
list - La liste de données cobaye.
+
getX - La fonction (Getter) qui permet d'obtenir les données du X de notre regression linéaire.
+
getY - La fonction (Getter) qui permet d'obtenir la valeur que l'on veut vérifier
+
setY - La fonction (Setter) qui permet de remplacer la valeur si null.
+
allowNegative - Savoir si une valeur négative est forcément aberrant.
diff --git a/Doc/search.html b/Doc/search.html
index d08e8e1..b9c526b 100644
--- a/Doc/search.html
+++ b/Doc/search.html
@@ -1,11 +1,11 @@
-
+
Search
-
+
diff --git a/Doc/serialized-form.html b/Doc/serialized-form.html
index 36c0762..c5f4ab9 100644
--- a/Doc/serialized-form.html
+++ b/Doc/serialized-form.html
@@ -1,11 +1,11 @@
-
+
Serialized Form
-
+
diff --git a/Doc/type-search-index.js b/Doc/type-search-index.js
index f5d424a..7312b14 100644
--- a/Doc/type-search-index.js
+++ b/Doc/type-search-index.js
@@ -1 +1 @@
-typeSearchIndex = [{"l":"All Classes and Interfaces","u":"allclasses-index.html","k":"18"},{"p":"ecoparasite","l":"Application"},{"p":"ecoparasite.completion","l":"Completion"},{"p":"ecoparasite.input","l":"DataParsing","k":"10"},{"p":"ecoparasite.input","l":"InputFactory"},{"p":"ecoparasite.input","l":"InputFileException","k":"13"},{"p":"ecoparasite.input","l":"InvalidParsingException","k":"13"},{"p":"ecoparasite.poisson","l":"Mackerel"},{"p":"ecoparasite.poisson","l":"Merlu"},{"p":"ecoparasite.nettoyage","l":"Nettoyage"},{"p":"ecoparasite.poisson","l":"PartiePoisson"},{"p":"ecoparasite.poisson","l":"Poisson"},{"p":"ecoparasite.population","l":"Population"},{"p":"ecoparasite.population","l":"PopulationArgInterval"},{"p":"ecoparasite.population","l":"PopulationArgs"},{"p":"ecoparasite.population","l":"PopulationParsing"},{"p":"ecoparasite.input","l":"RawData"},{"p":"ecoparasite.input","l":"RawDataOverflow","k":"13"}];updateSearchResults();
\ No newline at end of file
+typeSearchIndex = [{"l":"All Classes and Interfaces","u":"allclasses-index.html","k":"18"},{"p":"ecoparasite","l":"Application"},{"p":"ecoparasite.completion","l":"Completion"},{"p":"ecoparasite.input","l":"DataParsing","k":"10"},{"p":"ecoparasite.input","l":"InputFactory"},{"p":"ecoparasite.input","l":"InputFileException","k":"13"},{"p":"ecoparasite.input","l":"InvalidParsingException","k":"13"},{"p":"ecoparasite","l":"LectureEval"},{"p":"ecoparasite.poisson","l":"Mackerel"},{"p":"ecoparasite.poisson","l":"MackerelSerra"},{"p":"ecoparasite.poisson","l":"Merlu"},{"p":"ecoparasite.nettoyage","l":"Nettoyage"},{"p":"ecoparasite.poisson","l":"PartiePoisson"},{"p":"ecoparasite.poisson","l":"Poisson"},{"p":"ecoparasite.population","l":"Population"},{"p":"ecoparasite.population","l":"PopulationArgInterval"},{"p":"ecoparasite.population","l":"PopulationArgs"},{"p":"ecoparasite.population","l":"PopulationParsing"},{"p":"ecoparasite.input","l":"RawData"},{"p":"ecoparasite.input","l":"RawDataOverflow","k":"13"}];updateSearchResults();
\ No newline at end of file
diff --git a/README.md b/README.md
index 71589c6..b499780 100644
--- a/README.md
+++ b/README.md
@@ -14,6 +14,9 @@ Le début du code et de l'infrastructure complète du projet est disponible dess
- La Javadoc se trouve dans le dossier ``Doc``..
Les fichiers de tests se trouvent dans le dossier ``tests``.
-Le fichier qui permet de tester la complétion des données par la moyenne est le fichier ``CompletionTest.java``
-Il prend un fichier crée volontairement avec des données en trop qui se trouve dans le dossier Data.
-Il fait deux affichages, un avec les données dont le taux d'infestation global est null pour un Mackerel et un autre où le taux d'infestation global a été remplacé par la moyenne.
\ No newline at end of file
+
+Actuellement, nous avons terminé la complétion/nettoyage par Moyenne/Régression Linéaire.
+Nous allons donc voir pour l'interface graphique.
+
+Le fichier qui permet de tester l'ouverture du fichier Test3 pour l'évaluation est le fichier ``ecoparasite.LectureEval``.
+Ce fichier a été réalisé par Benjamin THOREL.
\ No newline at end of file
diff --git a/UML/classes.png b/UML/classes.png
index c860976..89b5e01 100644
Binary files a/UML/classes.png and b/UML/classes.png differ
diff --git a/UML/classes.puml b/UML/classes.puml
index 355dcb9..e2c1c18 100644
--- a/UML/classes.puml
+++ b/UML/classes.puml
@@ -120,6 +120,14 @@ namespace ecoparasite {
namespace ecoparasite.completion {
class Completion {
+ {static} completeColumnsMoyenne
+ + {static} completeColumnsLinear
+ }
+ }
+
+ namespace ecoparasite.nettoyage {
+ class Nettoyage {
+ + {static} nettoieColumnsMoyenne
+ + {static} nettoieColumnsLinear
}
}
diff --git a/src/ecoparasite/completion/Completion.java b/src/ecoparasite/completion/Completion.java
index 2899aac..2c1d8bb 100644
--- a/src/ecoparasite/completion/Completion.java
+++ b/src/ecoparasite/completion/Completion.java
@@ -64,6 +64,16 @@ public class Completion {
return mean / i;
}
+ /**
+ * Permet de remplacer les valeurs inexistantes par les valeurs les plus probables avec une regression linéaire
+ * @param list La liste des données
+ * @param getX Le getter de la valeur en x
+ * @param getY Le getter de la valeur en y
+ * @param setY Le Setter de la valeur en y qui est à compléter
+ * @return Une liste des valeurs compléters
+ * @param Le type des données de la liste
+ * @param Le type des données numériques
+ */
public static HashSet completeColumnsLinear(HashSet list, Function getX, Function getY, BiConsumer setY ){
double meanX = calculateMean(list, getX);
@@ -113,6 +123,14 @@ public class Completion {
return numerateur / denominateur;
}
+
+ /**
+ * Permet de calculer b dans une regression linéaire
+ * @param meanX
+ * @param meanY
+ * @param valueA
+ * @return La valeur de b dans la formule de regression linéaire
+ */
public static double calculateLinearB(
double meanX,
double meanY,
diff --git a/src/ecoparasite/nettoyage/Nettoyage.java b/src/ecoparasite/nettoyage/Nettoyage.java
index 19468f6..0005775 100644
--- a/src/ecoparasite/nettoyage/Nettoyage.java
+++ b/src/ecoparasite/nettoyage/Nettoyage.java
@@ -68,5 +68,62 @@ public class Nettoyage {
return nettoieColumnsMoyenne(list, getValue, setValue, true);
}
+ /**
+ * Permet de remplacer les valeurs abérrantes d'un paramètre d'un HashSet à l'aide d'une regression linéaire, corrélation entre deux valeurs.
+ * Exemple d'utilisation : T = Poisson, V = Double, getX = Poisson::getWidth, getY = Poisson::getInfes, setY = Poisson::setInfes
+ *
+ * @param list La liste de données cobaye.
+ * @param getX La fonction (Getter) qui permet d'obtenir les données du X de notre regression linéaire.
+ * @param getY La fonction (Getter) qui permet d'obtenir la valeur que l'on veut vérifier
+ * @param setY 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 nettoieColumnsLinear(HashSet list, Function getX, Function getY, BiConsumer setY, boolean allowNegative ){
+ double meanX = Completion.calculateMean(list, getX);
+ double meanY = Completion.calculateMean(list, getY);
+
+ double a = Completion.calculateLinearA(list,getX,getY,meanX,meanY);
+ double b = Completion.calculateLinearB(meanX,meanY,a);
+
+ ArrayList array = new ArrayList<>();
+ for ( T item : list) {
+ if (getY.apply(item)!= null){ //Test des valeurs null pour les Tests Unitaires. Je ne devrais pas en avoir.
+ array.add(getY.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( getY.apply(item) == null || getY.apply(item).doubleValue() < firstQuart - (IQR * 1.5) || getY.apply(item).doubleValue() > thirdQuart + (IQR * 1.5) || ( !allowNegative && getY.apply(item).doubleValue() < 0 ) ){
+ Double value = a * getX.apply(item).doubleValue() + b;
+ setY.accept( item, (V) value );
+ }
+ }
+
+ return list;
+ }
+
+ /**
+ * Polymorphisme de la fonction nettoyage de colonne linéaire avec par défaut, l'autorisation des valeurs négatives.
+ * @param list
+ * @param getX
+ * @param getY
+ * @param setY
+ * @return
+ * @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/poisson/Mackerel.java b/src/ecoparasite/poisson/Mackerel.java
index 39b9dbe..c6d8361 100644
--- a/src/ecoparasite/poisson/Mackerel.java
+++ b/src/ecoparasite/poisson/Mackerel.java
@@ -70,9 +70,9 @@ public class Mackerel extends Poisson implements DataParsing {
}
/**
- *
- * @param entry
- * @return
+ * Implementation de parsePartiePoisson de l'interface DataParsing
+ * @param entry correspond à notre liste temporaire lu dans parse pour chacun des poissons
+ * @return envoie un tableau de partie de Poisson à ajouter à notre poisson
*/
private static HashSet parsePartiePoisson(HashMap entry){
diff --git a/src/ecoparasite/poisson/MackerelSerra.java b/src/ecoparasite/poisson/MackerelSerra.java
index 8a95c1d..b565573 100644
--- a/src/ecoparasite/poisson/MackerelSerra.java
+++ b/src/ecoparasite/poisson/MackerelSerra.java
@@ -11,6 +11,11 @@ import java.util.Objects;
import static java.lang.Double.valueOf;
+
+/**
+ * Classe MackerelSerra créer pour le fichier test2.csv
+ * cette classe existe principalement pour l'évaluation
+ */
public class MackerelSerra extends Poisson implements DataParsing {
/**
@@ -67,9 +72,9 @@ public class MackerelSerra extends Poisson implements DataParsing {
}
/**
- *
- * @param entry
- * @return
+ * Implementation de parsePartiePoisson de l'interface DataParsing
+ * @param entry correspond à notre liste temporaire lu dans parse pour chacun des poissons
+ * @return envoie un tableau de partie de Poisson à ajouter à notre poisson
*/
private static HashSet parsePartiePoisson(HashMap entry){
diff --git a/tests/ecoparasite/nettoyage/NettoyageTest.java b/tests/ecoparasite/nettoyage/NettoyageTest.java
index b08d9e3..97c32d9 100644
--- a/tests/ecoparasite/nettoyage/NettoyageTest.java
+++ b/tests/ecoparasite/nettoyage/NettoyageTest.java
@@ -37,4 +37,26 @@ class NettoyageTest {
System.out.println(testp);
}
+ @org.junit.jupiter.api.Test
+ void nettoieColumnsLinear() throws InputFileException, RawDataOverflow {
+
+ RawData test = InputFactory.readData("test2.csv", ",");
+
+ HashSet testp = MackerelSerra.parse(test);
+
+ System.out.println(testp);
+
+ Function getLength = Poisson::getLength;
+ 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 );
+
+ System.out.println(testp);
+ }
+
}
\ No newline at end of file