Histogramy s frekvenciou Apache Commons

1. Prehľad

V tomto výučbe sa pozrieme na to, ako môžeme prezentovať údaje na histograme pomocou triedy Apache Commons Frequency.

The Frekvencia triedy je súčasťou časti knižnice Apache Commons Math skúmanej v tomto článku.

Histogram je diagram spojených pruhov, ktorý ukazuje výskyt rozsahu údajov v množine údajov. Od stĺpcového grafu sa líši tým, že sa používa na zobrazenie distribúcie spojitých kvantitatívnych premenných, zatiaľ čo stĺpcový graf sa používa na zobrazenie kategorických údajov.

2. Závislosti od projektu

V tomto článku budeme používať projekt Maven s nasledujúcimi závislosťami:

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

The commons-math3 knižnica obsahuje Frekvencia triedy, ktorú použijeme na určenie výskytu premenných v našom súbore údajov. The xchart knižnica je to, čo použijeme na zobrazenie histogramu v grafickom používateľskom rozhraní.

Najnovšiu verziu programov commons-math3 a xchart nájdete na serveri Maven Central.

3. Výpočet frekvencie premenných

V tomto výučbe budeme používať množinu údajov, ktorá obsahuje vek študentov v konkrétnej škole. Radi by sme videli frekvenciu rôznych vekových skupín a sledovali ich distribúciu na grafe histogramu.

Predstavme množinu údajov znakom a Zoznam zbierka a použije sa na vyplnenie inštancie súboru Frekvencia trieda:

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

Teraz, keď sme naplnili našu inštanciu súboru Frekvencia triedy, dostaneme počet všetkých vekových skupín do koša a zhrnieme to, aby sme mohli získať celkovú frekvenciu vekov v konkrétnej vekovej skupine:

datasetList.stream () .map (d -> Double.parseDouble (d.toString ())) .distinct () .forEach (pozorovanie -> {dlhé pozorovanieFrekvencia = frekvencia.getCount (pozorovanie); int upperBoundary = (pozorovanie> šírka triedy) )? Math.multiplyExact ((int) Math.ceil (pozorovanie / classWidth), classWidth): classWidth; int lowerBoundary = (upperBoundary> classWidth)? Math.subtractExact (upperBoundary, classWidth): 0; String bin = lowerBoundary + "- "+ upperBoundary; updateDistributionMap (lowerBoundary, bin, ObservationFrequency);});

Z úryvku vyššie najskôr určíme frekvenciu pozorovanie pomocou getCount () z Frekvencia trieda. Metóda vráti celkový počet výskytov pozorovanie.

Pomocou prúdu pozorovanie, dynamicky určujeme skupinu, do ktorej patrí, zistením jej hornej a dolnej hranice vzhľadom na šírku triedy - čo je 10.

Horná a dolná hranica sú spojené, aby vytvorili kôš, ktorý je uložený pozdĺž pozorovanieFrekvencia v distributionmap pomocou updateDistributionMap ().

Ak kôš už existuje, aktualizujeme frekvenciu, inak ju pridáme ako kľúč a nastavíme frekvenciu prúdu pozorovanie ako jeho hodnota. Upozorňujeme, že sme sledovali spracované pozorovania, aby sme sa vyhli duplikátom.

The Frekvencia trieda majú tiež metódy na určenie percenta a kumulatívneho percenta premennej v množine údajov.

4. Vynesenie grafu histogramu

Teraz, keď sme spracovali náš surový súbor údajov do mapy vekových skupín a ich príslušných frekvencií, môžeme použiť xchart knižnica na zobrazenie údajov v histogramovom grafe:

Graf CategoryChart = nový CategoryChartBuilder (). Width (800) .height (600) .title ("Vekové rozdelenie") .xAxisTitle ("Veková skupina") .yAxisTitle ("Frekvencia") .build (); chart.getStyler (). setLegendPosition (Styler.LegendPosition.InsideNW); chart.getStyler (). setAvailableSpaceFill (0,99); chart.getStyler (). setOverlapped (true); Zoznam yData = nový ArrayList (); yData.addAll (distributionMap.values ​​()); Zoznam xData = Arrays.asList (distributionMap.keySet (). ToArray ()); chart.addSeries ("veková skupina", xData, yData); nový SwingWrapper (graf) .displayChart ();

Vytvorili sme inštanciu a Kategória Graf pomocou nástroja na tvorbu grafov sme ho nakonfigurovali a vyplnili údajmi pre os xay.

Graf nakoniec zobrazíme v grafickom používateľskom rozhraní pomocou znaku SwingWrapper:

Z vyššie uvedeného histogramu vidíme, že neexistujú žiadni študenti vo veku od 80 do 90 rokov, zatiaľ čo prevládajú študenti vo veku od 50 do 60 rokov. To budú s najväčšou pravdepodobnosťou doktorandi alebo doktorandi.

Môžeme tiež povedať, že histogram má normálne rozdelenie.

5. Záver

V tomto článku sme sa zaoberali tým, ako využiť silu systému Frekvencia trieda Apache commons-math3 knižnica.

V knižnici sú ďalšie zaujímavé triedy pre štatistiku, geometriu, genetické algoritmy a ďalšie. Jeho dokumentáciu nájdete tu.

Celý zdrojový kód je k dispozícii na stránkach Github.


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