Histogram dengan Frekuensi Apache Commons

1. Ikhtisar

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

Kelas Frekuensi adalah bagian dari bagian pustaka Apache Commons Math yang dibahas dalam artikel ini.

Histogram adalah diagram batang yang terhubung yang menunjukkan terjadinya berbagai data dalam kumpulan data. Ini berbeda dari diagram batang karena digunakan untuk menampilkan distribusi variabel kuantitatif berkelanjutan, sedangkan diagram batang digunakan untuk menampilkan data kategori.

2. Ketergantungan Proyek

Di artikel ini, kami akan menggunakan proyek Maven dengan dependensi berikut:

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

The commons-math3 perpustakaan berisi Frekuensi kelas yang kita akan menggunakan untuk menentukan terjadinya variabel dalam dataset kami. The xchart perpustakaan yang akan kita gunakan untuk menampilkan histogram dalam GUI.

Versi terbaru dari commons-math3 dan xchart dapat ditemukan di Maven Central.

3. Menghitung Frekuensi Variabel

Untuk tutorial ini, kami akan menggunakan kumpulan data yang terdiri dari usia siswa di sekolah tertentu. Kami ingin melihat frekuensi kelompok usia yang berbeda dan mengamati distribusinya pada bagan histogram.

Mari kita wakili dataset dengan koleksi List dan menggunakannya untuk mengisi instance kelas Frekuensi :

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 kita telah mengisi contoh kelas Frekuensi kita, kita akan mendapatkan hitungan setiap usia dalam bin dan menjumlahkannya sehingga kita bisa mendapatkan frekuensi total usia dalam kelompok 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 potongan di atas, pertama-tama kita menentukan frekuensi observasi menggunakan getCount () dari kelas Frekuensi . Metode ini mengembalikan jumlah kejadian observasi .

Dengan menggunakan pengamatan saat ini , kami secara dinamis menentukan grupnya dengan mencari tahu batas atas dan bawahnya relatif terhadap lebar kelas - yaitu 10 .

Batas atas dan bawah digabungkan untuk membentuk sebuah bin, yang disimpan bersama observasiFrequency di distributionMap menggunakan updateDistributionMap () .

Jika bin sudah ada, kita perbarui frekuensinya, kalau tidak kita tambahkan sebagai key dan setel frekuensi observasi saat ini sebagai nilainya. Perhatikan bahwa kami terus melacak pengamatan yang diproses untuk menghindari duplikasi.

Kelas Frekuensi juga memiliki metode untuk menentukan persentase dan persentase kumulatif suatu variabel dalam kumpulan data.

4. Merencanakan Bagan Histogram

Sekarang setelah kami memproses kumpulan data mentah kami menjadi peta kelompok usia dan frekuensinya masing-masing, kami dapat menggunakan perpustakaan xchart untuk menampilkan data dalam bagan 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 instance dari CategoryChart menggunakan pembuat bagan, lalu kami mengonfigurasinya dan mengisinya dengan data untuk sumbu x dan y.

Kami akhirnya menampilkan bagan dalam GUI menggunakan SwingWrapper:

Dari histogram di atas terlihat bahwa tidak ada siswa yang berusia 80 - 90 tahun, sedangkan siswa dengan usia 50 - 60 tahun lebih dominan. Ini kemungkinan besar akan menjadi mahasiswa doktoral atau pasca-doktoral.

Kami juga dapat mengatakan histogram memiliki distribusi normal.

5. Kesimpulan

Pada artikel ini, kita telah melihat bagaimana memanfaatkan kekuatan kelas Frekuensi pustaka Apache commons-math3 .

Ada kelas menarik lainnya untuk statistik, geometri, algoritma genetika dan lain-lain di perpustakaan. Dokumentasinya dapat ditemukan di sini.

Kode sumber lengkap tersedia di Github.