2016-04-19 16 views
-2

今週私はデータ構造とcvsファイルを扱っています。私はcvsファイルを読み込む方法を理解していますが、ファイルの列の平均を計算しましたが、中央値とモードを実行できませんでした。私のコードは特定の列を表示しているだけです。私はメジアンとモードをしたい。誰でも私が望むコラムから中央値とモードを取得する方法を教えてもらえますか?アララリストのデータ構造

"CalforniaSchool.cvs" 

school name  students  teachers 

C.H.S    1203   45 

D.H.S    1023   67 

E.H.S    902   34 

A.H.S    1280   89 
ArrayList<String>medianmode=Files.readAllLines(Paths.get("CalforniaSchool.file")); 

String []final=medianmode.split(","); 


double close = Double.parseDouble(final[2]);//i want to do median and mode for column 2 
+0

finalはjavaの予約語ですか? –

+1

そのコードはコンパイルされません。 1) 'readAllLines'は' ArrayList'ではなく 'List'を返します。 --- 2) 'ArrayList'に対して' split() 'を呼び出すことはできません。 --- 3) 'final'はキーワードであり、変数名として使うことはできません。 ---もしあなたが「列の平均を出した」*ならば、**あなたの作業コード**を表示してください。 – Andreas

答えて

0

機能のカップルは、Apache共通数学ライブラリの内部であり、ここでは、次のとおりです。 mean

そして、ここにもいくつかの実装:

中央値:

public static int median(int[] m) { 
    int middle = m.length/2; 
    if (m.length%2 == 1) { 
     return m[middle]; 
    } else { 
     return (m[middle-1] + m[middle])/2.0; 
    } 
} 

モード:

public static List<Integer> mode(final int[] a) { 
    final List<Integer> modes = new ArrayList<Integer>(); 
    final Map<Integer, Integer> countMap = new HashMap<Integer, Integer>(); 

    int max = -1; 

    for (final int n : numbers) { 
     int count = 0; 

     if (countMap.containsKey(n)) { 
      count = countMap.get(n) + 1; 
     } else { 
      count = 1; 
     } 

     countMap.put(n, count); 

     if (count > max) { 
      max = count; 
     } 
    } 

    for (final Map.Entry<Integer, Integer> tuple : countMap.entrySet()) { 
     if (tuple.getValue() == max) { 
      modes.add(tuple.getKey()); 
     } 
    } 

    return modes; 
} 

もしあなたがpythonを使っているなら、pandasのjavaよりも簡単です。あなたがまだJavaを保持したいのであれば、自分で行を実装することを強くお勧めします。

ベスト。