필요
MySQL 데이터베이스의 테이블 필드에서 k-means 알고리즘을 실행하고 처리 된 데이터를 새 테이블에 작성하십시오.
소스 코드 및 드라이버
kmeans_jb51.rar
소스 코드
Java.sql.*; import java.util.*;/***@author tianshl*@version 2018/1/13 11:13 AM*/public class kmeans {// 소스 개인 목록 <Integer> origins = new arraylist <> (); // 그룹화 된 데이터 개인지도 <double, list <integer >> 그룹화; // 초기 중심 목록 비공개 목록 <Double> 코어; // 데이터 소스 개인 문자열 TableName; 개인 문자열 colname; / *** 생성자 방법** @param tablename 소스 데이터 테이블 이름* @param colname 소스 데이터 열 이름* @param cores 질량 목록 중심*/ private kmeans (문자열 tablename, 문자열 colname, list <bouble> cores) {this.cores = cores; this.tablename = tableName; this.colname = colname; } / ** * 질량의 중심을 다시 계산하십시오 * * @return 새 중심 목록 * / 개인 목록 <Double> newCores () {list <bouble> newCores = new ArrayList <> (); for (list <integer> v : grouped.values ()) {newCores.Add (v.stream (). reture (0, (sum, num) -> sum + num) / (v.size () + 0.0)); } collections.sort (newcores); Newcores를 반환합니다. } / ** * 종료 여부를 결정 * * @return bool * / private boolean isover () {list <bouble> _cores = newcores (); for (int i = 0, len = cores.size (); i <len; i ++) {if (! cores.get (i) .tostring (). 거짓을 반환합니다. }} true를 반환합니다. } / *** 데이터 그룹화* / private void setGrouped () {grouped = new Hashmap <> (); 이중 코어; for (Integer Origin : Origins) {core = getcore (Origin); if (! grouped.containskey (core)) {grouped.put (core, new arraylist <> ()); } grouped.get (core) .add (원산지); }} / *** 중심 선택** @param num 그룹으로 그룹화 할* @return centroid* / private double getcore (Integer Num) {// 차이 목록 <doubfs = new arraylist <> (); // (Double Core : Cores)의 차이를 계산합니다 {diffs.add (math.abs (num -core)); } // 최소 차이-> 색인-> 해당 중심 반환 코어 (diffs.indexof (collections.min)); }/*** 데이터베이스 연결 설정* @return connection*/private connection getConn () {try {// URL은 액세스 할 데이터베이스 이름을 가리 킵니다. // mysql configuration string user = "root"에 사용자 이름; // mysql configuration string password = "root"중 암호; // 드라이버 class.forname을로드합니다 ( "com.mysql.jdbc.driver"); // 연결 객체 연결을 선언합니다 Conn = DriverManager.GetConnection (URL, USER, PASSFARPT); if (conn.isclosed ()) {system.out.println ( "데이터베이스에 연결 실패!"); 널 리턴; } system.out.println ( "데이터베이스에 성공적으로 연결!"); CONN을 반환; } catch (예외 e) {System.out.println ( "Conn Connection 실패!"); e.printstacktrace (); } return null; } / *** 데이터베이스 연결을 닫습니다** @param conn connection* / private void close (connection conn) {try (conn! = null &&! conn.isclosed ()) conn.close (); } catch (예외 e) {e.printstacktrace (); }} / *** 소스 데이터 가져 오기* / private void getorigins () {Connection conn = null; try {conn = getConn (); if (conn == null) 반환; 명령문 = conn.createstatement (); resultSet rs = state.executeQuery (String.format ( " %s에서 select %s", colname, tablename); while (rs.next ()) {origins.add (rs.getint (1)); } conn.close (); } catch (예외 e) {e.printstacktrace (); } 마침내 {close (conn); }} / *** 새 테이블에 데이터를 쓰십시오* / private void write () {Connection conn = null; try {conn = getConn (); if (conn == null) 반환; // 테이블 작성 문 작성 문 = conn.createstatement (); // 이전 데이터 테이블 문을 삭제합니다 .Execute ( "k_means가있는 경우 드롭 테이블;"); // 새 테이블을 작성하십시오 .Execute ( "존재하지 않으면 테이블 작성 k_means (`핵심상 10, 7),`col` integer (11));"); // conn.setAutocommit (false)의 자동 제출; preparedstatement ps = conn.preparestatement ( "k_means 값 (?,?)에 삽입"); for (map.Entry <double, list <integer >> entry : grouped.entryset ()) {double core = entry.getKey (); for (정수 값 : entry.getValue ()) {psesetDouble (1, core); ps.setint (2, 값); ps.addbatch (); }} // ps.executebatch ()의 배치 실행; // 트랜잭션 커밋 conn.commit (); // 연결을 닫습니다 Conn.close (); } catch (예외 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 <bouble> 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을 더 지원하기를 바랍니다.