ความต้องการ
ดำเนินการอัลกอริทึม k-mean บนฟิลด์ของตารางในฐานข้อมูล MySQL และเขียนข้อมูลที่ประมวลผลลงในตารางใหม่
ซอร์สโค้ดและไดรเวอร์
kmeans_jb51.rar
รหัสต้นฉบับ
นำเข้า java.sql.*; นำเข้า Java.util.*;/***@author tianshl*@version 2018/1/13 11:13 am*/คลาสสาธารณะ kmeans {// แหล่งข้อมูลส่วนตัว // การจัดกลุ่มข้อมูลแผนที่ส่วนตัว <คู่, รายการ <จำนวนเต็ม >> จัดกลุ่ม; // รายการเซนทรอยด์เริ่มต้นรายการส่วนตัว <bouble> คอร์; // แหล่งข้อมูล Tablename สตริงส่วนตัว สตริงส่วนตัว colname; / *** เมธอด constructor** @param tablename ชื่อตารางข้อมูลชื่อตาราง* @param colname ชื่อคอลัมน์แหล่งข้อมูลชื่อ* @param cores ศูนย์กลางของรายการมวล*/ ส่วนตัว kmeans (สตริง tablename, สตริง colname, รายการ <bouly> cores) {this.cores = cores; this.tablename = tablename; this.colname = colname; } / ** * คำนวณจุดศูนย์กลางของมวล * * @return รายการใหม่ของ Centroids * / รายการส่วนตัว <bouly> newCores () {list <bould> newCores = new ArrayList <> (); สำหรับ (รายการ <จำนวนเต็ม> v: grageed.values ()) {newcores.add (v.stream () ลด (0, (ผลรวม, num) -> sum + num) / (v.size () + 0.0)); } collections.sort (newCores); กลับ Newcores; } / ** * กำหนดว่ามันจะจบลง * * @return bool * / บูลีนส่วนตัว isover () {รายการ <bould> _cores = newCores (); สำหรับ (int i = 0, len = cores.size (); i <len; i ++) {ถ้า (! cores.get (i) .toString (). เท่ากับ (_cores.get (i) .ToString ())) {// ใช้คอร์ทรอยด์ใหม่ = _Cores; กลับเท็จ; }} ส่งคืนจริง; } / *** การจัดกลุ่มข้อมูล* / โมฆะส่วนตัว setGrouped () {grageed = new hashmap <> (); สองแกน; สำหรับ (ต้นกำเนิดจำนวนเต็ม: ต้นกำเนิด) {core = getCore (ต้นกำเนิด); if (! grageed.containskey (core)) {grageed.put (core, arraylist ใหม่ <> ()); } grageed.get (core) .add (ต้นกำเนิด); }} / *** เลือก centroid** @param num data ที่จะจัดกลุ่ม* @return centroid* / private double getCore (จำนวนเต็มจำนวน) {// รายการที่แตกต่าง <bould> diffs = new ArrayList <> (); // คำนวณความแตกต่างสำหรับ (double core: cores) {diffs.add (math.abs (num - core)); } // ความแตกต่างขั้นต่ำ-> index-> centroid return cores.get (diffs.indexof (collections.min (diffs))); }/*** สร้างการเชื่อมต่อฐานข้อมูล* @return Connection*/การเชื่อมต่อส่วนตัว getConn () {ลอง {// URL ชี้ไปที่ชื่อฐานข้อมูลที่จะเข้าถึง MyData String url = "JDBC: mysql: // localhost: 3306/data_analysis_dev"; // ชื่อผู้ใช้ระหว่าง MySQL การกำหนดค่าสตริง user = "root"; // รหัสผ่านระหว่าง MySQL การกำหนดค่าสตริงรหัสผ่าน = "root"; // โหลดคลาสไดรเวอร์ forName ("com.mysql.jdbc.driver"); // ประกาศการเชื่อมต่อวัตถุเชื่อมต่อ Conn = driverManager.getConnection (URL, ผู้ใช้, รหัสผ่าน); if (conn.isclosed ()) {system.out.println ("การเชื่อมต่อกับฐานข้อมูลล้มเหลว!"); คืนค่า null; } system.out.println ("เชื่อมต่อกับฐานข้อมูลสำเร็จ!"); กลับ Conn; } catch (exception e) {system.out.println ("การเชื่อมต่อ Conn ล้มเหลว!"); E.PrintStackTrace (); } return null; } / *** ปิดการเชื่อมต่อฐานข้อมูล** @param Conn Connection* / Private Void Close (Connection Conn) {ลอง {ถ้า (conn! = null &&! conn.isclosed ()) conn.close (); } catch (exception e) {e.printstacktrace (); }} / *** รับข้อมูลแหล่งที่มา* / โมฆะส่วนตัว getorigins () {การเชื่อมต่อ conn = null; ลอง {conn = getConn (); if (conn == null) return; คำสั่งคำสั่ง = conn.createstatement (); Resultset RS = stement.executeQuery (string.format ("เลือก %s จาก %s", colname, tablename)); ในขณะที่ (rs.next ()) {origins.add (rs.getint (1)); } conn.close (); } catch (exception e) {e.printstacktrace (); } ในที่สุด {Close (Conn); }} / *** เขียนข้อมูลไปยังตารางใหม่* / โมฆะส่วนตัวเขียน () {การเชื่อมต่อ conn = null; ลอง {conn = getConn (); if (conn == null) return; // สร้างคำสั่งตารางคำสั่ง = conn.createStatement (); // ลบคำสั่งตารางข้อมูลเก่า execute ("ตารางวางถ้ามีอยู่ k_means;"); // สร้างคำสั่งตารางใหม่ execute ("สร้างตารางหากไม่มีอยู่ k_means (` core` ทศนิยม (11, 7), `col` จำนวนเต็ม (11));"); // การส่งอัตโนมัติของ conn.setautocommit (เท็จ); PreparedStatement ps = conn.preperestatement ("แทรกลงในค่า k_means (?,?)"); สำหรับ (map.entry <double, list <integer >> รายการ: grageed.entryset ()) {double core = entry.getKey (); สำหรับ (ค่าจำนวนเต็ม: entry.getValue ()) {ps.setDouble (1, core); ps.setint (2, ค่า); ps.addbatch (); }} // การดำเนินการแบบแบตช์ของ ps.executeBatch (); // กระทำการทำธุรกรรม conn.commit (); // ปิดการเชื่อมต่อ conn.close (); } catch (exception e) {e.printstacktrace (); } ในที่สุด {Close (Conn); }} / *** ข้อมูลกระบวนการ* / โมฆะส่วนตัวเรียกใช้ () {system.out.println ("รับข้อมูลแหล่งที่มา"); // รับข้อมูลแหล่งที่มา getorigins (); // หยุดการจัดกลุ่มบูลีน isover = false; System.out.println ("การประมวลผลการจัดกลุ่มข้อมูล"); ในขณะที่ (! isover) {// การจัดกลุ่มข้อมูล setgrouped (); // พิจารณาว่าจะหยุดการจัดกลุ่ม isover = isover (); } system.out.println ("เขียนข้อมูลที่ประมวลผลไปยังฐานข้อมูล"); // เขียนข้อมูลกลุ่มไปยังตารางใหม่เขียน (); System.out.println ("เขียนข้อมูลให้เสร็จสมบูรณ์"); } โมฆะคงที่สาธารณะหลัก (สตริง [] args) {รายการ <bould> cores = new ArrayList <> (); cores.add (260.0); cores.add (600.0); // ชื่อตาราง, ชื่อคอลัมน์, รายการ centroid ใหม่ kmeans ("แอตทริบิวต์", "attr_length", คอร์) .run (); -ไฟล์ต้นฉบับ
kmeans.java
การรวบรวม
javac kmeans.java
วิ่ง
# ระบุไลบรารีการพึ่งพา java -djava.ext.dirs =./lib kmeans
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น