Skip to content
Snippets Groups Projects
Commit ad0065a0 authored by Hugo Desmons's avatar Hugo Desmons
Browse files

Merge branch 'hugodebuyser' into 'master'

Correction CSS et tutoriel terminé

See merge request sae302/2024/H4_SAE3.3!33
parents d651db50 3af8606c
No related branches found
No related tags found
No related merge requests found
...@@ -2,9 +2,9 @@ ...@@ -2,9 +2,9 @@
#### Préambule #### Préambule
Avant de commencer, sachez que cette importation nécessite certaines connaissances en Java ou en programmation orientée objet. Toutefois, si vous n'êtes pas familier avec ces concepts, ce tutoriel vous guidera à travers toutes les étapes nécessaires pour importer de nouvelles données. Avant de commencer, sachez que cette importation nécessite certaines connaissances en Java ou en programmation orientée objet. Cependant, si vous n'êtes pas familier avec ces concepts, ce tutoriel vous guidera à travers toutes les étapes nécessaires pour importer de nouvelles données.
Assurez-vous que votre base de données est sous forme de fichier CSV, avec les noms des colonnes sur la première ligne. Il est également essentiel de savoir quelles données vous souhaitez analyser. Cette étape est indépendante du logiciel que vous utilisez, et dépend plutôt de la manière dont vous allez importer vos données. Assurez-vous que votre base de données est sous forme de fichier CSV, avec les noms des colonnes sur la première ligne. Il est également essentiel de savoir quelles données vous souhaitez analyser. Cette étape est indépendante du logiciel que vous utilisez et dépend plutôt de la manière dont vous allez importer vos données.
--- ---
...@@ -27,19 +27,20 @@ private double column4; ...@@ -27,19 +27,20 @@ private double column4;
Réitérez cette opération pour toutes les colonnes de votre CSV. Vous remarquerez qu’il est nécessaire d’attribuer un type à chaque attribut. Assurez-vous de bien distinguer les types numériques (entiers, réels) des chaînes de caractères. Réitérez cette opération pour toutes les colonnes de votre CSV. Vous remarquerez qu’il est nécessaire d’attribuer un type à chaque attribut. Assurez-vous de bien distinguer les types numériques (entiers, réels) des chaînes de caractères.
Ensuite, créez les différents constructeurs pour votre classe. Commencez par un constructeur vide, indispensable au bon fonctionnement de l’importation : Ensuite, créez les différents constructeurs pour votre classe. Commencez par un constructeur vide, indispensable au bon fonctionnement de l’importation. N'oubliez pas d'initialiser la donnée à classifier par défaut. Par exemple, la première donnée correspond à l'indice 0 :
```java ```java
public [NomDeLaClasse]() { public [NomDeLaClasse]() {
// Constructeur vide classificationType = [numéro de la donnée à classifier];
} }
``` ```
Puis, créez un constructeur prenant en paramètre tous les attributs définis précédemment : Puis, créez un constructeur prenant en paramètre tous les attributs définis précédemment, ainsi que le numéro de la donnée à classifier, la première donnée correspondant à l'indice 0 :
```java ```java
public [NomDeLaClasse](String column1, int column2, boolean column3, double column4) { public [NomDeLaClasse](String column1, int column2, boolean column3, double column4) {
super(); super();
classificationType = [numéro de la donnée à classifier];
this.column1 = column1; this.column1 = column1;
this.column2 = column2; this.column2 = column2;
this.column3 = column3; this.column3 = column3;
...@@ -59,17 +60,55 @@ Ensuite, modifiez les méthodes `getClassification()` et `setClassification()` p ...@@ -59,17 +60,55 @@ Ensuite, modifiez les méthodes `getClassification()` et `setClassification()` p
```java ```java
@Override @Override
public String getClassification() { public String getClassification() throws IllegalAccessException {
return [DonnéeÀClassifier]; return (String) this.getClass().getDeclaredFields()[classificationType].get(this).toString();
} }
@Override @Override
public void setClassification(String classification) { public void setClassification(String classification) throws IllegalAccessException {
this.[DonnéeÀClassifier] = classification; this.getClass().getDeclaredFields()[classificationType].set(this, classification);
} }
``` ```
La méthode `getAttributesNames()` permet de renvoyer les différents attributs étudiés dans le graphe, c'est-à-dire tous les attributs sauf celui que vous souhaitez classifier. Vous pouvez rendre les noms des attributs plus lisibles que leur nom de variable, comme dans l’exemple ci-dessous : Il vous suffit ensuite de copier-coller cette méthode pour pouvoir définir le type de classification actuel :
```java
public void setClassificationType(int classificationType) throws IllegalArgumentException, IllegalAccessException {
if (classificationType < 0 || classificationType >= getAttributesNames().size()) {
throw new IllegalArgumentException("Cet attribut n'existe pas.");
}
String keyToVerify = getAttributesNames().keySet().toArray(new String[0])[classificationType];
if (!getClassifiedAttributes().containsKey(keyToVerify)) {
throw new IllegalArgumentException("Cet attribut ne peut pas être utilisé pour la classification.");
}
LoadableData.classificationType = classificationType;
LoadableData.setClassificationTypes(ClassificationModel.getClassificationModel().getDatas());
}
```
Vous devez ensuite inscrire les différentes classifications que vous souhaitez étudier :
```java
public Map<String, Object> getClassifiedAttributes() {
Map<String, Object> attributes = new LinkedHashMap<>();
attributes.put("column1", column1);
attributes.put("column2", column2);
attributes.put("column3", column3);
attributes.put("column4", column4);
return attributes;
}
```
Puis ajoutez cette méthode pour pouvoir définir le type de classification :
```java
@Override
public int getClassificationType() {
return classificationType;
}
```
La méthode `getAttributesNames()` renvoie les différents attributs étudiés dans le graphe, c'est-à-dire tous les attributs sauf celui que vous souhaitez classifier. Vous pouvez rendre les noms des attributs plus lisibles que leur nom de variable, comme dans l’exemple ci-dessous :
```java ```java
@Override @Override
...@@ -88,7 +127,7 @@ La méthode `getAttributes()` permet de renvoyer les différents attributs numé ...@@ -88,7 +127,7 @@ La méthode `getAttributes()` permet de renvoyer les différents attributs numé
```java ```java
@Override @Override
public double[] getAttributes() { public double[] getAttributes() {
return new double[]{column1, column2, column3, column4}; return new double[]{column1, column2, column3 ? 1.0 : 0.0, column4}; // Assurez-vous de convertir les booléens
} }
``` ```
...@@ -97,7 +136,7 @@ La méthode `getStringAttributes()` renvoie un tableau d'attributs de type chaî ...@@ -97,7 +136,7 @@ La méthode `getStringAttributes()` renvoie un tableau d'attributs de type chaî
```java ```java
@Override @Override
public String[] getStringAttributes() { public String[] getStringAttributes() {
return new String[]{column1, String.valueOf(column2)}; return new String[]{column1, String.valueOf(column2), String.valueOf(column3)};
} }
``` ```
...@@ -134,4 +173,4 @@ case [Nom des données]: ...@@ -134,4 +173,4 @@ case [Nom des données]:
--- ---
Ces explications devraient vous permettre d’ajouter des données à la classification. Si vous rencontrez des difficultés lors de votre implémentation, n'hésitez pas à relire ce tutoriel ou à consulter les implémentations existantes. Ces explications devraient vous permettre d’ajouter des données à la classification. Si vous rencontrez des difficultés lors de votre implémentation, n'hésitez pas à relire ce tutoriel ou à consulter les implémentations existantes. Veillez à vous assurer que toutes les méthodes ont bien été implémentées, sinon l'implémentation ne fonctionnera pas correctement.
\ No newline at end of file
...@@ -84,11 +84,6 @@ ...@@ -84,11 +84,6 @@
</children></AnchorPane> </children></AnchorPane>
</content> </content>
</Tab> </Tab>
<Tab text="Couleurs des données">
<content>
<AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="180.0" prefWidth="200.0" />
</content>
</Tab>
</tabs> </tabs>
</TabPane> </TabPane>
</children></AnchorPane> </children></AnchorPane>
......
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.Scene?> <?import javafx.scene.*?>
<?import javafx.scene.control.Button?> <?import javafx.scene.control.*?>
<?import javafx.scene.control.ChoiceBox?> <?import javafx.scene.layout.*?>
<?import javafx.scene.layout.AnchorPane?> <?import javafx.scene.text.*?>
<?import javafx.scene.layout.VBox?> <?import javafx.stage.*?>
<?import javafx.scene.text.Text?>
<?import javafx.stage.Stage?>
<Stage fx:id="stage" xmlns="http://javafx.com/javafx/21" xmlns:fx="http://javafx.com/fxml/1" fx:controller="fr.univlille.sae.classification.controller.ChooseAttributesController"> <Stage fx:id="stage" xmlns="http://javafx.com/javafx/17.0.12" xmlns:fx="http://javafx.com/fxml/1" fx:controller="fr.univlille.sae.classification.controller.ChooseAttributesController">
<scene> <scene>
<Scene> <Scene>
<AnchorPane prefHeight="175.0" prefWidth="317.0"> <AnchorPane prefHeight="175.0" prefWidth="317.0">
...@@ -17,7 +15,10 @@ ...@@ -17,7 +15,10 @@
<children> <children>
<Text strokeType="OUTSIDE" strokeWidth="0.0" text="Veuillez selectionner l'attribut sur lequel vous souhaitez classifier les données" textAlignment="CENTER" wrappingWidth="254.06924438476562" /> <Text strokeType="OUTSIDE" strokeWidth="0.0" text="Veuillez selectionner l'attribut sur lequel vous souhaitez classifier les données" textAlignment="CENTER" wrappingWidth="254.06924438476562" />
<ChoiceBox fx:id="choice" prefWidth="150.0" stylesheets="@../css/style.css" /> <ChoiceBox fx:id="choice" prefWidth="150.0" stylesheets="@../css/style.css" />
<Button mnemonicParsing="false" onAction="#validate" stylesheets="@../css/style.css" text="Valider" textFill="WHITE" /> <Button mnemonicParsing="false" onAction="#validate" stylesheets="@../css/style.css" text="Valider" textFill="WHITE">
<font>
<Font name="System Bold" size="13.0" />
</font></Button>
</children> </children>
</VBox> </VBox>
</children></AnchorPane> </children></AnchorPane>
......
...@@ -36,7 +36,7 @@ ...@@ -36,7 +36,7 @@
</HBox> </HBox>
<HBox alignment="CENTER" prefHeight="36.0" prefWidth="364.0" spacing="20.0"> <HBox alignment="CENTER" prefHeight="36.0" prefWidth="364.0" spacing="20.0">
<children> <children>
<Spinner fx:id="kEntry" /> <Spinner fx:id="kEntry" stylesheets="@../css/style.css" />
<Button fx:id="autoK" mnemonicParsing="false" onAction="#bestK" stylesheets="@../css/style.css" text="Attribution auto" textFill="WHITE"> <Button fx:id="autoK" mnemonicParsing="false" onAction="#bestK" stylesheets="@../css/style.css" text="Attribution auto" textFill="WHITE">
<font> <font>
<Font name="System Bold" size="13.0" /> <Font name="System Bold" size="13.0" />
...@@ -46,7 +46,7 @@ ...@@ -46,7 +46,7 @@
</HBox> </HBox>
<HBox alignment="CENTER" prefHeight="59.0" prefWidth="364.0"> <HBox alignment="CENTER" prefHeight="59.0" prefWidth="364.0">
<children> <children>
<Button fx:id="confirmK" onAction="#validate" mnemonicParsing="false" stylesheets="@../css/style.css" text="Valider" textFill="WHITE"> <Button fx:id="confirmK" mnemonicParsing="false" onAction="#validate" stylesheets="@../css/style.css" text="Valider" textFill="WHITE">
<font> <font>
<Font name="System Bold" size="14.0" /> <Font name="System Bold" size="14.0" />
</font></Button> </font></Button>
......
...@@ -29,7 +29,10 @@ ...@@ -29,7 +29,10 @@
</HBox> </HBox>
<HBox alignment="CENTER" prefHeight="76.0" prefWidth="310.0"> <HBox alignment="CENTER" prefHeight="76.0" prefWidth="310.0">
<children> <children>
<Button fx:id="confirmDataSelection" mnemonicParsing="false" onAction="#validate" stylesheets="@../css/style.css" text="Valider" textFill="WHITE" /> <Button fx:id="confirmDataSelection" mnemonicParsing="false" onAction="#validate" stylesheets="@../css/style.css" text="Valider" textFill="WHITE">
<font>
<Font name="System Bold" size="13.0" />
</font></Button>
</children> </children>
</HBox> </HBox>
</children> </children>
......
...@@ -13,10 +13,7 @@ import javafx.stage.Stage; ...@@ -13,10 +13,7 @@ import javafx.stage.Stage;
import java.io.IOException; import java.io.IOException;
import java.lang.reflect.Array; import java.lang.reflect.Array;
import java.time.temporal.Temporal; import java.time.temporal.Temporal;
import java.util.ArrayList; import java.util.*;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
/** /**
* Controlleur pour le FXML add-data-stage, pour ajouter une nouvelle donnée * Controlleur pour le FXML add-data-stage, pour ajouter une nouvelle donnée
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment