нуждаться
Выполните алгоритм K-средних на поле таблицы в базе данных MySQL и запишите обработанные данные в новую таблицу.
Исходный код и драйвер
kmeans_jb51.rar
Исходный код
Импорт java.sql.*; import java.util.*;/***@author tianshl*@version 2018/1/13 11:13*/public class kmeans {// Prish Data Private <Integer> Origins = new ArrayList <> (); // Сгруппировали данные частной карты <Double, List <Integer >> сгруппировать; // Первоначальный список центроида частного списка <double> ядер; // Источник данных Private String TableName; частная строка Colname; / *** Метод конструктора** @param TableName Source Data name* @param colname Имя столбца данных* @param Cores Center of Mass List*/ Private Kmeans (строка TableName, String Colname, List <Double> cores) {this.cores = cores; this.tablename = tableName; this.colname = colname; } / ** * пересказывать центр массы * * @return Новый список центроидов * / private list <way> newcores () {list <double> newcores = new Arraylist <> (); for (list <Integer> v: Grupered.values ()) {newcores.add (v.stream (). Cream (0, (sum, num) -> sum + num) / (v.size () + 0,0)); } Collections.sort (newcores); вернуть Newcores; } / ** * Определите, заканчивается ли он * * @return bool * / private boolean isover () {list <double> _cores = newcores (); for (int i = 0, len = cores.size (); i <len; i ++) {if (! cores.get (i) .toString (). equals (_cores.get (i) .toString ())) {// Использовать новые центроидные cores = _cores; вернуть ложь; }} вернуть true; } / *** группировка данных* / private void setGrouped () {Grupered = new Hashmap <> (); Двойное ядро; for (Integer Origin: Origins) {core = getCore (Origin); if (! grouped.containskey (core)) {Grupered.put (core, new Arraylist <> ()); } сгруппировать.get (core) .Add (Origin); }} / *** Выберите Centroid** @param Num Data, которые должны быть сгруппированы* @return Centroid* / private Double GetCore (Integer NUM) {// Список различий <double> diffs = new ArrayList <> (); // Рассчитайте разницу для (двойное ядро: ядер) {diffs.add (math.abs (num - core)); } // Минимальная разница-> index-> Соответствующие центроидные ядер возврата.get (diffs.Indexof (collections.min (diffs))); }/*** Установить подключение к базе данных* @return Connection*/private Connection getConn () {try {// URL -точки к имени базы данных, чтобы получить доступ к mydata string url = "jdbc: mysql: // localhost: 3306/data_analysis_dev"; // имя пользователя во время конфигурации MySQL string user = "root"; // пароль во время конфигурации MySQL String Password = "root"; // Загрузить драйвер class.forname ("com.mysql.jdbc.driver"); // Объявление объекта соединения Connect Connect = DriverManager.getConnection (URL, пользователь, пароль); if (conn.isclosed ()) {System.out.println («Подключение к базе данных не удалось!»); вернуть ноль; } System.out.println ("успешно подключение к базе данных!"); вернуть Конн; } catch (Exception e) {System.out.println ("Conn Connection не удалось!"); e.printstacktrace (); } return null; } / *** Закройте подключение к базе данных** @param Connect Connection* / private void close (connect conn) {try {if (conn! = Null &&! Conn.isclosed ()) conn.close (); } catch (Exception e) {e.printstackTrace (); }} / *** Получить исходные данные* / private void getorigins () {connection conn = null; try {conn = getConn (); if (conn == null) return; Оператор оператора = conn.createStatement (); Resultset rs = ratement.executequery (string.format ("select %s от %s", colname, tableName)); while (rs.next ()) {origins.add (rs.getint (1)); } conn.close (); } catch (Exception e) {e.printstackTrace (); } наконец {close (conn); }} / *** Записать данные в новую таблицу* / private void write () {connection conn = null; try {conn = getConn (); if (conn == null) return; // Создание оператора таблицы = conn.createStatement (); // Удалить старую таблицу данных. // Создать новую таблицу оператор. // автоматическое представление Conn.SetAutoCommit (false); Подготовленное Statatement ps = conn.prepareStatement («Вставьте в значения k_means (?,?)»); for (map.Entry <Double, List <Integer >> inpit: Grupered.EntrySet ()) {Double Core = intry.getKey (); for (integer value: entry.getValue ()) {ps.setDouble (1, core); ps.setint (2, значение); ps.addbatch (); }} // Пэт -выполнение ps.executebatch (); // Комплект транзакции conn.commit (); // закрыть соединение conn.close (); } catch (Exception e) {e.printstackTrace (); } наконец {close (conn); }} / *** Данные процесса* / private void run () {system.out.println ("получить исходные данные"); // Получить исходные данные getorigins (); // прекратить группировка логического isover = false; System.out.println («Обработка группировки данных»); while (! isover) {// группировка данных setGrouped (); // определить, остановить ли группировка isover = isover (); } System.out.println ("Записать обработанные данные в базу данных"); // записать сгруппированные данные в новую таблицу write (); System.out.println («Напишите данные для завершения»); } public static void main (string [] args) {list <double> cores = new ArrayList <> (); Cores.add (260.0); Cores.add (600,0); // имя таблицы, имя столбца, список центроидов New Kmeans ("Attributes", "attr_length", cores) .run (); }}Исходный файл
Kmeans.java
Компиляция
Javac Kmeans.java
бегать
# Укажите библиотеку зависимостей java -djava.ext.dirs =./Lib kmeans
Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.