Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在csv文件中查找标准偏差_Java_File_Csv_Streamwriter_Opencsv - Fatal编程技术网

Java 在csv文件中查找标准偏差

Java 在csv文件中查找标准偏差,java,file,csv,streamwriter,opencsv,Java,File,Csv,Streamwriter,Opencsv,我试图找到(σ=√csv file.csv文件的单个提取列的[(∑(x-平均值))2÷n])包含约45000个实例和17个以“;”运算的属性。 对于求标准差,在席的迭代中需要平均值。所以我认为需要在while循环迭代之前找到标准偏差。但我不知道怎么做,或者有什么方法可以做到这一点。我被困在这里了。于是我就用新席代号老席。然后写入(生成)新的csv文件 import java.io.File; import java.io.FileNotFoundException; import java.ut

我试图找到(σ=√csv file.csv文件的单个提取列的[(∑(x-平均值))2÷n])包含约45000个实例和17个以“;”运算的属性。 对于求标准差,在席的迭代中需要平均值。所以我认为需要在while循环迭代之前找到标准偏差。但我不知道怎么做,或者有什么方法可以做到这一点。我被困在这里了。于是我就用新席代号老席。然后写入(生成)新的csv文件

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.io.FileWriter;
import java.io.*;
import static java.lang.Math.sqrt;

public class Main {

   public static void main(String[] args) throws IOException {

        String filename = "ly.csv";
        File file = new File(filename);
        BufferedWriter writer = null;

   try {
            writer = new BufferedWriter(new FileWriter("bank-full_updated.csv"));
       } 
   catch (IOException e) {
        } 
   try {

            double Tuple,avg;
            double temp;
            Tuple = 0; 
            double stddev=0;

             Scanner inputStream = new Scanner(file);
            inputStream.next();
            while (inputStream.hasNext()) {
            String data1 = inputStream.next();                
            String[] values = data1.split(";");
            double Xi = Double.parseDouble(values[1]);
           //now finding standard deviation

            temp1 +=  (Xi-MEAN);                
           // temp2=(temp1*temp1);
           // temp3=(temp2/count);
           // standard deviation=Math.sqrt(temp3);
            Xi=standard deviation * Xi

           //now replace  new Xi to original values1
            values[1] = String.valueOf(Xi);

           // iterate through the values and build a string out of them for write a new file
            StringBuilder sb = new StringBuilder();
            String newData = sb.toString();

      for (int i = 0; i < values.length; i++) {
                sb.append(values[i]);
        if (i < values.length - 1) {
                sb.append(";");
           }
           }
            // get the new string
            System.out.println(sb.toString());

            writer.write(sb.toString()+"\n");
            }

            writer.close();

            inputStream.close();
          }

       catch (FileNotFoundException ex) {
            Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
        }    

    }
}
导入java.io.File;
导入java.io.FileNotFoundException;
导入java.util.Scanner;
导入java.util.logging.Level;
导入java.util.logging.Logger;
导入java.io.FileWriter;
导入java.io.*;
导入静态java.lang.Math.sqrt;
公共班机{
公共静态void main(字符串[]args)引发IOException{
字符串filename=“ly.csv”;
文件=新文件(文件名);
BufferedWriter=null;
试一试{
writer=new BufferedWriter(新文件编写器(“bank-full_updated.csv”);
} 
捕获(IOE异常){
} 
试一试{
双元组,平均值;
双温;
元组=0;
双标准差=0;
扫描仪输入流=新扫描仪(文件);
inputStream.next();
while(inputStream.hasNext()){
字符串data1=inputStream.next();
字符串[]值=data1.split(“;”);
双席=双PARSEBIX(值1);
//现在寻找标准差
temp1+=(Xi平均值);
//temp2=(temp1*temp1);
//temp3=(temp2/计数);
//标准偏差=数学sqrt(temp3);
席席=标准差*XI
//现在将新席替换为原始值1
values[1]=String.valueOf(Xi);
//遍历这些值并从中生成一个字符串,以便编写新文件
StringBuilder sb=新的StringBuilder();
字符串newData=sb.toString();
对于(int i=0;i
可以在一次过程中计算标准偏差。Donald Knuth教授有一个算法,它使用Kahan求和。以下是报纸:

是另一种方式,但存在舍入错误:

double std_dev2(double a[], int n) {
    if(n == 0)
        return 0.0;
    double sum = 0;
    double sq_sum = 0;
    for(int i = 0; i < n; ++i) {
       sum += a[i];
       sq_sum += a[i] * a[i];
    }
    double mean = sum / n;
    double variance = sq_sum / n - mean * mean;
    return sqrt(variance);
}
double std_dev2(双a[],整数n){
如果(n==0)
返回0.0;
双和=0;
双平方和=0;
对于(int i=0;i
这是一个相对简单的数学问题,而不是编程问题。首先(以你真正理解的方式)算出数学。(顺便说一句,我很肯定你提到的那一页上的公式是错误的。)