1.概要

このチュートリアルでは、Apache Commons

http://commons.apache.org/proper/commons-math/userguide/stat.html#a1.3


Frequency

distributionsを使用して、ヒストグラム上にデータを表示する方法を説明します。[頻度]クラス。


__Frequency

__classは、Apache Commons Mathライブラリの/apache-commons-math[article]のリンクの一部です。

ヒストグラムは、データセット内のデータ範囲の発生を示す、連結バーの図です。棒グラフはカテゴリデータの表示に使用されますが、連続的な量的変数の分布の表示に使用されるという点で棒グラフとは異なります。

2.プロジェクトの依存関係

この記事では、以下の依存関係を持つMavenプロジェクトを使用します。

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-math3</artifactId>
    <version>3.6.1</version>
</dependency>
<dependency>
    <groupId>org.knowm.xchart</groupId>
    <artifactId>xchart</artifactId>
    <version>3.5.2</version>
</dependency>


commons-math3

ライブラリには、データセット内の変数の出現を判断するために使用する

__Frequency

__クラスが含まれています。


xchart

ライブラリは、ヒストグラムをGUIで表示するために使用します。


commons-math3

の最新バージョンhttps://search.maven.org/classic/#search%7Cga%7C1%7Ca%3A%22xchart%22%20g%3A%22org.knowm.xchart%22[xchart]はMaven Centralで見つけることができます。

3.変数の頻度を計算する

このチュートリアルでは、特定の学校の生徒の年齢からなるデータセットを使用します。さまざまな年齢層の頻度を確認し、その分布をヒストグラムチャートで確認します。

データセットを

__List


collectionで表し、それを使用して


Frequency

__classのインスタンスを作成しましょう。

List<Integer> 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())));


  • __Frequency

    __classのインスタンスを作成したので、ビン内の各年齢の数を取得して合計し、特定の年齢層の年齢の合計頻度を取得します。

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);
  });

上記のスニペットから、まず

Frequency

クラスの

getCount()

を使用して

observation

の頻度を決定します。

このメソッドは、



オブザベーション

の発生総数を返します。

現在の

observationを使用して、クラスの幅に対する上限と下限の境界を決定することによって、所属するグループを動的に決定します。これは10


.

__です。

上限と下限の境界は連結されてビンを形成し、ビンは

updateDistributionMap()

を使用して

distributionMap



observationFrequency

と並んで格納されます。


bin

がすでに存在する場合は頻度を更新します。それ以外の場合は頻度をキーとして追加し、現在の__観測の頻度を値として設定します。

重複を避けるために、処理された観測を追跡したことに注意してください。


Frequency

クラスには、データセット内の変数のパーセンテージと累積パーセンテージを決定するためのメソッドもあります。

4.ヒストグラムチャートをプロットする

生データセットを年齢層とそれぞれの頻度のマップに処理したので、

xchart

ライブラリを使用してデータをヒストグラムチャートに表示できます。

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();

チャートビルダーを使用して

CategoryChart

のインスタンスを作成し、それを構成してx軸とy軸のデータを入力しました。

最後に__SwingWrapperを使用してGUIでチャートを表示します。

リンク:/uploads/22112

xchart

histogram.png%20721w[]

上記のヒストグラムから、50〜60歳の生徒が優勢であるのに対し、80〜90歳の生徒はいないことがわかります。これはおそらく博士課程または博士後期課程の学生になるでしょう。

ヒストグラムは正規分布をしているとも言えます。

5.まとめ

この記事では、Apache

commons-math3

ライブラリーの____Frequencyクラスの力をどのように利用するかを見てきました。

ライブラリには、統計、幾何学、遺伝的アルゴリズムなどのための他の興味深いクラスがあります。そのドキュメントはhttp://commons.apache.org/proper/commons-math/userguide/index.html[ここ]にあります。

完全なソースコードはhttps://github.com/eugenp/tutorials/tree/master/libraries-apache-commons[over at Github]から入手できます。