gpt4 book ai didi

java - 在 csv 文件中查找标准差

转载 作者:行者123 更新时间:2023-11-30 03:34:08 24 4
gpt4 key购买 nike

我正在寻找standard deviation csv 文件的单个提取列的 (σ = √[(Σ(x - MEAN))2 ÷ n])。csv 文件包含大约 45000 个实例和 17 个以“;”分隔的属性。为了找到标准差,它需要在 while 循环的每次迭代中使用 Xi 求子的平均值。所以我认为 MEAN 需要在 while 循环迭代之前找到标准差。但我不知道如何做到这一点,或者有什么方法可以做到这一点。我被困在这里了。然后我输入了用新 Xi 替换旧 Xi 的代码。然后写入(生成)新的 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);
}

}
}

最佳答案

可以一次性计算标准偏差。 Donald Knuth 教授有一种使用卡汉求和来完成此操作的算法。这是论文:http://researcher.ibm.com/files/us-ytian/stability.pdf

Here是另一种方法,但它会出现舍入错误:

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);
}

关于java - 在 csv 文件中查找标准差,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28377799/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com