Programiranje

Kako šteti po skupinah v R

Štetje po več skupinah - včasih imenovanih navzkrižnih poročil - je lahko koristen način za pregledovanje podatkov, ki segajo od raziskav javnega mnenja do medicinskih preiskav. Na primer, kako so ljudje glasovali po spolu in starostni skupini? Koliko razvijalcev programske opreme, ki uporabljajo tako R kot Python, je moških in žensk?

Obstaja veliko načinov za tovrstno štetje po kategorijah v R. Tukaj bi rad delil nekaj svojih najljubših.

Za predstavitve v tem članku bom uporabil podskupino raziskave Stack Overflow Developers, ki razvijalce raziskuje na ducate tem, od plač do uporabljenih tehnologij. Zmanjšal jo bom s stolpci za uporabljene jezike, spol in če kodirajo kot hobi. Dodal sem tudi svoj stolpec LanguageGroup, ali je razvijalec poročal, da uporablja R, Python, oba ali nobenega.

Če želite nadaljevati, so na zadnji strani tega članka navodila, kako prenesti in premešati podatke, da dobite isti nabor podatkov, ki ga uporabljam.

Podatki imajo eno vrstico za vsak odgovor na anketo, štirje stolpci pa so vsi znaki.

str (mydata) 'data.frame': 83379 obs. od 4 spremenljivk: $ Gender: chr "Man" "Man" "Man" "Man" ... $ LanguageWorkedWith: chr "HTML / CSS; Java; JavaScript; Python" "C ++; HTML / CSS; Python" "HTML / CSS "" C; C ++; C #; Python; SQL "... $ Hobiist: chr" Da "" Ne "" Da "" Ne "... $ LanguageGroup: chr" Python "" Python "" Niti "" Python "...

Neobdelane podatke sem filtriral, da je bilo navzkrižne zavihke bolj obvladljivo, vključno z odstranjevanjem manjkajočih vrednosti in samo dvema največjima spoloma, Moškim in Žensko.

Hišniški paket

Torej, kakšna je razčlenitev spolov v posamezni jezikovni skupini? Za to vrsto poročanja v podatkovnem okviru je eno od mojih orodij paket hišniškega paketa tabil () funkcijo.

Osnovno tabil () vrne podatkovni okvir s številom. Ime prvega stolpca, ki ga dodate v tabil () argument postane vrstici, drugi pa stolpec

knjižnica (hišnik) tabyl (mydata, Gender, LanguageGroup)

Spol Oba ne Python R Moški 3264 43908 29044 969 Ženska 374 3705 1940 175

Kaj je lepo pri nas tabil () je zelo enostavno ustvariti tudi odstotke. Če želite namesto neobdelanih vsot videti odstotke za vsak stolpec, dodajte adorn_percentages ("col"). Nato lahko te rezultate prenesete v funkcijo oblikovanja, kot jeadorn_pct_formatting ().

tabyl (mydata, Gender, LanguageGroup)%>%

adorn_percentages ("col")%>%

adorn_pct_formatting (številke = 1)

Spol Oba ne Python R Man 89,7% 92,2% 93,7% 84,7% Ženska 10,3% 7,8% 6,3% 15,3%

Če si želite ogledati odstotke po vrsticah, dodajte adorn_percentages ("vrstica")

Če želite dodati še tretjo spremenljivko, na primer Hobbyist, je tudi to enostavno.

tabyl (mydata, Gender, LanguageGroup, Hobbyist)%>%

adorn_percentages ("col")%>%

adorn_pct_formatting (številke = 1)

Vendar je na ta način vizualno primerjati rezultate na več kot dveh ravneh nekoliko težje. Ta koda vrne a seznam z enim podatkovnim okvirom za vsako izbiro tretje stopnje:

$ Brez spola Oba ne Python R Man 79,6% 86,7% 86,4% 74,6% Ženska 20,4% 13,3% 13,6% 25,4% $ Da Spol Oba Niti Python R Man 91,6% 93,9% 95,0% 88,0% Ženska 8,4% 6,1% 5,0% 12,0%

Paket CGPfunctions

Paket CGPfunctions je vreden ogleda nekaj hitrih in enostavnih načinov za vizualizacijo podatkov navzkrižnih tabel. Namestite ga iz CRAN z običajnim install.packages ("CGPfunctions").

Paket ima dve zanimivi funkciji za pregled navzkrižnih zavihkov: PlotXTabs () in PlotXTabs2 (). Ta koda vrne črtne grafikone podatkov (prvi graf spodaj):

knjižnica (funkcije CGP)

PlotXTabs (mydata)

Posnetek zaslona Sharon Machlis,

PlotXTabs2 (mydata) ustvari graf z drugačnim videzom in nekaj statističnih povzetkov (drugi graf na levi).

Če teh povzetkov ne potrebujete ali želite, jih lahko odstranite z results.subtitle = FALSE, kot naprimerPlotXTabs2 (mydata, LanguageGroup, Gender, results.subtitle = FALSE).

Posnetek zaslona Sharon Machlis,

PlotXTabs2 () ima nekaj ducatov argumentnih možnosti, vključno z naslovom, napisom, legendami, barvno shemo in eno od štirih vrst ploskve: stran, kup, mozaik ali odstotek. Uporabnikom ggplot2 so znane tudi možnosti, kot sta ggtheme in paleta. Več podrobnosti si lahko ogledate v datoteki s pomočjo funkcije.

Paket vtree

Paket vtree ustvari grafiko za navzkrižne tabele v nasprotju z grafi. Zagon glavne vtree () funkcija na eni spremenljivki, kot je

knjižnica (vtree)

vtree (mydata, "LanguageGroup")

dobi ta osnovni odgovor:

Sharon Machlis,

Tu nisem navdušen nad privzetimi barvami, lahko pa zamenjate v paleti RColorBrewer. Argument palete vtree uporablja paleto številke, ne imena; kako so oštevilčeni, lahko vidite v dokumentaciji paketa vtree. Izbral bi lahko na primer 3 za Zelene in 5 za Vijolične. Na žalost vam te privzete nastavitve dajo bolj intenzivno barvo nižje štetje številk, kar ni vedno smiselno (in mi v tem primeru ne ustreza). To privzeto vedenje lahko spremenim z sortfill = TRUE za uporabo bolj intenzivne barve za višje vrednost.

vtree (mydata, "LanguageGroup", paleta = 3, sortfill = TRUE)

Sharon Machlis,

Če se vam zdi, da je temna barva težko brati besedilo, obstaja nekaj možnosti. Ena od možnosti je uporaba navaden argument, kot jevtree (mydata, "LanguageGroup", plain = TRUE). Druga možnost je, da namesto palete nastavite eno barvo polnila s pomočjo fillcolor argument, kot jevtree (mydata, LanguageGroup ", fillcolor =" # 99d8c9 ").

Če si želite ogledati dve spremenljivki v poročilu navzkrižnih tabel, preprosto dodajte ime drugega stolpca in paleto ali barvo, če ne želite privzete. Uporabite lahko navadno možnost ali določite dve paleti ali dve barvi. Spodaj sem namesto palet izbral določene barve, graf pa sem tudi zasukal, da sem bral navpično.

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

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

horiz = FALSE)

Sharon Machlis,

Dodate lahko več kot dve kategoriji, čeprav je z rastjo drevesa nekoliko težje brati in slediti. Če vas zanima samo nekaj med vejami lahko določite, katero želite prikazati z obdrži prepir. Spodaj sem nastavil vtree () prikazati samo ljudi, ki uporabljajo R brez Pythona ali ki uporabljajo R in Python.

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

horiz = FALSE, fillcolor = c (LanguageGroup = "# e7d4e8",

Spol = "# 99d8c9", konjiček = "# 9ecae1"),

obdrži = seznam (LanguageGroup = c ("R", "Oba")), showcount = FALSE)

Ker je drevo tako zasedeno, mislim, da pomaga bodisi grof ali odstotek kot oznake vozlišča, ne oboje. Torej zadnji argument v zgornji kodi, showcount = FALSE, nastavi graf tako, da prikaže samo odstotke in ne štetja.

Sharon Machlis,

Več štejte po možnostih skupine

Obstajajo še drugi uporabni načini za združevanje in štetje v R, vključno z osnovnim R, dplyr in data.table. Osnova R imaxtabs () deluje posebej za to nalogo. Spodaj upoštevajte sintakso formule: tilda in nato ena spremenljivka in druga spremenljivka.

xtabs (~ LanguageGroup + Gender, data = mydata)

Spol Jezik Skupina Moški Ženska Oba 3264 374 Niti 43908 3705 Python 29044 1940 R 969 175

dplyr's štetje () Funkcija združuje funkcije »razvrsti po« in »šteje vrstice v vsaki skupini« v eno samo funkcijo.

knjižnica (dplyr)

my_summary%

count (LanguageGroup, Gender, Hobbyist, sort = TRUE)

my_summary LanguageGroup Gender Hobbyist n 1 Niti moški Da 34419 2 Python Man Da 25093 3 Niti moški Ne 9489 4 Python Man Ne 3951 5 Oba moška Da 2807 6 Nobena ženska Da 2250 7 Niti ena ženska Ne 1455 8 Python Woman Da 1317 9 R Man Da 757 10 Python ženska št. 623 11 oba moška št. 457 12 obe ženski da 257 13 R moški št. 212 14 obe ženski št. 117 15 R ženska da 103 16 R ženska št. 72

V spodnje tri vrstice kode naložim paket data.table, iz svojih podatkov ustvarim data.table in nato uporabim posebno .N data.table simbol, ki pomeni število vrstic v skupini.

knjižnica (data.table)

mydt <- setDT (mydata)

mydt [, .N, avtor =. (LanguageGroup, Gender, Hobbyist)]

Vizualizacija z ggplot2

Kot pri večini podatkov je tudi ggplot2 dobra izbira za prikaz povzetih rezultatov. Prvi graf ggplot spodaj izriše LanguageGroup na osi X in število za vsako na osi Y. Barva polnila predstavlja, ali nekdo reče, da kodira kot hobi. In facet_wrap pravi: Naredite ločen graf za vsako vrednost v stolpcu Spol.

knjižnica (ggplot2)

ggplot (my_summary, aes (LanguageGroup, n, fill = Hobbyist)) +

geom_bar (stat = "identiteta") +

facet_wrap (facets = vars (Gender))

Sharon Machlis,

Ker je v vzorcu razmeroma malo žensk, je težko primerjati odstotke med spoloma, če oba grafa uporabljata isto lestvico osi Y. To pa lahko spremenim, tako da vsak graf uporablja ločeno lestvico z dodajanjem argumenta tehtnice = "brezplačno_y" do facet_wrap () funkcija:

ggplot (my_summary, aes (LanguageGroup, n, fill = Hobbyist)) +

geom_bar (stat = "identiteta") +

facet_wrap (facets = vars (Gender), scales = "free_y")

Zdaj je lažje primerjati več spremenljivk po spolu.

Če želite več nasvetov R, pojdite na stran »Naredite več z R« na seznamu predvajanja YouTube ali pa si oglejte »Naredi več z R«.

Za informacije o prenosu in prepiranju podatkov, uporabljenih v tej predstavitvi, glejte naslednjo stran.

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