Ohjelmointi

Kuinka laskea ryhmittäin ryhmässä R

Laskeminen useiden ryhmien mukaan - joskus kutsutaan ristikkoraporteiksi - voi olla hyödyllinen tapa tarkastella tietoja yleisen mielipiteen kyselyistä lääketieteellisiin testeihin. Esimerkiksi miten ihmiset äänestivät sukupuolen ja ikäryhmän mukaan? Kuinka monta ohjelmistokehittäjää, jotka käyttävät sekä R: tä että Pythonia, ovat miehiä vs. naisia?

R: ssä on monia tapoja tehdä tällainen laskenta luokittain. Täällä haluaisin jakaa suosikkini.

Tämän artikkelin esittelyissä käytän Stack Overflow Developers -kyselyn osajoukkoa, jossa kysytään kehittäjiä kymmenistä aiheista aina palkoista käytettyihin tekniikoihin. Pienennän sen sarakkeilla käytetyille kielille, sukupuolelle ja jos ne koodaavat harrastukseksi. Lisäsin myös oman LanguageGroup -sarakkeen, ilmoittaako kehittäjä R: n, Pythonin, molempien vai kummankaan.

Jos haluat seurata mukana, tämän artikkelin viimeisellä sivulla on ohjeet tietojen lataamiseen ja sekoittamiseen, jotta saisin saman tietojoukon, jota käytän.

Datassa on yksi rivi kutakin kyselyvastausta kohti, ja neljä saraketta ovat kaikki merkkejä.

str (mydata) 'data.frame': 83379 obs. 4 muuttujasta: $ Sukupuoli: chr "Mies" "Mies" "Mies" "Mies" ... $ LanguageWorkedWith: chr "HTML / CSS; Java; JavaScript; Python" "C ++; HTML / CSS; Python" "HTML / CSS "" C; C ++; C #; Python; SQL "... $ Harrastaja: chr" Kyllä "" Ei "" Kyllä "" Ei "... $ LanguageGroup: chr" Python "" Python "" Kumpikaan "" Python "...

Suodatin raakatiedot tehdäksesi ristikkäiset helpommin hallittaviksi, mukaan lukien poistamalla puuttuvat arvot ja ottamalla vain kaksi suurinta sukupuolta, Mies ja Nainen.

Talonmiespaketti

Joten, mikä on sukupuolijakauma kunkin kieliryhmän sisällä? Tämäntyyppiselle tietokehyksessä tapahtuvalle raportoinnille yksi porttityökalustani on talonmiespaketti tabyyli () toiminto.

Perus tabyyli () funktio palauttaa datakehyksen, jossa on lukuja. Ensimmäinen sarakkeen nimi, jonka lisäät a tabyyli () argumentista tulee rivija toinen sarake

kirjasto (talonmies) tabyl (mydata, Gender, LanguageGroup)

Sukupuoli Kumpikaan Kumpikaan Python R Man 3264 43908 29044 969 Nainen 374 3705 1940 175

Mikä on mukavaa tabyyli () on myös erittäin helppo tuottaa prosentteja. Jos haluat nähdä jokaisen sarakkeen prosenttiosuudet raakojen kokonaissummien sijaan, lisää adorn_percentages ("col"). Voit sitten siirtää nämä tulokset muotoilutoimintoon, kutenadorn_pct_formatting ().

tabyl (mydata, Gender, LanguageGroup)%>%

adorn_percentages ("col")%>%

adorn_pct_formatting (numeroa = 1)

Sukupuoli Kumpikaan Kumpikaan Python R Man 89,7% 92,2% 93,7% 84,7% Nainen 10,3% 7,8% 6,3% 15,3%

Jos haluat nähdä prosentit rivittäin, lisää adorn_percentages ("rivi")

Jos haluat lisätä kolmannen muuttujan, kuten Hobbyist, se on myös helppoa.

tabyyli (mydata, sukupuoli, kieliryhmä, harrastaja)%>%

adorn_percentages ("col")%>%

adorn_pct_formatting (numeroa = 1)

Tulosten visuaalinen vertailu yli kahdella tasolla on kuitenkin hieman vaikeampi tällä tavalla. Tämä koodi palauttaa a lista yhdellä datakehyksellä jokaista kolmannen tason valintaa varten:

$ Ei sukupuolta Molemmat Kumpikaan Python R Man 79,6% 86,7% 86,4% 74,6% Nainen 20,4% 13,3% 13,6% 25,4% $ Kyllä Sukupuoli Molemmat Kumpikaan Python R Man 91,6% 93,9% 95,0% 88,0% Nainen 8,4% 6,1% 5,0% 12,0%

CGPfunctions-paketti

CGPfunctions-paketti on syytä etsiä joitain nopeita ja helppoja tapoja visualisoida ristiintaulukon tietoja. Asenna se CRAN: lta tavalliseen tapaan install.packages ("CGPfunctions").

Paketilla on kaksi kiinnostavaa toimintoa ristikkäiden tarkastelemiseen: PlotXTabs () ja PlotXTabs2 (). Tämä koodi palauttaa datan pylväsdiagrammit (ensimmäinen kaavio alla):

kirjasto (CGPfunctions)

PlotXTabs (mydata)

Näyttökuva: Sharon Machlis,

PlotXTabs2 (mydata) luo kaavion, jolla on erilainen ulkoasu, ja joitain tilastollisia yhteenvetoja (toinen kaavio vasemmalla).

Jos et tarvitse tai halua näitä yhteenvetoja, voit poistaa ne results.subtitle = EPÄTOSI, kutenPlotXTabs2 (mydata, LanguageGroup, Gender, results.subtitle = EPÄTOSI).

Näyttökuva: Sharon Machlis,

PlotXTabs2 () on pari tusinaa argumenttivaihtoehtoa, mukaan lukien otsikko, kuvateksti, selitykset, värimaailma ja yksi neljästä juonetyypistä: sivu, pino, mosaiikki tai prosentti. On myös ggplot2-käyttäjille tuttuja vaihtoehtoja, kuten ggtheme ja paletti. Näet lisätietoja toiminnon ohjetiedostosta.

VTree-paketti

Vtree-paketti tuottaa grafiikka ristiintaulukoille graafien sijaan. Suorita pää vtree () toiminto yhdellä muuttujalla, kuten

kirjasto (vtree)

vtree (mydata, "LanguageGroup")

saa sinulle tämän perustavan vastauksen:

Sharon Machlis,

En ole kiinnostunut värien oletusasetuksista täällä, mutta voit vaihtaa RColorBrewer-paletin. vtree's palette argumentti käyttää palettia numerot, ei nimiä; näet kuinka ne on numeroitu vtree-paketin ohjeista. Voisin valita esimerkiksi 3 vihreille ja 5 purppuralle. Valitettavasti nämä oletukset antavat sinulle voimakkaamman värin alempi laskea numeroita, mikä ei aina ole järkevää (ja ei toimi minulle tässä esimerkissä). Voin muuttaa oletuskäyttäytymistä lajittelu = TOSI käyttää voimakkaampaa väriä korkeampi arvo.

vtree (mydata, "LanguageGroup", paletti = 3, lajittelu = TOSI)

Sharon Machlis,

Jos huomaat, että tumma väri vaikeuttaa tekstin lukemista, on joitain vaihtoehtoja. Yksi vaihtoehto on käyttää tavallinen väite, kutenvtree (mydata, "LanguageGroup", tavallinen = TOSI). Toinen vaihtoehto on asettaa yksi täyteväri paletin sijaan käyttämällä täyttöväri väite, kutenvtree (mydata, LanguageGroup ", fillcolor =" # 99d8c9 ").

Jos haluat tarkastella kahta muuttujaa ristikkoraportissa, lisää vain toinen sarakkeen nimi ja paletti tai väri, jos et halua oletusasetusta. Voit käyttää tavallista vaihtoehtoa tai määrittää kaksi palettia tai kaksi väriä. Valitsin alla tietyt värit palettien sijaan, ja myös kiertin kuvaajaa lukemaan pystysuunnassa.

vtree (mydata, c ("LanguageGroup", "Gender"),

fillcolor = c (LanguageGroup = "# e7d4e8", Sukupuoli = "# 99d8c9"),

horisontti = EPÄTOSI)

Sharon Machlis,

Voit lisätä enemmän kuin kaksi luokkaa, vaikka sen lukeminen ja seuraaminen on hieman vaikeampi puun kasvaessa. Jos olet kiinnostunut vain jonkin verran haaroista, voit määrittää, mikä näytetään pitää Perustelu. Alla asetin vtree () näyttää vain ihmiset, jotka käyttävät R: tä ilman Pythonia tai jotka käyttävät sekä R: tä että Pythonia.

vtree (mydata, c ("Sukupuoli", "Kieliryhmä", "Harrastaja"),

horiz = EPÄTOSI, fillcolor = c (LanguageGroup = "# e7d4e8",

Sukupuoli = "# 99d8c9", harrastaja = "# 9ecae1"),

keep = list (LanguageGroup = c ("R", "Molemmat")), showcount = EPÄTOSI)

Kun puu on niin kiireinen, mielestäni se auttaa jompikumpi määrä tai prosentti solmutunnisteina, ei molemmat. Joten tämä viimeinen argumentti yllä olevassa koodissa, showcount = EPÄTOSI, asettaa kaavion näyttämään vain prosentteja eikä laskelmia.

Sharon Machlis,

Lisää lasketaan ryhmävaihtoehtojen mukaan

R: ssä on muita hyödyllisiä tapoja ryhmitellä ja laskea, mukaan lukien pohja R, dplyr ja data.table. Tukiasemalla R onxtabs () toiminto nimenomaan tätä tehtävää varten. Huomaa alla oleva kaavasyntaksi: tilde ja sitten yksi muuttuja plus toinen muuttuja.

xtabs (~ LanguageGroup + Gender, data = mydata)

Sukupuolen kieli Ryhmä Mies Nainen Molemmat 3264 374 Kumpikaan 43908 3705 Python 29044 1940 R 969175

dplyr's Kreivi() -toiminto yhdistää "ryhmittele" ja "laskea rivit kussakin ryhmässä" yhdeksi toiminnoksi.

kirjasto (dplyr)

my_summary%

count (kieliryhmä, sukupuoli, harrastaja, lajittelu = TOSI)

my_summary Kieliryhmä Sukupuoliharrastaja n 1 Kumpikaan mies Kyllä 34419 2 Python-mies Kyllä 25093 3 Kumpikaan mies Ei 9489 4 Python-mies Ei 3951 5 Molemmat miehet Kyllä 2807 6 Kumpikaan nainen Kyllä 2250 7 Kumpikaan nainen ei 1455 8 Python-nainen Kyllä 1317 9 R Mies Kyllä 757 10 Python-nainen Ei 623 11 Molemmat Mies Ei 457 12 Molemmat Naiset Kyllä 257 13 R Mies Ei 212 14 Molemmat Naiset Ei 117 15 R Nainen Kyllä 103 16 R Nainen Ei 72

Ladaan alla olevaan kolmeen koodiriviin data.table-paketin, luodaan data.table-tietotaulusta ja käytän sitten erityistä .N data.table-symboli, joka tarkoittaa ryhmän rivien määrää.

kirjasto (data.table)

mydt <- setDT (mydata)

mydt [, .N, kirjoittanut =. (kieliryhmä, sukupuoli, harrastaja)]

Visualisointi ggplot2: n avulla

Kuten useimmissa tiedoissa, ggplot2 on hyvä valinta visualisoida yhteenvetotuloksia. Ensimmäinen ggplot-kaavio kuvaa X-akselilla LanguageGroupia ja kunkin Y-akselilla. Täyttöväri edustaa sitä, sanooko joku koodaavansa harrastuksena. Ja facet_wrap sanoo: Tee erillinen kaavio jokaiselle Sukupuoli-sarakkeen arvolle.

kirjasto (ggplot2)

ggplot (oma_summary, aes (kieliryhmä, n, täytä = harrastaja)) +

geom_bar (stat = "identiteetti") +

facet_wrap (facets = vars (sukupuoli))

Sharon Machlis,

Koska otoksessa on suhteellisen vähän naisia, on vaikea verrata prosenttiosuuksia sukupuolten välillä, kun molemmat kuvaajat käyttävät samaa Y-akselin asteikkoa. Voin kuitenkin muuttaa sitä, joten jokainen kaavio käyttää erillistä asteikkoa lisäämällä argumentin asteikot = "vapaa_y" että facet_wrap () toiminto:

ggplot (oma_summary, aes (kieliryhmä, n, täytä = harrastaja)) +

geom_bar (stat = "identiteetti") +

facet_wrap (facets = vars (sukupuoli), asteikot = "free_y")

Nyt on helpompaa verrata useita muuttujia sukupuolen mukaan.

Saat lisää R-vinkkejä siirtymällä Tee enemmän R: llä -sivulle tai tutustumalla YouTube-soittolistaan ​​Tee enemmän R: llä.

Seuraavalta sivulta saat lisätietoja tässä esittelyssä käytettyjen tietojen lataamisesta ja kiistelemisestä.