يحتاج
قم بتنفيذ خوارزمية K-Means على حقل من الجدول في قاعدة بيانات MySQL واكتب البيانات المعالجة في الجدول الجديد.
رمز المصدر والسائق
KMeans_JB51.RAR
رمز المصدر
استيراد java.sql.*؛ استيراد java.util.*؛/***Author Tianshl*version 2018/1/13 11:13 AM*/Class Public Class {// Source Data List <integer> Origins = new ArrayList <> () ؛ // بيانات مجمعة خريطة خاصة <double ، قائمة <integer >> تم تجميعها ؛ // قائمة Centroid List الأولية القائمة الخاصة <Suple> cores ؛ // Data Source Private TableName ؛ سلسلة خاصة colname ؛ / *** طريقة مُنشئ** param tablename اسم جدول البيانات اسم جدول البيانات* param colname مصدر بيانات العمود* param cores مركز القائمة الجماعية*/ kmeans الخاصة (سلسلة tablename ، سلسلة colname ، قائمة <double> cores) {this.cores = cores ؛ this.tablename = tablename ؛ this.colname = colname ؛ } / ** * إعادة حساب مركز الكتلة * * @RETURN قائمة جديدة من centroids * / قائمة خاصة <Double> newCores () {list <bould> newCores = new ArrayList <> () ؛ لـ (list <integer> v: setwed.values ()) {newcores.add (v.stream (). اختزال (0 ، (sum ، num) -> sum + num) / (v.size () + 0.0)) ؛ } collections.sort (NewCores) ؛ إرجاع Newcores ؛ } / ** * حدد ما إذا كان ينتهي * * return bool * / private boolean isover () {list <bourent> _cores = newCores () ؛ لـ (int i = 0 ، len = cores.size () ؛ i <len ؛ i ++) {if (! cores.get (i) .toString (). equals (_cores.get (i) .toString ())) {// استخدم cores controid new = _cores ؛ العودة كاذبة }} إرجاع صحيح ؛ } / *** تجميع البيانات* / private void setGrouped () {secored = new hashmap <> () ؛ نواة مزدوجة لـ (integer Origin: Origins) {core = getCore (Origin) ؛ if (! sebected.containskey (core)) {sebected.put (core ، new ArrayList <> ()) ؛ } sected.get (core) .add (Origin) ؛ }} / *** حدد بيانات Centroid** param num ليتم تجميعها* return centroid* / private double getCore (integer num) {// recial list <double> diffs = new ArrayList <> () ؛ // حساب الفرق لـ (core double: cores) {diffs.add (math.abs (num - core)) ؛ }. }/*** قم بإنشاء اتصال قاعدة بيانات* @RETURN Connection*/Connection private getConn () {try {// يشير عنوان URL إلى اسم قاعدة البيانات ليتم الوصول إليه myData string url = "jdbc: mysql: // localhost: 3306/data_analysis_dev" ؛ // اسم المستخدم أثناء سلسلة التكوين mySQL user = "root" ؛ // كلمة المرور أثناء سلسلة التكوين MySQL Password = "Root" ؛ // تحميل class.forname ("com.mysql.jdbc.driver") ؛ // إعلان اتصال كائن الاتصال conn = drivermanager.getConnection (url ، المستخدم ، كلمة المرور) ؛ if (conn.isclosed ()) {system.out.println ("فشل الاتصال بقاعدة البيانات!") ؛ العودة لاغية. } system.out.println ("الاتصال بقاعدة البيانات بنجاح!") ؛ إرجاع كون ؛ } catch (استثناء e) {system.out.println ("فشل اتصال conn!") ؛ E.PrintStackTrace () ؛ } إرجاع فارغ ؛ } / *** أغلق اتصال قاعدة البيانات** param conn connection* / private void close (connection conn) {try {if (conn! = null &&! conn.isclosed ()) conn.close () ؛ } catch (استثناء e) {E.PrintStackTrace () ؛ }} / *** الحصول على بيانات المصدر* / private void getorigins () {connection conn = null ؛ حاول {conn = getConn () ؛ إذا (conn == null) العودة ؛ بيان بيان = conn.createstatement () ؛ resultset rs = state.executequery (string.format ("Select ٪ s from ٪ s" ، colname ، tableName)) ؛ بينما (rs.next ()) {Origins.add (rs.getint (1)) ؛ } conn.close () ؛ } catch (استثناء e) {E.PrintStackTrace () ؛ } أخيرًا {close (conn) ؛ }} / *** اكتب البيانات إلى الجدول الجديد* / private void write () {connection conn = null ؛ حاول {conn = getConn () ؛ إذا (conn == null) العودة ؛ // إنشاء عبارة جدول بيانات = conn.createstatement () ؛ // حذف بيان جدول البيانات القديم. // إنشاء عبارة جدول جديد. // التقديم التلقائي لـ conn.setautocommit (false) ؛ reparedStatement ps = conn.preparestatement ("insert في k_means قيم (؟ ،؟)") ؛ لـ (map.entry <double ، list <integer>> entry: setwed.entryset ()) {double core = entrate.getKey () ؛ لـ (قيمة عدد صحيح: intrad.getValue ()) {ps.setDouble (1 ، core) ؛ Ps.SetInt (2 ، القيمة) ؛ Ps.AddBatch () ؛ }} // تنفيذ دفعة من ps.executeBatch () ؛ // ارتكاب معاملة conn.Commit () ؛ // Close Connection Conn.Close () ؛ } catch (استثناء e) {E.PrintStackTrace () ؛ } أخيرًا {close (conn) ؛ }} / *** Process Data* / private void run () {system.out.println ("الحصول على بيانات المصدر") ؛ // الحصول على getorigins بيانات المصدر () ؛ // التوقف عن تجميع منطقية isover = false ؛ System.out.println ("معالجة تجميع البيانات") ؛ بينما (! isover) {// data setgeing 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 kmeans جديدة ("السمات" ، "attr_length" ، cores) .run () ؛ }}ملف المصدر
kmeans.java
التجميع
Javac Kmeans.java
يجري
# حدد مكتبة التبعية java -djava.ext.dirs =./lib kmeans
ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.