Programmēšana

Kā saskaitīt pēc grupas R

Skaitīšana pa vairākām grupām - dažreiz to sauc arī par starpposma ziņojumiem - var būt noderīgs veids, kā aplūkot datus, sākot no sabiedriskās domas aptaujām līdz medicīniskām pārbaudēm. Piemēram, kā cilvēki balsoja pēc dzimuma un vecuma grupas? Cik programmatūras izstrādātāju, kas izmanto gan R, gan Python, ir vīrieši pret sievietēm?

Ir daudz veidu, kā veikt šādu skaitīšanu pēc kategorijām R. Šeit es vēlētos padalīties ar dažiem saviem izlases veidiem.

Šajā rakstā redzamajām demonstrācijām es izmantošu apakškopu Stack Overflow Developers aptaujā, kurā izstrādātāji tiek aptaujāti par desmitiem tēmu, sākot no algām līdz izmantotajām tehnoloģijām. Es to satricināšu ar kolonnām par izmantotajām valodām, dzimumu un, ja tās tiek kodētas kā vaļasprieks. Es arī pievienoju savu LanguageGroup kolonnu, lai noskaidrotu, vai izstrādātājs ziņoja, izmantojot R, Python, abus vai nevienu.

Ja vēlaties sekot līdzi, šī raksta pēdējā lappusē ir sniegti norādījumi par datu lejupielādi un apkarošanu, lai iegūtu to pašu datu kopu, kuru izmantoju.

Datos katrai aptaujas atbildei ir viena rinda, un četrās kolonnās ir visas rakstzīmes.

str (mydata) 'data.frame': 83379 obs. no 4 mainīgajiem: $ Dzimums: chr "Man" "Man" "Man" "Man" ... $ LanguageWorkedWith: chr "HTML / CSS; Java; JavaScript; Python" "C ++; HTML / CSS; Python" "HTML / CSS "" C; C ++; C #; Python; SQL "... $ Hobijs: chr" Jā "" Nē "" Jā "" Nē "... $ LanguageGroup: chr" Python "" Python "" Ne "" "Python "...

Es izfiltrēju neapstrādātus datus, lai padarītu krustdēlus vieglāk pārvaldāmus, tostarp noņemot trūkstošās vērtības un ņemot tikai divus lielākos dzimumus - vīrieti un sievieti.

Sētnieka paka

Tātad, kāds ir dzimumu sadalījums katrā valodu grupā? Šāda veida ziņojumiem datu ietvarā viens no maniem rīkiem ir sētnieku pakete tabila () funkciju.

Pamata tabila () funkcija atgriež datu rāmi ar skaitļiem. Pirmais slejas nosaukums, ko pievienojat a tabila () arguments kļūst par rinda, un otrais kolonna

bibliotēka (sētnieks) tabyl (mydata, Gender, LanguageGroup)

Dzimums Gan Ne viens, ne otrs Python R Man 3264 43908 29044 969 Sieviete 374 3705 1940 175

Kas ir jauki tabila () vai arī ir ļoti viegli ģenerēt procentus. Ja vēlaties neapstrādātas kopsummas vietā redzēt katras kolonnas procentus, pievienojiet adorn_percentages ("col"). Pēc tam šos rezultātus varat ievietot formatēšanas funkcijā, piemēram,adorn_pct_formatting ().

tabula (mydata, Gender, LanguageGroup)%>%

adorn_percentages ("col")%>%

adorn_pct_formatting (cipari = 1)

Dzimums abi nav Python R Man 89,7% 92,2% 93,7% 84,7% Sieviete 10,3% 7,8% 6,3% 15,3%

Lai redzētu procentus pēc rindas, pievienojiet adorn_percentages ("rinda")

Ja vēlaties pievienot trešo mainīgo, piemēram, Hobbyist, tas ir arī viegli.

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

adorn_percentages ("col")%>%

adorn_pct_formatting (cipari = 1)

Tomēr vizuāli salīdzināt rezultātus vairāk nekā divos līmeņos šādā veidā kļūst nedaudz grūtāk. Šis kods atgriež a sarakstā ar vienu datu rāmi katrai trešā līmeņa izvēlei:

$ Nē Dzimums Abi Nav Python R Man 79,6% 86,7% 86,4% 74,6% Sieviete 20,4% 13,3% 13,6% 25,4% $ Jā Dzimums abiem Neviens nav Python R Man 91,6% 93,9% 95,0% 88,0% Sieviete 8,4% 6.1% 5.0% 12.0%

CGPfunctions pakete

CGPfunctions pakete ir vērts apskatīt dažus ātrus un vienkāršus veidus, kā vizualizēt šķērssienu datus. Instalējiet to no CRAN ar parasto install.packages ("CGPfunctions").

Paketei ir divas interesantas funkcijas, lai pārbaudītu krustojumus. PlotXTabs () un PlotXTabs2 (). Šis kods atgriež datu joslu diagrammas (pirmā diagramma zemāk):

bibliotēka (CGPfunctions)

PlotXTabs (mydata)

Ekrānuzņēmums: Sharon Machlis,

PlotXTabs2 (mydata) izveido grafiku ar atšķirīgu izskatu un dažus statistikas kopsavilkumus (otrais grafiks pa kreisi).

Ja šie kopsavilkumi nav nepieciešami vai vēlaties, varat tos noņemt, izmantojot results.subtitle = FALSE, piemēram,PlotXTabs2 (mydata, LanguageGroup, Gender, results.subtitle = FALSE).

Ekrānuzņēmums: Sharon Machlis,

PlotXTabs2 () ir pāris desmiti argumentu iespēju, tostarp nosaukums, paraksts, leģendas, krāsu shēma un viens no četriem sižeta veidiem: sānu, kaudze, mozaīka vai procenti. Ir arī ggplot2 lietotājiem pazīstamas opcijas, piemēram, ggtheme un palete. Sīkāku informāciju varat skatīt funkcijas palīdzības failā.

Vtree pakete

Vtree pakotne rada grafika šķērsrāmjiem, nevis grafikiem. Skrienot galveno vtree () funkcija uz vienu mainīgo, piemēram,

bibliotēka (vtree)

vtree (mydata, "LanguageGroup")

sniedz jums šo pamata atbildi:

Sharon Machlis,

Es šeit neesmu ieinteresēts noklusējuma krāsās, bet jūs varat nomainīt RColorBrewer paleti. vtree paletes argumentā tiek izmantota palete numuri, nevis vārdi; vtree pakotnes dokumentācijā varat redzēt, kā tie ir numurēti. Es varētu izvēlēties, piemēram, 3 zaļajiem un 5 violetajiem. Diemžēl šie noklusējumi piešķir jums intensīvāku krāsu zemāks skaitīt skaitļus, kas ne vienmēr ir jēga (un man šajā piemērā nedarbojas labi). Es varu mainīt šo noklusējuma uzvedību ar sortfill = TRUE izmantot intensīvāku krāsu augstāk vērtība.

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

Sharon Machlis,

Ja jums šķiet, ka tumšā krāsa apgrūtina teksta lasīšanu, ir dažas iespējas. Viena no iespējām ir izmantot vienkāršs arguments, piemēram,vtree (mydata, "LanguageGroup", vienkāršs = TRUE). Vēl viena iespēja ir iestatīt vienu aizpildījuma krāsu paletes vietā, izmantojot fillcolor arguments, piemēram,vtree (mydata, LanguageGroup ", fillcolor =" # 99d8c9 ").

Lai aplūkotu divus mainīgos krustkartes pārskatā, vienkārši pievienojiet otro kolonnas nosaukumu un paleti vai krāsu, ja nevēlaties noklusējumu. Varat izmantot parasto opciju vai norādīt divas paletes vai divas krāsas. Zemāk paletes vietā izvēlējos konkrētas krāsas, un es arī pagriezu diagrammu, lai lasītu vertikāli.

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

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

horiz = FALSE)

Sharon Machlis,

Jūs varat pievienot vairāk nekā divas kategorijas, lai arī kokam augot ir mazliet grūtāk lasīt un sekot. Ja jūs interesē tikai daži no filiālēm varat norādīt, kuru rādīt ar paturēt arguments. Zemāk es iestatīju vtree () parādīt tikai cilvēkus, kuri lieto R bez Python vai kuri izmanto gan R, gan Python.

vtree (mydata, c ("Dzimums", "Valodu grupa", "Hobijs"),

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

Dzimums = "# 99d8c9", Hobijs = "# 9ecae1"),

keep = saraksts (LanguageGroup = c ("R", "Abi")), showcount = FALSE)

Tā kā koks kļūst tik aizņemts, es domāju, ka tas palīdz arī skaits vai procenti kā mezglu etiķetes, nevis abi. Tātad pēdējais arguments iepriekšējā kodā showcount = FALSE, grafikā iestata tikai procentus, bet ne skaitījumus.

Sharon Machlis,

Vairāk skaita pēc grupas opcijām

Ir arī citi noderīgi veidi, kā grupēt un skaitīt R, ieskaitot pamatu R, dplyr un data.table. Bāzei R irxtabs () funkcija tieši šim uzdevumam. Ievērojiet zemāk esošo formulas sintaksi: tilde un pēc tam viens mainīgais plus vēl viens mainīgais.

xtabs (~ LanguageGroup + Gender, data = mydata)

Dzimuma valoda Grupa Vīrietis Sieviete Abi 3264 374 Ne 43908 3705 Python 29044 1940 R 969 175

dplyr's skaitīt () funkcija apvieno “grupēt pēc” un “rindu skaitīšanu katrā grupā” vienā funkcijā.

bibliotēka (dplyr)

my_summary%

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

my_summary LanguageGroup Dzimuma hobijs n 1 Neviens vīrietis Jā 34419 2 Python Man Jā 25093 3 Neviens vīrietis Nē 9489 4 Python Man Nē 3951 5 Abi Vīrietis Jā 2807 6 Neviena sieviete Jā 2250 7 Neviena sieviete nē 1455 8 Python sieviete Jā 1317 9 R Vīrietis Jā 757 10 Sieviete Python Nē 623 11 Abi Vīrieši Nē 457 12 Abas Sievietes Jā 257 13 R Vīrietis Nē 212 14 Abas Sievietes Nē 117 15 R Sieviete Jā 103 16 R Sieviete Nē 72

Trīs zemāk redzamajās koda rindiņās es ielādēju paketi data.table, izveidoju no maniem datiem data.table un pēc tam izmantoju īpašo .N data.table simbols, kas apzīmē rindu skaitu grupā.

bibliotēka (data.table)

mydt <- setDT (mydata)

mydt [, .N, autors =. (Valodu grupa, dzimums, hobijs)]

Vizualizēšana ar ggplot2

Tāpat kā lielākajai daļai datu, arī ggplot2 ir laba izvēle apkopoto rezultātu vizualizēšanai. Pirmajā ggplot diagrammā zem X ass tiek attēlota LanguageGroup un katra Y skaitlis. Aizpildīšanas krāsa norāda, vai kāds saka, ka kodē kā hobiju. Un, facet_wrap saka: Kolonnā Dzimums katrai vērtībai izveidojiet atsevišķu diagrammu.

bibliotēka (ggplot2)

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

geom_bar (stat = "identitāte") +

facet_wrap (facets = vars (dzimums))

Sharon Machlis,

Tā kā izlasē ir salīdzinoši maz sieviešu, ir grūti salīdzināt dzimumu procentus, ja abos grafikos tiek izmantota viena Y ass skala. Tomēr es to varu mainīt, tāpēc katrā diagrammā tiek izmantota atsevišķa skala, pievienojot argumentu svari = “free_y” uz facet_wrap () funkcija:

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

geom_bar (stat = "identitāte") +

facet_wrap (facets = vars (dzimums), svari = "free_y")

Tagad ir vieglāk salīdzināt vairākus mainīgos pēc dzimuma.

Lai iegūtu vairāk R padomu, dodieties uz “Do More With R” lapu vai skatiet YouTube atskaņošanas sarakstu “Do More With R”.

Skatiet nākamo lapu, lai uzzinātu vairāk par to, kā lejupielādēt un apkarot šajā demonstrācijā izmantotos datus.

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