码迷,mamicode.com
首页 > 其他好文 > 详细

归一化小程序

时间:2016-07-03 19:32:01      阅读:166      评论:0      收藏:0      [点我收藏+]

标签:


一、---功能---



将一列数据按照归一化公式来进行归一化,什么是归一化,这是数据处理中的一种数据的预处理手段,比如最大值是1000、最小值是0,将300进行归一化之后的结果就是0.3,就是将数据限制在0--1之内。

二、---过程---


(1)将表格中的数据复制到txt文件中(因为java中表格的jar包不是很好用,这里暂时用的txt文件)
(2)通过遍历每一行数据得到最大和最小值
(3)通过最大最小值对数据进行归一化
(4)将归一化后的数据写入另一个文档中


三、---程序---


package Question;
import java.io.*;
import java.text.DecimalFormat;

public class Normalization {
	
	public static void main(String args[]) throws Exception{
		// 定义一个输入流用来获取最大和最小值
		FileReader file = null;
		BufferedReader buffer = null;  
		file = new FileReader("D:\\num.txt"); 
		buffer = new BufferedReader(file);
		
		// 定义文件的输入流
		String str = null;
		
		FileReader fr = null;
		BufferedReader br = null;  
		fr = new FileReader("D:\\from.txt");  
		
		// 定义文件的输出流
		FileWriter fw = null;
		BufferedWriter bw = null;  
		fw = new FileWriter("D:\\to.txt");  
		
		br = new BufferedReader(fr);
		bw = new BufferedWriter(fw);
		
		// 获得最大值和最小值
		// 注意这里的值一定要和数据的数量相对应
		double data[] = new double[8760];
		int flag = 0;
		
		//br.mark((int)file.length() + 1);
		
		while((str = buffer.readLine()) != null){
			double strNum = Double.parseDouble(str);
			data[flag] = strNum;
			flag++;
		}
		
		//br.reset(); 
		
		buffer.close();
		
		double maxNum = findMaxNum(data);
		double minNum = findMinNum(data);
		
		System.out.println("min = "+minNum);
		System.out.println("max = "+maxNum);
		
		int temp = 0;
		
		while((str = br.readLine()) != null){
			
			// 将字符串转换成数值
			double strNum = Double.parseDouble(str);
			
			// 将数组进行归一化操作,返回的就是字符串类型了
			String afterNormal = NumToOne(strNum, maxNum, minNum);
			
			//System.out.println(afterNormal);
			temp++;
			
			// 将字符串写入另一个文件
            bw.write(afterNormal);  
            bw.newLine();  
            bw.flush();  
			
		}
		br.close();
		System.out.println("共处理数据  "+temp+" 行");
	}
	
	// 遍历数组找到最大值
	public static double findMaxNum(double data[]){
		double max = 0;
		for(int i = 0; i < data.length; i++){
			if(data[i] > max){
				max = data[i];
			}
		}
		return max;
	}
	
	// 遍历数组找到最小值
	public static double findMinNum(double data[]){
		double min = data[0];
		for(int i = 1; i < data.length; i++){
			if(data[i] == 0){
				System.out.println("为0的元素是:"+(i + 1));
			}
			if(data[i] <= min){
				min = data[i];
			}
		}
		return min;
	}
	
	// 对某个数进行归一化处理
	public static String NumToOne(double num, double max, double min){
		double numChange = (num - min)/(max - min);
		
		DecimalFormat d  = new DecimalFormat("0.00000");
		return d.format(numChange);
	}
}


四、---缺陷---



(1)没有将文件的指针复位
(2)只能处理一列数据,并且是在txt文档中


归一化小程序

标签:

原文地址:http://blog.csdn.net/jinhuoxingkong/article/details/51812254

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!