precisar
Execute o algoritmo K-Means em um campo de uma tabela em um banco de dados MySQL e escreva os dados processados na nova tabela.
Código -fonte e driver
kmeans_jb51.rar
Código -fonte
importar java.SQL.*; Importar java.util. // Dados agrupados mapa privado <duplo, list <inteiro >> agrupado; // Lista de centróides iniciais Lista privada <boun> núcleos; // Fonte de dados String private String tableName; String private Colname; / *** Método do construtor** @param tableName Origem Data Tabela Nome* @param Colname Nome da coluna de dados de origem* @Param Cores Center of Mass List*/ private Kmeans (String tableName, string colname, list <boun> núcleos) {this.cores = core; this.tablename = tableName; this.colname = colname; } / ** * Recalcule o centro de Mass * * @return nova lista de centróides * / Lista privada <Houble> newCores () {list <woun> newcores = new ArrayList <> (); para (List <Teger> V: agrupado.Values ()) {newcores.add (v.Stream (). Reduce (0, (soma, num) -> sum + num) / (v.size () + 0,0)); } Coleções.sort (newcores); devolver os novos; } / ** * Determine se ele termina * * @return bool * / private boolean isover () {list <ouble> _cores = newcores (); para (int i = 0, len = core.size (); i <len; i ++) {if (! core.get (i) .ToString (). Equals (_Cores.get (i) .tostring ())) {// use novos núcleos centrid = _cores; retornar falso; }} retornar true; } / *** agrupamento de dados* / private void setGrouped () {agruped = new Hashmap <> (); Núcleo duplo; para (origem inteira: origens) {core = getCore (origem); if (! agruped.containsKey (core)) {grouped.put (núcleo, novo ArrayList <> ()); } agruped.get (core) .add (origem); }} / *** Selecione os dados do Centroid** @param num a serem agrupados* @return Centroid* / Private duplo getCore (número inteiro num) {// Lista de diferenças <woun> diffs = new ArrayList <> (); // Calcule a diferença para (núcleo duplo: núcleos) {diferenciado (math.abs (num - núcleo)); } // diferença mínima-> índice-> CORES CENTROID CENTROID correspondentes. }/*** estabeleça uma conexão de banco de dados* @return conexão*/conexão privada getConn () {try {// O URL aponta para o nome do banco de dados para ser acessado mydata string url = "jdbc: mysql: // localhost: 3306/data_analys_dev"; // nome de usuário durante o MySQL Configuration string user = "root"; // senha durante o MySQL Configuration string senha = "root"; // Carregar a classe Driver.ForName ("com.mysql.jdbc.driver"); // Declare a conexão de conexão conexão conn = driverManager.getConnection (URL, usuário, senha); if (Conn.isclosed ()) {System.out.println ("conectando -se ao banco de dados falhou!"); retornar nulo; } System.out.println ("Conectando -se ao banco de dados com sucesso!"); retornar Conn; } catch (Exceção e) {System.out.println ("Connection falhou!"); E.PrintStackTrace (); } retornar nulo; } / *** Feche a conexão com o banco de dados** @param Connection* / private void Close (conexão conn) {try {if (conn! = Null &&! Conn.isclosed ()) Conn.Close (); } catch (Exceção e) {e.printStackTrace (); }} / *** Obtenha dados de origem* / private void getorigins () {conexão conn = null; tente {conn = getConn (); if (conn == null) retornar; Declaração declaração = conn.createstatement (); ResultSet rs = Declaration.executeQuery (String.Format ("Selecione %s de %s", Colname, tableName)); while (rs.Next ()) {Origins.add (rs.getInt (1)); } Conn.Close (); } catch (Exceção e) {e.printStackTrace (); } finalmente {close (conn); }} / *** Escreva dados na nova tabela* / private void write () {conexão conn = null; tente {conn = getConn (); if (conn == null) retornar; // Criar instrução da tabela instrução = Conn.Createstatement (); // exclua a instrução antiga da tabela de dados.Execute ("Tabela de soltar se existe k_means;"); // Crie uma nova declaração de tabela.Execute ("Criar tabela se não existe k_means (` core` decimal (11, 7), `col 'inteiro (11));"); // envio automático de Conn.SetAutocommit (false); Preparado PS = Conn.Preparestatement ("Insira nos valores de K_means (?,?)"); para (map.entry <duplo, list <Teger>> Entrada: Grouped.EntrySet ()) {Double Core = Entry.getKey (); para (Valor inteiro: Entry.getValue ()) {Ps.SetDouble (1, núcleo); ps.SetInt (2, valor); ps.addbatch (); }} // Execução em lote de Ps.executeBatch (); // Comprometer transação conn.Commit (); // conexão fechada conn.close (); } catch (Exceção e) {e.printStackTrace (); } finalmente {close (conn); }} / *** Dados do processo* / private void run () {System.out.println ("Obtenha dados de origem"); // obtenha dados de origem getorigins (); // Pare de agrupar o booleano istover = false; System.out.println ("Processamento de agrupamento de dados"); while (! iSover) {// Grupo de dados SetGrouped (); // determinar se deve parar o agrupamento iSover = iSover (); } System.out.println ("gravar dados processados no banco de dados"); // gravar dados agrupados em uma nova tabela gravação (); System.out.println ("Escreva dados para concluir"); } public static void main (string [] args) {list <woun> núcleos = new ArrayList <> (); núcleos.Add (260.0); núcleos.add (600.0); // Nome da tabela, nome da coluna, Centroid List New Kmeans ("Atributos", "Atttr_Length", núcleos) .run (); }}Arquivo de origem
Kmeans.Java
Compilação
javac kmeans.java
correr
# Especifique a biblioteca de dependência java -djava.ext.dirs =./Libeans Kmeans
O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.