/** * Normalize the input file. Write to the specified file. * * @param file The file to write to. */ public void normalize(final File file) { if (this.analyst == null) { throw new EncogError("Can't normalize yet, file has not been analyzed."); } ReadCSV csv = null; PrintWriter tw = null; try { csv = new ReadCSV(getInputFilename().toString(), isExpectInputHeaders(), getFormat()); tw = new PrintWriter(new FileWriter(file)); // write headers, if needed if (isProduceOutputHeaders()) { writeHeaders(tw); } resetStatus(); final int outputLength = this.analyst.determineTotalColumns(); // write file contents while (csv.next() && !shouldStop()) { updateStatus(false); double[] output = AnalystNormalizeCSV.extractFields( this.analyst, this.analystHeaders, csv, outputLength, false); if (this.series.getTotalDepth() > 1) { output = this.series.process(output); } if (output != null) { final StringBuilder line = new StringBuilder(); NumberList.toList(getFormat(), line, output); tw.println(line); } } } catch (final IOException e) { throw new QuantError(e); } finally { reportDone(false); if (csv != null) { try { csv.close(); } catch (final Exception ex) { EncogLogging.log(ex); } } if (tw != null) { try { tw.close(); } catch (final Exception ex) { EncogLogging.log(ex); } } } }
/** * Analyze the data. This counts the records and prepares the data to be processed. * * @param theAnalyst The analyst to use. * @param inputFile The input file to analyze. * @param headers True, if the input file has headers. * @param format The format of the input file. */ public void analyze( final EncogAnalyst theAnalyst, final File inputFile, final boolean headers, final CSVFormat format) { this.setInputFilename(inputFile); setExpectInputHeaders(headers); setInputFormat(format); setAnalyzed(true); this.analyst = theAnalyst; this.data = new BasicMLDataSet(); resetStatus(); int recordCount = 0; final int outputLength = this.analyst.determineTotalColumns(); final ReadCSV csv = new ReadCSV( this.getInputFilename().toString(), this.isExpectInputHeaders(), this.getFormat()); readHeaders(csv); this.analystHeaders = new CSVHeaders(this.getInputHeadings()); while (csv.next() && !shouldStop()) { updateStatus(true); final double[] inputArray = AnalystNormalizeCSV.extractFields(analyst, this.analystHeaders, csv, outputLength, true); final MLData input = new BasicMLData(inputArray); this.data.add(new BasicMLDataPair(input)); recordCount++; } setRecordCount(recordCount); this.setColumnCount(csv.getColumnCount()); readHeaders(csv); csv.close(); reportDone(true); }