besoin
Exécutez l'algorithme K-Means sur un champ d'une table dans une base de données MySQL et écrivez les données traitées dans la nouvelle table.
Code source et pilote
kmeans_jb51.rar
Code source
Importer java.sql. *; Importer java.util. *; / ** * @author Tianshl * @version 2018/1/13 11:13 AM * / public class Kmeans {// Source Data List privé <Integer> Origins = New ArrayList <> (); // Données groupées Carte privée <double, list <Integer >> groupé; // Liste de centroïde initiale Liste privée <Double> Cores; // Source de données Private String TableName; String privé colname; / ** * Méthode du constructeur * * @param TableName Source Data Nom de la table * @param colname Source Data Nom de la colonne * @param cores Center of Mass List * / Private Kmeans (String TableName, String colname, list <rouble> cores) {this.cores = cœurs; this.tableName = tableName; this.colname = colname; } / ** * Recalculer le centre de masse * * @return Nouvelle liste de centroïdes * / Liste privée <Double> newCores () {list <double> newcires = new ArrayList <> (); for (list <Integer> v: grouped.values ()) {newCores.add (v.stream (). Reduce (0, (sum, num) -> sum + num) / (v.size () + 0.0)); } Collection.Sort (NewCores); retourner Newcores; } / ** * Déterminez s'il se termine * * @return bool * / private boolean isover () {list <pouble> _cores = newCores (); pour (int i = 0, len = cores.size (); i <len; i ++) {if (! cores.get (i) .toString (). equals (_cores.get (i) .toString ())) {// utilise de nouveaux cœs centroïdes = _cores; retourne false; }} return true; } / ** * Groupe de données * / private void setGroupEd () {groued = new hashmap <> (); Double noyau; pour (Integer Origin: Origins) {Core = getCore (Origin); if (! groued.ContainsKey (core)) {grouped.put (core, new ArrayList <> ()); } groued.get (core) .add (origine); }} / ** * Sélectionnez le centroïde * * @param num Données à regrouper * @return centroïde * / private double getcore (entier num) {// Liste de différence <Deuble> diffs = new ArrayList <> (); // Calculez la différence pour (double noyau: cœurs) {diffs.add (math.abs (num - noyau)); } // Différence minimale-> Index-> CORES RETROUR CORRRoid correspondant.get (diffs.indexof (Collection.Min (diffs))); } / ** * Établir une connexion de base de données * @return Connection * / Connexion privée getConn () {try {// L'URL pointe vers le nom de la base de données pour accéder à MyData String url = "JDBC: mysql: // localhost: 3306 / data_analysis_dev"; // Nom d'utilisateur pendant la chaîne de configuration MySQL User = "root"; // mot de passe pendant la chaîne de configuration mysql mot de passe = "root"; // Chargez le pilote class.forname ("com.mysql.jdbc.driver"); // Déclarer la connexion de connexion Connex CONC = driverManager.getConnection (URL, utilisateur, mot de passe); if (conn.isclosed ()) {System.out.println ("La connexion à la base de données a échoué!"); retourner null; } System.out.println ("Connexion à la base de données avec succès!"); Retourne Conn; } catch (exception e) {System.out.println ("Conn Connection a échoué!"); e.printStackTrace (); } return null; } / ** * Fermez la connexion de la base de données * * @param Conn Connection * / private void close (connexion Conn) {try {if (conn! = Null &&! Conn.isclosed ()) Conn.close (); } catch (exception e) {e.printStackTrace (); }} / ** * Obtenez des données source * / private void getOrigins () {connexion conn = null; essayez {conn = getConn (); if (conn == null) return; Instruction instruction = Conn.CreateStatement (); ResultSet rs = instruction.ExecuteQuery (string.format ("select% s from% s", colname, tableName)); while (Rs.Next ()) {Origins.Add (Rs.GetInt (1)); } conn.close (); } catch (exception e) {e.printStackTrace (); } Enfin {Close (Conn); }} / ** * Écrivez des données dans la nouvelle table * / private void write () {connection conn = null; essayez {conn = getConn (); if (conn == null) return; // Créer une instruction TABLE instruction = Conn.CreatEstatement (); // Supprimer l'ancienne déclaration de table de données. // Créer une nouvelle table instruction.Exécute ("Créer une table s'il n'est pas existant k_means (` Core` décimal (11, 7), `Col` entier (11));"); // Soumission automatique de conn.setAutoCommit (false); PréparéStatement ps = conn.preparestatement ("insérer dans les valeurs k_means (?,?)"); for (map.entry <double, list <Integer>> Entrée: groupé.EntrySet ()) {double core = entry.getKey (); pour (valeur entière: entrée.getValue ()) {ps.SetDouble (1, noyau); PS.SetInt (2, valeur); ps.AddBatch (); }} // exécution par lots de ps.ExecuteBatch (); // commit la transaction Conn.Commit (); // Closez la connexion conn.close (); } catch (exception e) {e.printStackTrace (); } Enfin {Close (Conn); }} / ** * Données de processus * / private void run () {System.out.println ("Get Source Data"); // Obtenez les données de données source (); // Arrête de regrouper booléen isover = false; System.out.println ("Traitement de groupement de données"); while (! isOver) {// Grouping de données setGroupEd (); // déterminer s'il faut arrêter le regroupement iSover = isOver (); } System.out.println ("Écrire des données traitées dans la base de données"); // Écrivez des données groupées à une nouvelle table écrite (); System.out.println ("Écrire des données pour terminer"); } public static void main (String [] args) {list <pouble> cores = new ArrayList <> (); cœurs.add (260,0); cœurs.add (600,0); // Nom de la table, nom de colonne, liste centroïde new kmeans ("attributs", "att_length", cores) .run (); }}Fichier source
Kmeans.java
Compilation
javac kmeans.java
courir
# Spécifiez la bibliothèque de dépendances java -djava.ext.dirs =. / Lib kmeans
Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.