Skip to content
Snippets Groups Projects
Commit bfb13e3e authored by Matisse DEKEISER's avatar Matisse DEKEISER
Browse files

Merge remote-tracking branch 'origin/master' into matissedekeiser

parents 7d346c51 ad0065a0
Branches
Tags
No related merge requests found
......@@ -2,9 +2,9 @@
#### 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;
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
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
public [NomDeLaClasse](String column1, int column2, boolean column3, double column4) {
super();
classificationType = [numéro de la donnée à classifier];
this.column1 = column1;
this.column2 = column2;
this.column3 = column3;
......@@ -59,17 +60,55 @@ Ensuite, modifiez les méthodes `getClassification()` et `setClassification()` p
```java
@Override
public String getClassification() {
return [DonnéeÀClassifier];
public String getClassification() throws IllegalAccessException {
return (String) this.getClass().getDeclaredFields()[classificationType].get(this).toString();
}
@Override
public void setClassification(String classification) {
this.[DonnéeÀClassifier] = classification;
public void setClassification(String classification) throws IllegalAccessException {
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
@Override
......@@ -88,7 +127,7 @@ La méthode `getAttributes()` permet de renvoyer les différents attributs numé
```java
@Override
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î
```java
@Override
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]:
---
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.
\ No newline at end of file
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.
......@@ -84,11 +84,6 @@
</children></AnchorPane>
</content>
</Tab>
<Tab text="Couleurs des données">
<content>
<AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="180.0" prefWidth="200.0" />
</content>
</Tab>
</tabs>
</TabPane>
</children></AnchorPane>
......
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.Scene?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.ChoiceBox?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.VBox?>
<?import javafx.scene.text.Text?>
<?import javafx.stage.Stage?>
<?import javafx.scene.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.text.*?>
<?import javafx.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>
<AnchorPane prefHeight="175.0" prefWidth="317.0">
......@@ -17,7 +15,10 @@
<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" />
<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>
</VBox>
</children></AnchorPane>
......
......@@ -36,7 +36,7 @@
</HBox>
<HBox alignment="CENTER" prefHeight="36.0" prefWidth="364.0" spacing="20.0">
<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">
<font>
<Font name="System Bold" size="13.0" />
......@@ -46,7 +46,7 @@
</HBox>
<HBox alignment="CENTER" prefHeight="59.0" prefWidth="364.0">
<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 name="System Bold" size="14.0" />
</font></Button>
......
......@@ -29,7 +29,10 @@
</HBox>
<HBox alignment="CENTER" prefHeight="76.0" prefWidth="310.0">
<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>
</HBox>
</children>
......
......@@ -13,10 +13,7 @@ import javafx.stage.Stage;
import java.io.IOException;
import java.lang.reflect.Array;
import java.time.temporal.Temporal;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.*;
/**
* Contrôleur pour le fichier FXML "add-data-stage", permettant à l'utilisateur
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment