From d34b63d31772e5dbeae4c0456fc34793ef53ac47 Mon Sep 17 00:00:00 2001 From: Gianpaolo Coro Date: Fri, 27 Jul 2012 16:16:33 +0000 Subject: [PATCH] git-svn-id: https://svn.d4science.research-infrastructures.eu/gcube/trunk/data-analysis/EcologicalEngine@56882 82a268e6-3cf1-43bd-a215-b396298e98cf --- .../ecoengine/clustering/DBScan.java | 120 +++++++++++++++--- .../ecoengine/utils/DatabaseUtils.java | 5 +- 2 files changed, 102 insertions(+), 23 deletions(-) diff --git a/src/main/java/org/gcube/dataanalysis/ecoengine/clustering/DBScan.java b/src/main/java/org/gcube/dataanalysis/ecoengine/clustering/DBScan.java index 2108b3c..bd8d4da 100644 --- a/src/main/java/org/gcube/dataanalysis/ecoengine/clustering/DBScan.java +++ b/src/main/java/org/gcube/dataanalysis/ecoengine/clustering/DBScan.java @@ -52,7 +52,7 @@ public class DBScan implements Clusterer{ public static String outliersColumn = "outlier"; public static String outliersColumnType = "boolean"; - public static void mainOLD(String[] args) throws Exception{ + public static void mainCluster(String[] args) throws Exception{ String coordinates [] = { @@ -95,7 +95,7 @@ public class DBScan implements Clusterer{ } - public static void main(String[] args) throws Exception{ + public static void mainRandom(String[] args) throws Exception{ int max = 100000; @@ -129,6 +129,32 @@ public class DBScan implements Clusterer{ } + public static void main(String[] args) throws Exception{ + long t0 = System.currentTimeMillis(); + + AlgorithmConfiguration config = new AlgorithmConfiguration(); + config.setConfigPath("./cfg/"); + config.setPersistencePath("./"); + config.setParam("OccurrencePointsTable","presence_basking_cluster"); + config.setParam("FeaturesColumnNames","centerlat,centerlong"); + config.setParam("OccurrencePointsClusterTable","occCluster_1"); + config.setParam("epsilon","10"); + config.setParam("minPoints","1"); + + config.setParam("DatabaseUserName","gcube"); + config.setParam("DatabasePassword","d4science2"); + config.setParam("DatabaseURL","jdbc:postgresql://146.48.87.169/testdb"); + config.setParam("DatabaseDriver","org.postgresql.Driver"); + + DBScan dbscanner = new DBScan(); + dbscanner.setConfiguration(config); + dbscanner.init(); + dbscanner.cluster(); + + System.out.println("ELAPSED "+(System.currentTimeMillis()-t0)); + + } + @Override public INFRASTRUCTURE getInfrastructure() { return INFRASTRUCTURE.LOCAL; @@ -136,17 +162,41 @@ public class DBScan implements Clusterer{ @Override public void init() throws Exception { + if (config!=null) config.initRapidMiner(); - + AnalysisLogger.getLogger().debug("DBScan: Initialized Rapid Miner "); + AnalysisLogger.getLogger().debug("DBScan: Initializing Database Connection"); dbHibConnection=DatabaseUtils.initDBSession(config); //create the final table - String createStatement = new DatabaseUtils(dbHibConnection).buildCreateStatement(OccurrencePointsTable,OccurrencePointsClusterTable); + try{ + AnalysisLogger.getLogger().debug("DBScan: dropping table "+OccurrencePointsClusterTable); + String dropStatement = DatabaseUtils.dropTableStatement(OccurrencePointsClusterTable); + AnalysisLogger.getLogger().debug("DBScan: dropping table "+dropStatement); + DatabaseFactory.executeSQLUpdate(dropStatement, dbHibConnection); + }catch(Exception e){ + AnalysisLogger.getLogger().debug("DBScan: Could not drop table "+OccurrencePointsClusterTable); + } //create Table + AnalysisLogger.getLogger().debug("DBScan: Creating table "+OccurrencePointsClusterTable); + String [] features = FeaturesColumnNames.split(","); + String columns = ""; + + for (int i=0;i"+id+" with "+npoints+" "+minpoints); + if (npoints==minpoints) outlier=true; - + + int k=0; + for (Object o:c.getExampleIds()){ //transform into a numerical index int idd = (int) Double.parseDouble(""+o); + //take the corresponding sample Example e = es.getExample(idd-1); //take the attributes of the sample Attributes attributes = e.getAttributes(); -// System.out.print(""+(idd-1)+":cluster: "); //for each attribute (yet filtered on numeric ones) add to the writing row bufferRows.append("("); StringBuffer valueStrings = new StringBuffer(); @@ -254,17 +314,29 @@ public class DBScan implements Clusterer{ towrite = towrite.substring(0,towrite.length()-1); //append the clusterid and outlier - bufferRows.append(towrite+","+id+","+outlier); -// System.out.print("\n"); + bufferRows.append(towrite+","+id+","+outlier+")"); + if (k"+id+" is outlier?"+outlier); } + if (bufferRows.length()>0){ +// AnalysisLogger.getLogger().trace("DBScan: Inserting Buffer "+DatabaseUtils.insertFromBuffer(OccurrencePointsClusterTable, columnsNames, bufferRows)); + AnalysisLogger.getLogger().debug("DBScan: Writing into DB"); DatabaseFactory.executeSQLUpdate(DatabaseUtils.insertFromBuffer(OccurrencePointsClusterTable, columnsNames, bufferRows),dbHibConnection); + AnalysisLogger.getLogger().debug("DBScan: Finished with writing into DB"); + }else + AnalysisLogger.getLogger().debug("DBScan: Nothing to write in the buffer"); + float instatus = status + statusstep; status = Math.min(95f, instatus); -// System.out.print("\n"); + AnalysisLogger.getLogger().debug("DBScan: Status: "+status); } - + shutdown(); status = 100f; } @@ -273,6 +345,12 @@ public class DBScan implements Clusterer{ @Override public void shutdown() { + try{ + AnalysisLogger.getLogger().debug("DBScan: Closing DB Connection "); + dbHibConnection.close(); + }catch(Exception e){ + AnalysisLogger.getLogger().debug("DBScan: Could not shut down connection"); + } } @Override diff --git a/src/main/java/org/gcube/dataanalysis/ecoengine/utils/DatabaseUtils.java b/src/main/java/org/gcube/dataanalysis/ecoengine/utils/DatabaseUtils.java index 97c2ef9..df5857a 100644 --- a/src/main/java/org/gcube/dataanalysis/ecoengine/utils/DatabaseUtils.java +++ b/src/main/java/org/gcube/dataanalysis/ecoengine/utils/DatabaseUtils.java @@ -31,8 +31,9 @@ public class DatabaseUtils { private String primaryKColName; private void getPrimaryKeys(List keys, String table) { - - int keynum = keys.size(); + int keynum =0; + if (keys!=null) + keynum= keys.size(); StringBuffer pkeybuffer = new StringBuffer(); primaryKColName = ""; for (int i = 0; i < keynum; i++) {