資源簡介
java語言實現對mysql數據庫表中某個字段實現k-means算法,并將處理后的數據寫入新表

代碼片段和文件信息
import?java.sql.*;
import?java.util.*;
/**
?*?@author?tianshl
?*?@version?2018/1/13?上午11:13
?*/
public?class?Kmeans?{
????//?源數據
????private?List?origins?=?new?ArrayList<>();
????//?分組數據
????private?Map>?grouped;
????//?初始質心列表
????private?List?cores;
????//?數據源
????private?String?tableName;
????private?String?colName;
????/**
?????*?構造方法
?????*
?????*?@param?tableName?源數據表名稱
?????*?@param?colName???源數據列名稱
?????*?@param?cores?????質心列表
?????*/
????private?Kmeans(String?tableName?String?colNameList?cores){
????????this.cores?=?cores;
????????this.tableName?=?tableName;
????????this.colName?=?colName;
????}
????/**
?????*?重新計算質心
?????*
?????*?@return?新的質心列表
?????*/
????private?List?newCores(){
????????List?newCores?=?new?ArrayList<>();
????????for(List?v:?grouped.values()){
????????????newCores.add(v.stream().reduce(0?(sum?num)?->?sum?+?num)?/?(v.size()?+?0.0));
????????}
????????Collections.sort(newCores);
????????return?newCores;
????}
????/**
?????*?判斷是否結束
?????*
?????*?@return?bool
?????*/
????private?Boolean?isOver(){
????????List?_cores?=?newCores();
????????for(int?i=0?len=cores.size();?i ????????????if(!cores.get(i).toString().equals(_cores.get(i).toString())){
????????????????//?使用新質心
????????????????cores?=?_cores;
????????????????return?false;
????????????}
????????}
????????return?true;
????}
????/**
?????*?數據分組
?????*/
????private?void?setGrouped(){
????????grouped?=?new?HashMap<>();
????????Double?core;
????????for?(Integer?origin:?origins)?{
????????????core?=?getCore(origin);
????????????if?(!grouped.containsKey(core))?{
????????????????grouped.put(core?new?ArrayList<>());
????????????}
????????????grouped.get(core).add(origin);
????????}
????}
????/**
?????*?選擇質心
?????*
?????*?@param?num???要分組的數據
?????*?@return??????質心
?????*/
????private?Double?getCore(Integer?num){
????????//?差?列表
????????List?diffs?=?new?ArrayList<>();
????????//?計算差
????????for(Double?core:?cores){
????????????diffs.add(Math.abs(num?-?core));
????????}
????????//?最小差?->?索引?->?對應的質心
????????return?cores.get(diffs.indexOf(Collections.min(diffs)));
????}
????/**
?????*??建立數據庫連接
?????*?@return??connection
?????*/
????private?Connection?getConn(){
????????try?{
????????????//?URL指向要訪問的數據庫名analysis
????????????String?url?=?“jdbc:mysql://localhost:3306/analysis“;
????????????//?MySQL配置時的用戶名
????????????String?user?=?“root“;
????????????//?MySQL配置時的密碼
????????????String?password?=?“root“;
????????????Class.forName(“com.mysql.jdbc.Driver“);
????????????//聲明Connection對象
????????????Connection?conn?=?DriverManager.getConnection(url?user?password);
????????????if(conn.isClosed()){
????????????????System.out.println(“連接數據庫失敗!“);
????????????????return?null;
????????????}
????????????System.out.println(“連接數據庫成功!“);
????????????return?conn;
????????}?catch?(Exception?e)?{
????????????System.out.println(“連接數據庫失敗!“);
????????????e.printStackTrace();
??
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2018-01-13?12:28??kmeans\
?????文件????????7002??2018-01-13?12:28??kmeans\Kmeans.class
?????文件????????6377??2018-01-13?12:25??kmeans\Kmeans.java
?????目錄???????????0??2018-01-13?12:29??__MACOSX\
?????目錄???????????0??2018-01-13?12:29??__MACOSX\kmeans\
?????文件?????????172??2018-01-13?12:25??__MACOSX\kmeans\._Kmeans.java
?????目錄???????????0??2018-01-13?12:06??kmeans\lib\
?????文件??????999810??2017-11-22?15:31??kmeans\lib\mysql-connector-java-5.1.45-bin.jar
?????目錄???????????0??2018-01-13?12:29??__MACOSX\kmeans\lib\
?????文件?????????222??2017-11-22?15:31??__MACOSX\kmeans\lib\._mysql-connector-java-5.1.45-bin.jar
?????文件???????22194??2018-01-13?12:27??kmeans\README.pdf
?????文件?????????270??2018-01-13?12:27??__MACOSX\kmeans\._README.pdf
- 上一篇:排課表Java源代碼
- 下一篇:android自定義時鐘APP源碼
評論
共有 條評論