2019/09/05 公開
・最頻値
最頻値とは、与えられた複数の値のうち最も出現回数(度数)が多い値のことです。
以下は、最頻値を求める例です。
個数が最も多い値が最頻値です。
このソースコード例では、最頻値が複数存在する場合は、最頻値の中で1番小さい値を結果として出力します。
Mode.java ← クリックしてダウンロードページに移動001: import java.util.Arrays; 002: 003: public class Mode { 004: public static void main( String[] args ) { 005: // 配列aを宣言 006: int[] a; 007: 008: // 要素数10を設定 009: a = new int[ 10 ]; 010: 011: // 値を代入 012: a[ 0 ] = 10; 013: a[ 1 ] = 5; 014: a[ 2 ] = 8; 015: a[ 3 ] = 10; 016: a[ 4 ] = 50; 017: a[ 5 ] = 10; 018: a[ 6 ] = 8; 019: a[ 7 ] = 20; 020: a[ 8 ] = 8; 021: a[ 9 ] = 55; 022: 023: // 昇順ソート 024: Arrays.sort( a ); 025: 026: // 最頻値 027: int pre_mode, num, max_num; 028: int mode; 029: 030: // 初期値を代入 031: mode = a[ 0 ]; // 最頻値の初期値 032: max_num = 1; // 最大出現数の初期値 033: 034: pre_mode = a[ 0 ]; // 出現する回数を数える値 035: num = 1; // 出現回数 036: 037: for ( int i = 1; i < a.length; ++ i ) { 038: if ( pre_mode == a[ i ] ) { 039: // 同じ値の場合 040: // 出現回数に1を足す 041: ++ num; 042: } 043: else { 044: // 違う同じ値の場合 045: if ( num > max_num ) { 046: mode = pre_mode; 047: max_num = num; 048: } 049: 050: // 出現する回数を数える値を変更 051: pre_mode = a[ i ]; 052: num = 1; 053: } 054: } 055: 056: // 後処理 057: if ( num > max_num ) { 058: mode = pre_mode; 059: max_num = num; 060: } 061: 062: 063: // 結果表示 064: System.out.println( "最頻値 : " + mode ); 065: System.out.println( "出現数 : " + max_num ); 066: } 067: }
Mode.javaの出力結果
最頻値 : 8 出現数 : 3
この例では、10の出現数も3ですが、8は10より小さい値なので8を結果として出力しています。
それでは、ここから最頻値を求めるJavaソースコードについて解説します。
001: import java.util.Arrays;
Javaのクラスライブラリの中から「java.util.Arrays」というパッケージにあるクラスを、このプログラム内で使うために記述します。 この記述により、Arraysクラスが利用できるようになります。
003: public class Mode {
クラス名を、Modeとしています。
004: public static void main( String[] args ) {
このmainメソッドからプログラムを実行します。
005: // 配列aを宣言 006: int[] a; 007: 008: // 要素数10を設定 009: a = new int[ 10 ]; 010: 011: // 値を代入 012: a[ 0 ] = 10; 013: a[ 1 ] = 5; 014: a[ 2 ] = 8; 015: a[ 3 ] = 10; 016: a[ 4 ] = 50; 017: a[ 5 ] = 10; 018: a[ 6 ] = 8; 019: a[ 7 ] = 20; 020: a[ 8 ] = 8; 021: a[ 9 ] = 55;
int型の配列aの要素数を10個で初期化し、任意の値を代入しています。
023: // 昇順ソート 024: Arrays.sort( a );
Arraysクラスのsortメソッドを使って配列aを昇順ソートしています。
ここで昇順ソートをする理由は、配列の中の同じ値を連続的に格納させるためです。
ソート Arrays.sortメソッド
public static int Arrays.sort( char[] a )
public static int Arrays.sort( double[] a )
public static int Arrays.sort( float[] a )
public static int Arrays.sort( int[] a )
public static int Arrays.sort( short[] a )
■指定された配列を数値の昇順でソートします。 パラメータ a : 昇順ソートする配列
026: // 最頻値 027: int pre_mode, num, max_num; 028: int mode;
最頻値を求めるために必要な変数を宣言しています。
030: // 初期値を代入 031: mode = a[ 0 ]; // 最頻値の初期値 032: max_num = 1; // 最大出現数の初期値 033: 034: pre_mode = a[ 0 ]; // 出現する回数を数える値 035: num = 1; // 出現回数
変数に初期値を代入しています。
int型の変数modeは、最頻値の最終結果を格納するもので初期値としてa[0]を代入します。最頻値の出現回数を格納する変数max_numには1を代入しておきます。
int型の変数pre_modeは、出現回数を数える値の初期値を代入しています。変数numはpre_modeと同じ値の出現回数で、初期値に1を代入しています。
037: for ( int i = 1; i < a.length; ++ i ) {
038: if ( pre_mode == a[ i ] ) { 039: // 同じ値の場合 040: // 出現回数に1を足す 041: ++ num; 042: }
出現回数を数える値pre_modeと配列の値a[i]が同じであれば出現回数numに1を足しています。
043: else { 044: // 違う同じ値の場合 045: if ( num > max_num ) { 046: mode = pre_mode; 047: max_num = num; 048: } 049: 050: // 出現する回数を数える値を変更 051: pre_mode = a[ i ]; 052: num = 1; 053: }
出現回数を数える値pre_modeと配列の値a[i]が違っていれば、pre_modeの出現回数numとmax_numを比較して、numがmax_numより大きければ最頻値modeにpre_mode、最大出現回数max_numにnumを代入します。
pre_modeにa[i]を代入して出現回数を数える値を変更します。出現数numも1にします。
056: // 後処理 057: if ( num > max_num ) { 058: mode = pre_mode; 059: max_num = num; 060: }
for文を抜けた後で、出現回数を数える値pre_modeの出現数numとmax_numを比較し、numが大きければ最頻値modeにpre_mode、最大出現回数max_numにnumを代入します。
063: // 結果表示 064: System.out.println( "最頻値 : " + mode ); 065: System.out.println( "出現数 : " + max_num );
結果を表示しています。
■関連コンテンツ
Javaの配列 | 同じ型の変数をまとめた配列について解説 |
配列のソート | 配列を昇順・降順に並び替える方法を解説 |
■新着情報
2022.07.07 | 外部プログラムの実行 | exeファイル実行 |
2022.07.06 | 完全数 | 6=1+2+3 |
■広告