Hisztogramok Apache Commons gyakorisággal

1. Áttekintés

Ebben az oktatóanyagban megvizsgáljuk, hogyan tudunk adatokat bemutatni egy hisztogramon az Apache Commons Frequency osztály segítségével.

A Frekvencia osztály az ebben a cikkben feltárt Apache Commons Math könyvtár része.

A hisztogram a csatlakoztatott sávok diagramja, amely az adatsor adattartományának előfordulását mutatja. Az oszlopdiagramtól abban különbözik, hogy a folyamatos, kvantitatív változók eloszlásának megjelenítésére szolgál, míg az oszlopdiagram a kategorikus adatok megjelenítésére.

2. Projektfüggőségek

Ebben a cikkben egy Maven projektet fogunk használni a következő függőségekkel:

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

A commons-math3 könyvtár tartalmazza a Frekvencia osztály, amelyet a változók előfordulásának meghatározásához használunk az adatkészletünkben. A xchart A könyvtár segítségével a hisztogramot megjeleníthetjük egy GUI-ban.

A commons-math3 és az xchart legújabb verziója megtalálható a Maven Central oldalon.

3. A változók gyakoriságának kiszámítása

Ehhez az oktatóanyaghoz olyan adatkészletet fogunk használni, amely az adott iskola diákjainak életkorát tartalmazza. Szeretnénk megnézni a különböző korcsoportok gyakoriságát, és megfigyelni azok eloszlását egy hisztogram diagramon.

Jelöljük az adatsort a-val Lista gyűjtemény, és felhasználja a Frekvencia osztály:

List datasetList = tömbök. AsList (36, 25, 38, 46, 55, 68, 72, 55, 36, 38, 67, 45, 22, 48, 91, 46, 52, 61, 58, 55); Frekvencia gyakorisága = új Frekvencia (); datasetList.forEach (d -> frequency.addValue (Double.parseDouble (d.toString ())));

Most, hogy feltöltöttük a Frekvencia osztályba fogjuk gyűjteni az egyes korok számát egy kukába, és összegezzük, hogy megkapjuk az adott korcsoportok teljes gyakoriságát:

datasetList.stream () .map (d -> Double.parseDouble (d.toString ())) .distinct () .forEach (megfigyelés -> {hosszú megfigyelési frekvencia = gyakoriság.getCount (megfigyelés); int upperBoundary = (megfigyelés> classWidth) )? Math.multiplyExact ((int) Math.ceil (megfigyelés / classWidth), classWidth): classWidth; int lowerBoundary = (felsőBoundary> classWidth)? Math.subtractExact (upperBoundary, classWidth): 0; String bin = alsóBoundary + "- "+ upperBoundary; updateDistributionMap (alsóBoundary, bin, observationFrequency);});

A fenti részletből először meghatározzuk a megfigyelés használni a getCount () a Frekvencia osztály. A metódus visszaadja a megfigyelés.

Az áram használata megfigyelés, dinamikusan meghatározzuk a csoportot, amelyhez tartozik, azáltal, hogy kitaláljuk az osztály szélességéhez viszonyított felső és alsó határait - ami 10.

A felső és az alsó határt összefűzve egy kuka képződik, amelyet a tároló mellett tárolnak megfigyelésFrekvencia a distributionMap használni a updateDistributionMap ().

Ha a kuka létezik már frissítjük a frekvenciát, különben hozzáadjuk kulcsként és beállítjuk az áram frekvenciáját megfigyelés mint az értéke. Ne feledje, hogy az ismétlődések elkerülése érdekében nyomon követtük a feldolgozott megfigyeléseket.

A Frekvencia osztálynak vannak módszerei az adatkészlet változójának százalékos és kumulatív százalékos meghatározására is.

4. A hisztogram diagram ábrázolása

Most, hogy feldolgoztuk a nyers adatállományt a korcsoportok és azok frekvenciáinak térképére, használhatjuk xchart könyvtár az adatok hisztogramdiagramon való megjelenítéséhez:

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 ("korosztály", xData, yData); új SwingWrapper (diagram) .displayChart ();

Hoztunk létre egy példányt a CategoryChart a diagramkészítő segítségével konfiguráltuk, és feltöltöttük az x és y tengely adataival.

Végül egy grafikus felhasználói felületen jelenítjük meg a diagramot a SwingWrapper:

A fenti hisztogramból láthatjuk, hogy nincsenek 80–90 éves diákok, míg az 50–60 éves diákok vannak túlsúlyban. Ez nagy valószínűséggel doktorandusz vagy posztdoktori hallgató lesz.

Mondhatjuk azt is, hogy a hisztogram normális eloszlású.

5. Következtetés

Ebben a cikkben megvizsgáltuk, hogyan lehet kihasználni a Frekvencia osztály Apache commons-math3 könyvtár.

A könyvtárban más érdekes osztályok találhatók statisztikák, geometria, genetikai algoritmusok és mások számára. Dokumentációja itt található.

A teljes forráskód elérhető a Github oldalon.


$config[zx-auto] not found$config[zx-overlay] not found