[英]How to find min and max value for each column in the entire csv file
如何在csv文件中查找每一列的最小值和最大值(albhabet值除外)。
I want to get each columns min and max values
5.3,3.6,1.6,0.3,Iris-setosa
4.9,3.3,1.6,0.3,Iris-setosa
4.9,3.3,1.3,0.3,Iris-setosa
4.6,3.3,1.6,0.0,Iris-setosa
col 1, min = 4.6 ,max = 5.3
col 2, min = 3.3 ,max = 3.6
col 3, min = 1.3 ,max = 1.6
col 4, min = 0.0 ,max = 0.3
我所做的是,我遍歷每一行並將每一列存儲在哈希圖中
{1=[5.3,4.9,4.9,4.6],2=[3.6,3.3,3.3,3.3],3[1.6,1.6,1.3,1.6],4[0.3,0.3,0.3,0.0]}
然后我計算
for (Map.Entry<String, List<String>> entry : map.entrySet()) {
// Iterating through values
String key = entry.getKey();
List<String> values = entry.getValue();
min = Double.parseDouble(Collections.min(values));
max = Double.parseDouble(Collections.max(values));
}
但是,當有大數據時,最好不要在哈希圖中保存那么多數據,然后找到最小值和最大值。如何以其他方式查找最小值/最大值。
更新
String line[] = value.split(delimit);
for(int i=0;i<line.length -1;i++){
if (Double.parseDouble(line[i] ) < min) {
min = Double.parseDouble(line[i] );
}
if (Double.parseDouble(line[i] ) > max) {
max = Double.parseDouble(line[i] );
}
}
沒有得到預期的結果。
解決方案 : 計算csv文件中的列的最小值和最大值
循環執行第1-4步,直到-“文件中有更多行”。 編碼愉快。
如果您關心大量數據,則應盡可能內聯該過程。
在您的情況下,您有一個分為兩部分的來源。 一條線和元素。 您可以使用班級掃描儀
Scanner lineScanner = new Scanner(source);
while(lineScanner.hasNext()) {
Scanner elementScanner = new Scanner(lineScanner.nextLine()).useDelimiter(",");
for(int column = 1; elementScanner.hasNextDouble(); column++) {
double nextDouble = elementScanner.nextDouble();
updateMax(column, nextDouble); //or updateMinMax(column,nextDouble);
updateMin(column, nextDouble);
}
}
lineScanner.close();
您可以這樣做:
所以它看起來像這樣:
BufferedReader br = null;
String line = "";
String cvsSplitBy = ",";
try {
br = new BufferedReader(new FileReader(csvFile));
while ((line = br.readLine()) != null) {
// use comma as separator
String[] columns= line.split(cvsSplitBy);
calculateMinAndMax(columns);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (br != null) {
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
然后創建一種方法來計算最小和最大
private double[] maxValues = {0, 0, 0, 0};
private double[] minValues = {0, 0, 0, 0};
private void calculateMinAndMax(String[] line) {
for (int i = 0; i < line.length; i++) {
//check the max value
double currentValue = Double.Double.parseDouble(line[i]);
if(currentValue > maxValues[i] ) {
maxValues[i] = currentValue;
}
//check the min value
if(currentValue < minValues[i]) {
minValues[i] = currentValue;
}
}
}
當可以找到每行單元格的最大值/最小值時,為什么還要創建一個數組/列表/集合?
只需一根冰柱,您就可以得到結果。 您也可以將結果存儲到array / list / set中以進行其他詳細說明,但這不是必需的(並且很慢,因為如果一開始不知道文件大小,可能需要多次調整array / list / set的大小, RAM大小將更加龐大,所有數據與每個單元的最小/最大變量相比)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.