必要
MySQLデータベース内のテーブルのフィールドでK-Meansアルゴリズムを実行し、処理されたデータを新しいテーブルに書き込みます。
ソースコードとドライバー
kmeans_jb51.rar
ソースコード
import java.sql。*; Import java.util。*;/***@author tianshl*@version 2018/1/13 AM*/public class kmeans {//ソースデータプライベートリスト<integer> rigins = new arraylist <>(); //グループ化されたデータプライベートマップ<double、list <integer >>グループ化; //初期重心リストプライベートリスト<double>コア; //データソースプライベート文字列TableName;プライベート文字列colname; / ** constructor method** @param tablenameソースデータテーブル名* @param colnameソースデータ列名* @paramコアセンターオブマスリスト*/ private kmeans(string tablename、string colname、list <double> cores){this.cores = cores; this.tablename = tablename; this.colname = colname; } / ** *質量の中心を再計算 * * @return centroidsの新しいリスト * /プライベートリスト<double> newcores(){list <double> newcores = new arraylist <>(); for(list <integer> v:grouped.values()){newcores.add(v.stream()。reduce(0、(sum、num) - > sum + num) /(v.size() + 0.0)); } collections.sort(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()。 falseを返します。 }} 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(origin); }} / *** centroidを選択** @param numデータグループ化する* @return centroid* / private double getcore(integer num){//差分リスト<double> diffs = new ArrayList <>(); //(double core:cores)の差を計算する{diffs.add(math.abs(num -core)); } //最小差 - > index->対応するCentroid return Cores.get(diffs.indexof(collections.min(diffs))); }/***データベース接続を確立* @return接続*/プライベート接続getconn(){// urlはデータベース名を指して、mydata string url = "jdbc:mysql:// localhost:3306/data_analysis_dev"; // mysql configuration string user = "root"中のユーザー名; // mysql構成中のパスワード文字列パスワード= "root"; //ドライバーclass.fornameをロードする( "com.mysql.jdbc.driver"); //接続オブジェクト接続を宣言しますconn = drivermanager.getConnection(url、user、password); if(conn.isclosed()){system.out.println( "データベースへの接続に失敗!"); nullを返します。 } system.out.println( "データベースへの接続に正常に!"); conn; } catch(Exception e){System.out.println( "Conn Connection Failed!"); e.printstacktrace(); } nullを返します。 } / ***データベース接続を閉じる** @param conn connection* / private void close(connection 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(); resultet rs = statement.executequery(string.format( "select%s from%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; // tableステートメントを作成= conn.createStatement(); //古いデータテーブルステートメントを削除してください。 //新しいテーブルステートメントを作成します。Execute( "存在しない場合は"テーブルの作成k_means( `core` decimal(11、7)、` col` integer(11)); "); // conn.setautocommit(false)の自動送信; preatedStatement ps = conn.preparestatement( "k_means values(?、?)"); for(map.entry <double、list <integer >> entry:grouped.entryset()){double core = entry.getKey(); for(integer value:entry.getValue()){ps.setDouble(1、core); ps.setint(2、value); ps.addbatch(); }} // ps.executeBatch(); //トランザクションconn.commit()をコミットします。 //接続conn.close(); } catch(Exception e){e.printstacktrace(); }最後に{close(conn); }} / ***プロセスデータ* / private void run(){system.out.println( "source data"); //ソースデータを取得getorigins(); // boolean isover = falseのグループ化を停止します。 System.out.println( "データグループ化処理"); while(!isover){// data Gralging setGrouped(); // iSover = isover()のグループ化を停止するかどうかを決定します。 } system.out.println( "処理されたデータをデータベースに書き込む"); //グループ化されたデータを新しいテーブルに書き込む(); system.out.println( "データを記入して完了する"); } public static void main(string [] args){list <double> cores = new arraylist <>(); cores.add(260.0); cores.add(600.0); //テーブル名、列名、Centroidリストnew kmeans( "astributes"、 "attr_length"、cores).run(); }}ソースファイル
Kmeans.java
編集
Javac Kmeans.java
走る
#依存関係ライブラリJava -djava.ext.dirs =。/lib kmeansを指定します
上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。