Programovanie

Ako počítať podľa skupiny v R.

Počítanie podľa viacerých skupín - niekedy sa nazýva krížové správy - môže byť užitočným spôsobom, ako sa pozrieť na údaje od prieskumov verejnej mienky po lekárske testy. Ako napríklad hlasovali ľudia podľa pohlavia a vekovej skupiny? Koľko vývojárov softvéru, ktorí používajú programy R aj Python, sú muži vs. ženy?

Existuje veľa spôsobov, ako tento druh počítania podľa kategórií v R. Urobiť to, rád by som sa podelil o niektoré svoje obľúbené položky.

Na ukážky v tomto článku použijem podmnožinu prieskumu Stack Overflow Developers, ktorý skúma vývojárov na desiatky tém od platov po použité technológie. Zúžim to stĺpcami pre použité jazyky, pohlavie a ak sa kódujú ako koníček. Tiež som pridal svoj vlastný stĺpec LanguageGroup, či vývojár nahlásil použitie R, Python, oboch alebo žiadneho.

Ak by ste chceli pokračovať, na poslednej stránke tohto článku nájdete pokyny, ako stiahnuť a usporiadať údaje, aby ste získali rovnakú množinu údajov, ktorú používam.

Údaje majú pre každú odpoveď na prieskum jeden riadok a všetky štyri stĺpce tvoria všetky znaky.

str (mydata) 'data.frame': 83379 obs. zo 4 premenných: $ Pohlavie: chr "Man" "Man" "Man" "Man" ... $ LanguageWorkedWith: chr "HTML / CSS; Java; JavaScript; Python" "C ++; HTML / CSS; Python" "HTML / CSS "" C; C ++; C #; Python; SQL "... $ Fanda: chr" Áno "" Nie "" Áno "" Nie "... $ Jazyková skupina: chr" Python "" Python "" Ani "" Python „...

Filtroval som nespracované údaje, aby boli krížové tabuľky lepšie zvládnuteľné, vrátane odstránenia chýbajúcich hodnôt a prevzatia iba dvoch najväčších pohlaví, muža a ženy.

Balík školníka

Aké je teda rozdelenie pohlaví podľa jednotlivých jazykových skupín? Pre tento typ prehľadov v dátovom rámci je jedným z mojich nástrojov go-to balíček správcu tabyl () funkcia.

Základ tabyl () funkcia vráti dátový rámec s počtami. Prvý názov stĺpca, ktorý pridáte do a tabyl () argumentom sa stáva riadoka druhý stĺpec

knižnica (správca) tabyl (mydata, Gender, LanguageGroup)

Pohlavie Obaja Ani Python R Muž 3264 43908 29044 969 Žena 374 3705 1940 175

Čo je pekné tabyl () je tiež veľmi ľahké generovať percentá. Ak chcete zobraziť percentá pre každý stĺpec namiesto surových súčtov, pridajte adorn_percentages ("col"). Tieto výsledky potom môžete prepojiť s funkciou formátovania, ako je napradorn_pct_formatting ().

tabyl (mydata, pohlavie, jazyková skupina)%>%

adorn_percentages ("col")%>%

adorn_pct_formatting (číslice = 1)

Pohlavie Obaja Ani Python R Muž 89,7% 92,2% 93,7% 84,7% Žena 10,3% 7,8% 6,3% 15,3%

Ak chcete zobraziť percentá za riadkom, pridajte adorn_percentages ("riadok")

Ak chcete pridať tretiu premennú, napríklad Hobbyist, je to tiež jednoduché.

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

adorn_percentages ("col")%>%

adorn_pct_formatting (číslice = 1)

Takto je však o niečo ťažšie vizuálne porovnať výsledky vo viac ako dvoch úrovniach. Tento kód vracia a zoznam s jedným dátovým rámcom pre každú voľbu tretej úrovne:

$ Nie Pohlavie Oba Ani Python R Muž 79,6% 86,7% 86,4% 74,6% Žena 20,4% 13,3% 13,6% 25,4% $ Áno Pohlavie Oba Ani Python R Muž 91,6% 93,9% 95,0% 88,0% Žena 8,4% 6,1% 5,0% 12,0%

Balík CGPfunctions

Balík CGPfunctions stojí za to vyhľadať niekoľko rýchlych a ľahkých spôsobov vizualizácie údajov krížovej tabuľky. Nainštalujte ho z aplikácie CRAN obvyklým spôsobom install.packages ("CGPfunctions").

Balík má dve zaujímavé funkcie na skúmanie krížových značiek: PlotXTabs () a PlotXTabs2 (). Tento kód vracia stĺpcové grafy údajov (prvý graf nižšie):

knižnica (CGPfunctions)

PlotXTabs (mydata)

Snímka obrazovky Sharon Machlis,

PlotXTabs2 (mydata) vytvorí graf s iným vzhľadom a niekoľkými štatistickými súhrnmi (druhý graf vľavo).

Ak tieto súhrny nepotrebujete alebo nechcete, môžete ich pomocou nich odstrániť results.subtitle = FALSE, ako naprPlotXTabs2 (mydata, LanguageGroup, Gender, results.subtitle = FALSE).

Snímka obrazovky Sharon Machlis,

PlotXTabs2 () má niekoľko desiatok možností argumentov vrátane názvu, titulku, legiend, farebnej schémy a jedného zo štyroch typov vykreslenia: strana, stoh, mozaika alebo percentá. K dispozícii sú tiež možnosti známe používateľom ggplot2, napríklad ggtheme a palette. Viac podrobností nájdete v súbore pomoci tejto funkcie.

Balík vtree

Balík vtree sa generuje grafika pre krížové tabuľky na rozdiel od grafov. Spustenie hlavnej vtree () funkcia na jednej premennej, ako napr

knižnica (vtree)

vtree (mydata, "LanguageGroup")

dostane túto základnú odpoveď:

Sharon Machlis,

Tu sa príliš nezaujímam o predvolené farby, ale môžete ich vymeniť v palete RColorBrewer. Argument palety vtree používa paletu čísla, nie mená; ich číslovanie vidíte v dokumentácii balíka vtree. Mohol by som zvoliť napríklad 3 pre Zelených a 5 pre Purpurové. Tieto predvolené hodnoty vám, bohužiaľ, dodajú intenzívnejšiu farbu nižšie počítať čísla, čo nie vždy dáva zmysel (a v tomto príklade to pre mňa nefunguje dobre). Toto predvolené správanie môžem zmeniť pomocou sortfill = TRUE použiť intenzívnejšiu farbu pre vyššie hodnotu.

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

Sharon Machlis,

Ak zistíte, že tmavá farba sťažuje čítanie textu, existuje niekoľko možností. Jednou z možností je použiť prostý argument, ako naprvtree (mydata, "LanguageGroup", plain = TRUE). Ďalšou možnosťou je nastaviť jednu farbu výplne namiesto palety pomocou klávesu fillcolor argument, ako naprvtree (mydata, LanguageGroup ", fillcolor =" # 99d8c9 ").

Ak sa chcete pozrieť na dve premenné v prehľade krížovej tabuľky, jednoducho pridajte názov druhého stĺpca a paletu alebo farbu, ak nechcete predvolenú hodnotu. Môžete použiť voľbu obyčajný alebo určiť dve palety alebo dve farby. Nižšie som vybral konkrétne farby namiesto palet a taktiež som otáčal graf, aby som čítal zvislo.

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

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

Horiz = FALSE)

Sharon Machlis,

Môžete pridať viac ako dve kategórie, aj keď s rastom stromu je to o niečo ťažšie čítať a sledovať. Ak vás zaujíma iba niektoré z vetiev môžete určiť, ktoré sa majú zobraziť pomocou zachovať argument. Dole som nastavil vtree () zobraziť iba ľudí, ktorí používajú R bez Pythonu alebo ktorí používajú R aj Python.

vtree (mydata, c ("Pohlavie", "Jazyková skupina", "Fandenie"),

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

Pohlavie = "# 99d8c9", Kino = "# 9ecae1"),

keep = list (LanguageGroup = c ("R", "Both")), showcount = FALSE)

Keď je strom tak zaneprázdnený, myslím si, že je dobré mať ho buď počet alebo percento ako štítky uzlov, nie obidve. Takže posledný argument v kóde vyššie, showcount = FALSE, nastaví graf tak, aby zobrazoval iba percentá a nie počty.

Sharon Machlis,

Viac sa počíta podľa možností skupiny

Existujú ďalšie užitočné spôsoby zoskupovania a počítania v R, vrátane tabuľky base R, dplyr a data.table. Základňa R máxtabs () funkcie špeciálne pre túto úlohu. Všimnite si nižšie uvedenú syntax vzorca: vlnovku a potom jednu premennú plus ďalšiu premennú.

xtabs (~ LanguageGroup + Gender, data = mydata)

Pohlavie Jazyk Skupina Muž Žena Obaja 3264 374 Ani 43908 3705 Python 29044 1940 R 969 175

dplyr’s count () kombinuje funkcie „zoskupiť podľa“ a „spočítať riadky v každej skupine“ do jednej funkcie.

knižnica (dplyr)

my_summary%

počet (LanguageGroup, Gender, Hobbyist, sort = TRUE)

my_summary LanguageGroup Gender Hobbyist n 1 Ani muž Áno 34419 2 Python muž Áno 25093 3 Ani muž nie 9489 4 Python muž nie 3951 5 obaja muži Áno 2807 6 ani žena áno 2250 7 ani žena nie 1455 8 žena v Pythone áno 1317 9 R muž áno 757 10 Žena z Pythonu Nie 623 11 Obaja muži Nie 457 12 Obaja ženy Áno 257 13 R Muž Nie 212 14 Obaja ženy Nie 117 15 R Žena Áno 103 16 R Žena Nie 72

V troch riadkoch kódu nižšie načítam balík data.table, z mojich údajov vytvorím data.table a potom použijem špeciálny .N symbol tabuľky údajov, ktorý predstavuje počet riadkov v skupine.

knižnica (data.table)

mydt <- setDT (mydata)

mydt [, .N, podľa =. (LanguageGroup, Gender, Hobbyist)]

Vizualizácia pomocou ggplot2

Rovnako ako väčšina údajov, aj ggplot2 je dobrou voľbou na vizualizáciu súhrnných výsledkov. Prvý graf ggplot uvedený nižšie vykresľuje LanguageGroup na osi X a počet pre každú na osi Y. Farba výplne predstavuje, či niekto hovorí, že kóduje ako hobby. A facet_wrap hovorí: Vytvorte samostatný graf pre každú hodnotu v stĺpci Pohlavie.

knižnica (ggplot2)

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

geom_bar (stat = "identita") +

facet_wrap (facets = vars (Pohlavie))

Sharon Machlis,

Pretože vo vzorke je relatívne málo žien, je ťažké porovnávať percentuálne podiely medzi pohlaviami, keď obidva grafy používajú rovnakú mierku na osi Y. Môžem to však zmeniť, takže každý graf používa samostatnú mierku pridaním argumentu scales = “free_y” do facet_wrap () funkcia:

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

geom_bar (stat = "identita") +

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

Teraz je jednoduchšie porovnať viac premenných podľa pohlavia.

Ďalšie tipy R nájdete na stránke „Do More With R“ na stránke YouTube alebo v zozname videí „Do More With R“.

Na nasledujúcej stránke nájdete informácie o tom, ako sťahovať a meniť dáta použité v tejto ukážke.

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