Histogram dengan Kekerapan Apache Commons

1. Gambaran keseluruhan

Dalam tutorial ini, kita akan melihat bagaimana kita dapat mempersembahkan data pada histogram dengan bantuan kelas Frekuensi Apache Commons.

The Kekerapan kelas adalah sebahagian daripada sebahagian daripada perpustakaan Apache Commons matematik diterokai dalam artikel ini.

Histogram adalah rajah bar yang bersambung yang menunjukkan berlakunya pelbagai data dalam set data. Ia berbeza dengan carta palang kerana ia digunakan untuk menampilkan pengedaran pemboleh ubah berterusan, kuantitatif sementara carta palang digunakan untuk memaparkan data kategori.

2. Pergantungan Projek

Dalam artikel ini, kami akan menggunakan projek Maven dengan kebergantungan berikut:

 org.apache.commons commons-math3 3.6.1   org.knowm.xchart xchart 3.5.2 

Yang biasa-math3 perpustakaan mengandungi Kekerapan kelas itu kita akan menggunakan untuk menentukan berlakunya pembolehubah dalam set data kami. The xchart perpustakaan adalah apa yang kita akan gunakan untuk memaparkan histogram dalam GUI.

Versi terbaru commons-math3 dan xchart boleh didapati di Maven Central.

3. Mengira Kekerapan Pembolehubah

Untuk tutorial ini, kami akan menggunakan set data yang terdiri daripada usia pelajar di sekolah tertentu. Kami ingin melihat kekerapan kumpulan umur yang berbeza dan memerhatikan taburannya pada carta histogram.

Mari kita mewakili set data dengan Senarai koleksi dan menggunakannya untuk mengisi satu contoh yang Kekerapan kelas:

List datasetList = Arrays.asList( 36, 25, 38, 46, 55, 68, 72, 55, 36, 38, 67, 45, 22, 48, 91, 46, 52, 61, 58, 55); Frequency frequency = new Frequency(); datasetList.forEach(d -> frequency.addValue(Double.parseDouble(d.toString())));

Sekarang setelah kita mengisi contoh kelas Frekuensi , kita akan mendapatkan jumlah setiap umur dalam tong sampah dan menjumlahkannya sehingga kita dapat memperoleh jumlah frekuensi usia dalam kumpulan usia tertentu :

datasetList.stream() .map(d -> Double.parseDouble(d.toString())) .distinct() .forEach(observation -> { long observationFrequency = frequency.getCount(observation); int upperBoundary = (observation > classWidth) ? Math.multiplyExact( (int) Math.ceil(observation / classWidth), classWidth) : classWidth; int lowerBoundary = (upperBoundary > classWidth) ? Math.subtractExact(upperBoundary, classWidth) : 0; String bin = lowerBoundary + "-" + upperBoundary; updateDistributionMap(lowerBoundary, bin, observationFrequency); });

Dari snippet di atas, kita menentukan kekerapan pemerhatian menggunakan getCount () daripada kekerapan kelas. Kaedah mengembalikan jumlah kejadian pemerhatian .

Dengan menggunakan pemerhatian semasa , kami secara dinamis menentukan kumpulan yang dimilikinya dengan mengetahui batas atas dan bawahnya yang relatif dengan lebar kelas - iaitu 10 .

Batas atas dan bawah digabungkan untuk membentuk tong sampah, yang disimpan di samping pemerhatianFrekuensi dalam peta pengedaran menggunakan pembaharuanDistribusiMap () .

Sekiranya tong sampah sudah ada, kami akan mengemas kini frekuensi, jika tidak, kami menambahkannya sebagai kunci dan menetapkan kekerapan pemerhatian semasa sebagai nilainya. Perhatikan bahawa kami mengikuti pemerhatian yang diproses untuk mengelakkan pendua.

The Kekerapan kelas juga mempunyai kaedah untuk menentukan peratusan dan peratusan kumulatif pembolehubah dalam set data.

4. Memetakan Carta Histogram

Sekarang setelah kami memproses set data mentah kami ke peta kumpulan umur dan frekuensi masing-masing, kami dapat menggunakan perpustakaan xchart untuk memaparkan data dalam carta histogram:

CategoryChart chart = new CategoryChartBuilder().width(800).height(600) .title("Age Distribution") .xAxisTitle("Age Group") .yAxisTitle("Frequency") .build(); chart.getStyler().setLegendPosition(Styler.LegendPosition.InsideNW); chart.getStyler().setAvailableSpaceFill(0.99); chart.getStyler().setOverlapped(true); List yData = new ArrayList(); yData.addAll(distributionMap.values()); List xData = Arrays.asList(distributionMap.keySet().toArray()); chart.addSeries("age group", xData, yData); new SwingWrapper(chart).displayChart();

Kami membuat contoh CategoryChart menggunakan pembangun carta, kemudian kami mengkonfigurasinya dan mengisi dengan data untuk paksi x dan y.

Kami akhirnya memaparkan carta dalam GUI menggunakan SwingWrapper:

Dari histogram di atas, kita dapat melihat bahawa tidak ada pelajar yang berumur 80 - 90 tahun sementara pelajar yang berumur 50 - 60 tahun mendominasi. Kemungkinan besar ini adalah pelajar kedoktoran atau pasca doktoral.

Kita juga boleh mengatakan histogram mempunyai taburan normal.

5. Kesimpulan

Dalam artikel ini, kami telah melihat bagaimana memanfaatkan kekuatan kelas Frekuensi perpustakaan Apache commons-math3 .

Terdapat kelas menarik lain untuk statistik, geometri, algoritma genetik dan lain-lain di perpustakaan. Dokumentasinya boleh didapati di sini.

Kod sumber lengkap boleh didapati di Github.