一、---功能---
将一列数据按照归一化公式来进行归一化,什么是归一化,这是数据处理中的一种数据的预处理手段,比如最大值是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文档中
时间: 2024-10-07 21:37:48