Προγραμματισμός

Πώς να μετρήσετε ανά ομάδα στο R

Η μέτρηση από πολλές ομάδες - μερικές φορές ονομάζεται αναφορές διασταύρωσης - μπορεί να είναι ένας χρήσιμος τρόπος για την εξέταση δεδομένων που κυμαίνονται από έρευνες κοινής γνώμης έως ιατρικές εξετάσεις. Για παράδειγμα, πώς ψήφισαν οι άνθρωποι ανά φύλο και ηλικιακή ομάδα; Πόσοι προγραμματιστές λογισμικού χρησιμοποιούν R και Python είναι άνδρες εναντίον γυναικών;

Υπάρχουν πολλοί τρόποι για να κάνετε αυτό το είδος μέτρησης ανά κατηγορίες στο R. Εδώ, θα ήθελα να μοιραστώ μερικά από τα αγαπημένα μου.

Για τις επιδείξεις σε αυτό το άρθρο, θα χρησιμοποιήσω ένα υποσύνολο της έρευνας Stack Overflow Developers, η οποία ερευνά προγραμματιστές για δεκάδες θέματα που κυμαίνονται από μισθούς έως τεχνολογίες που χρησιμοποιούνται. Θα το μειώσω με στήλες για τις γλώσσες που χρησιμοποιούνται, το φύλο και αν κωδικοποιούν ως χόμπι. Πρόσθεσα επίσης τη δική μου στήλη LanguageGroup για το εάν ένας προγραμματιστής ανέφερε ότι χρησιμοποιεί R, Python, και τα δύο ή κανένα.

Αν θέλετε να ακολουθήσετε, η τελευταία σελίδα αυτού του άρθρου περιέχει οδηγίες σχετικά με τον τρόπο λήψης και σύγχυσης των δεδομένων για τη λήψη του ίδιου συνόλου δεδομένων που χρησιμοποιώ.

Τα δεδομένα έχουν μία σειρά για κάθε απόκριση έρευνας και οι τέσσερις στήλες είναι όλοι χαρακτήρες.

str (mydata) «data.frame»: 83379 obs. από 4 μεταβλητές: $ Gender: chr "Man" "Man" "Man" "Man" ... $ LanguageWorkedWith: chr "HTML / CSS; Java; JavaScript; Python" "C ++; HTML / CSS; Python" "HTML / CSS "" C; C ++; C #; Python; SQL "... $ Χόμπι: chr" Ναι "" Όχι "" Ναι "" Όχι "... $ LanguageGroup: chr" Python "" Python "" Ουτε "" Python "...

Φιλτράρισα τα ανεπεξέργαστα δεδομένα για να κάνω τα διασταύρωση πιο εύχρηστα, συμπεριλαμβανομένης της κατάργησης των τιμών που λείπουν και της λήψης μόνο των δύο μεγαλύτερων φύλων, Άνδρας και Γυναίκα.

Το πακέτο θυρωρών

Λοιπόν, ποια είναι η κατανομή των φύλων σε κάθε γλωσσική ομάδα; Για αυτόν τον τύπο αναφοράς σε ένα πλαίσιο δεδομένων, ένα από τα εργαλεία μετάβασής μου είναι το πακέτο θυρωρών tabyl () λειτουργία.

Το βασικό tabyl () Η συνάρτηση επιστρέφει ένα πλαίσιο δεδομένων με μετρήσεις. Το όνομα της πρώτης στήλης που προσθέτετε σε ένα tabyl () το επιχείρημα γίνεται το σειρά, και το δεύτερο το στήλη

βιβλιοθήκη (janitor) tabyl (mydata, Gender, LanguageGroup)

Φύλο και οι δύο Python R Man 3264 43908 29044 969 Γυναίκα 374 3705 1940 175

Τι είναι ωραίο tabyl () είναι επίσης πολύ εύκολο να δημιουργείς ποσοστά. Αν θέλετε να δείτε ποσοστά για κάθε στήλη αντί για ακατέργαστα σύνολα, προσθέστε adorn_percentages ("col"). Στη συνέχεια, μπορείτε να διοχετεύσετε αυτά τα αποτελέσματα σε μια λειτουργία μορφοποίησης όπωςadorn_pct_formatting ().

tabyl (mydata, Gender, LanguageGroup)%>%

adorn_percentages ("col")%>%

adorn_pct_formatting (ψηφία = 1)

Φύλο και οι δύο ούτε ο Python R Man 89,7% 92,2% 93,7% 84,7% Γυναίκα 10,3% 7,8% 6,3% 15,3%

Για να δείτε τα ποσοστά ανά σειρά, προσθέστε adorn_percentages ("σειρά")

Αν θέλετε να προσθέσετε μια τρίτη μεταβλητή, όπως το Hobbyist, αυτό είναι επίσης εύκολο.

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

adorn_percentages ("col")%>%

adorn_pct_formatting (ψηφία = 1)

Ωστόσο, είναι λίγο πιο δύσκολο να συγκρίνουμε οπτικά τα αποτελέσματα σε περισσότερα από δύο επίπεδα με αυτόν τον τρόπο. Αυτός ο κωδικός επιστρέφει a λίστα με ένα πλαίσιο δεδομένων για κάθε επιλογή τρίτου επιπέδου:

$ Όχι Φύλο Και οι δύο Python R Man 79,6% 86,7% 86,4% 74,6% Γυναίκα 20,4% 13,3% 13,6% 25,4% $ Ναι Φύλο και οι δύο Python R Man 91,6% 93,9% 95,0% 88,0% Γυναίκα 8,4% 6,1% 5,0% 12,0%

Το πακέτο CGPfunctions

Το πακέτο CGPfunctions αξίζει να δείτε μερικούς γρήγορους και εύκολους τρόπους οπτικοποίησης δεδομένων διασταύρωσης. Εγκαταστήστε το από το CRAN με το συνηθισμένο install.packages ("CGPfunctions").

Το πακέτο έχει δύο λειτουργίες ενδιαφέροντος για την εξέταση crosstabs: PlotXTabs () και PlotXTabs2 (). Αυτός ο κώδικας επιστρέφει γραφήματα ράβδων των δεδομένων (πρώτο γράφημα παρακάτω):

βιβλιοθήκη (CGPfunctions)

PlotXTabs (mydata)

Στιγμιότυπο από τον Sharon Machlis,

PlotXTabs2 (mydata) δημιουργεί ένα γράφημα με διαφορετική εμφάνιση και μερικές στατιστικές περιλήψεις (δεύτερο γράφημα στα αριστερά).

Εάν δεν χρειάζεστε ή θέλετε αυτές τις περιλήψεις, μπορείτε να τις καταργήσετε με results.subtitle = ΛΑΘΟΣ, όπωςPlotXTabs2 (mydata, LanguageGroup, Gender, results.subtitle = FALSE).

Στιγμιότυπο από τον Sharon Machlis,

PlotXTabs2 () έχει μερικές δεκάδες επιλογές ορίσματος, όπως τίτλος, λεζάντα, θρύλοι, χρωματικός συνδυασμός και ένας από τους τέσσερις τύπους γραφικών: πλευρά, στοίβα, μωσαϊκό ή τοις εκατό. Υπάρχουν επίσης επιλογές που είναι γνωστές στους χρήστες του ggplot2, όπως το ggtheme και η παλέτα. Μπορείτε να δείτε περισσότερες λεπτομέρειες στο αρχείο βοήθειας της συνάρτησης.

Το πακέτο vtree

Το πακέτο vtree δημιουργεί γραφικά για crosstabs σε αντίθεση με γραφήματα. Τρέχοντας το κύριο vtree () λειτουργία σε μία μεταβλητή, όπως

βιβλιοθήκη (vtree)

vtree (mydata, "LanguageGroup")

σας δίνει αυτή τη βασική απάντηση:

Sharon Machlis,

Δεν ενδιαφέρομαι για τις προεπιλογές χρωμάτων εδώ, αλλά μπορείτε να ανταλλάξετε μια παλέτα RColorBrewer. Το όρισμα παλέτας του vtree χρησιμοποιεί παλέτα αριθμοί, όχι ονόματα. μπορείτε να δείτε πώς αριθμούνται στην τεκμηρίωση του πακέτου vtree. Για παράδειγμα, θα μπορούσα να επιλέξω 3 για πράσινα και 5 για μωβ. Δυστυχώς, αυτές οι προεπιλογές σας δίνουν ένα πιο έντονο χρώμα για πιο χαμηλα μετράνε αριθμούς, κάτι που δεν έχει πάντα νόημα (και δεν λειτουργεί καλά για μένα σε αυτό το παράδειγμα). Μπορώ να αλλάξω αυτήν την προεπιλεγμένη συμπεριφορά με sortfill = TRUE για να χρησιμοποιήσετε το πιο έντονο χρώμα για το πιο ψηλά αξία.

vtree (mydata, "LanguageGroup", παλέτα = 3, sortfill = TRUE)

Sharon Machlis,

Εάν διαπιστώσετε ότι το σκούρο χρώμα καθιστά δύσκολη την ανάγνωση κειμένου, υπάρχουν ορισμένες επιλογές. Μια επιλογή είναι να χρησιμοποιήσετε το πεδιάδα επιχείρημα, όπωςvtree (mydata, "LanguageGroup", απλό = TRUE). Μια άλλη επιλογή είναι να ορίσετε ένα χρώμα πλήρωσης αντί για μια παλέτα, χρησιμοποιώντας το χρώμα γεμίσματος επιχείρημα, όπωςvtree (mydata, LanguageGroup ", fillcolor =" # 99d8c9 ").

Για να δείτε δύο μεταβλητές σε μια αναφορά διασταύρωσης, απλώς προσθέστε ένα όνομα στήλης και μια δεύτερη παλέτα ή χρώμα εάν δεν θέλετε την προεπιλογή. Μπορείτε να χρησιμοποιήσετε την απλή επιλογή ή να ορίσετε δύο παλέτες ή δύο χρώματα. Παρακάτω επέλεξα συγκεκριμένα χρώματα αντί για παλέτες και περιστράφηκα επίσης το γράφημα για ανάγνωση κάθετα.

vtree (mydata, c ("LanguageGroup", "Φύλο"),

fillcolor = c (LanguageGroup = "# e7d4e8", Φύλο = "# 99d8c9"),

horiz = FALSE)

Sharon Machlis,

Μπορείτε να προσθέσετε περισσότερες από δύο κατηγορίες, αν και γίνεται πιο δύσκολο να διαβάσετε και να ακολουθήσετε καθώς μεγαλώνει το δέντρο. Εάν σας ενδιαφέρει μόνο μερικοί των κλάδων, μπορείτε να καθορίσετε ποια θα εμφανίζονται με το διατήρηση διαφωνία. Παρακάτω, έβαλα vtree () για να δείξετε μόνο άτομα που χρησιμοποιούν R χωρίς Python ή που χρησιμοποιούν και R και Python.

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

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

Φύλο = "# 99d8c9", Hobbyist = "# 9ecae1"),

keep = list (LanguageGroup = c ("R", "Και τα δύο")), showcount = FALSE)

Με το δέντρο να είναι τόσο απασχολημένο, νομίζω ότι βοηθάει να έχουμε είτε το μέτρημα ή το ποσοστό ως ετικέτες κόμβου και όχι και τα δύο. Αυτό το τελευταίο επιχείρημα στον παραπάνω κώδικα, showcount = ΛΑΘΟΣ, ορίζει το γράφημα ώστε να εμφανίζει μόνο ποσοστά και όχι μετρήσεις.

Sharon Machlis,

Περισσότερες μετρήσεις ανά επιλογές ομάδας

Υπάρχουν και άλλοι χρήσιμοι τρόποι ομαδοποίησης και μέτρησης στο R, όπως η βάση R, το dplyr και το data.table. Η βάση R έχει τοxtabs () λειτουργούν ειδικά για αυτήν την εργασία. Σημειώστε τη σύνταξη τύπου παρακάτω: ένα tilde και μετά μία μεταβλητή συν μια άλλη μεταβλητή.

xtabs (~ LanguageGroup + Gender, data = mydata)

Γλώσσα φύλου Ομάδα ανδρών και γυναικών 3264 374 Ούτε 43908 3705 Python 29044 1940 R 969 175

dplyr's μετρώ() Η συνάρτηση συνδυάζει "ομάδα κατά" και "μέτρηση σειρών σε κάθε ομάδα" σε μία μόνο συνάρτηση.

βιβλιοθήκη (dplyr)

my_summary%

μέτρηση (LanguageGroup, Gender, Hobbyist, sort = TRUE)

my_summary LanguageGroup Φύλο Χόμπι n 1 Κανένας άντρας Ναι 34419 2 Python Man Ναι 25093 3 Κανένας άντρας Όχι 9489 4 Python Man Όχι 3951 5 Και οι δύο άνδρες Ναι 2807 6 Ούτε Γυναίκα Ναι 2250 7 Ούτε Γυναίκα Όχι 1455 8 Γυναίκα Python Ναι 1317 9 R Άντρας Ναι 757 10 Python Γυναίκα Όχι 623 11 Και οι δύο άντρες Όχι 457 12 Και οι δύο γυναίκες Ναι 257 13 R Άνδρας Όχι 212 14 Και οι δύο γυναίκες Όχι 117 15 R Γυναίκα Ναι 103 16 R Γυναίκα Όχι 72

Στις τρεις γραμμές κώδικα παρακάτω, φορτώνω το πακέτο data.table, δημιουργώ ένα data.table από τα δεδομένα μου και μετά χρησιμοποιώ το ειδικό σύμβολο data.table που σημαίνει τον αριθμό σειρών σε μια ομάδα.

βιβλιοθήκη (data.table)

mydt <- setDT (mydata)

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

Οπτικοποίηση με ggplot2

Όπως με τα περισσότερα δεδομένα, το ggplot2 είναι μια καλή επιλογή για να απεικονίσετε συνοπτικά αποτελέσματα. Το πρώτο γράφημα ggplot παρακάτω απεικονίζει το LanguageGroup στον άξονα X και το πλήθος για κάθε έναν στον άξονα Υ. Το χρώμα πλήρωσης αντιπροσωπεύει εάν κάποιος λέει ότι κωδικοποιεί ως χόμπι. Και, το facet_wrap λέει: Δημιουργήστε ένα ξεχωριστό γράφημα για κάθε τιμή στη στήλη Φύλο.

βιβλιοθήκη (ggplot2)

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

geom_bar (stat = "ταυτότητα") +

facet_wrap (facets = vars (Φύλο))

Sharon Machlis,

Επειδή υπάρχουν σχετικά λίγες γυναίκες στο δείγμα, είναι δύσκολο να συγκριθούν τα ποσοστά μεταξύ των φύλων όταν και τα δύο γραφήματα χρησιμοποιούν την ίδια κλίμακα άξονα Υ. Μπορώ όμως να το αλλάξω, έτσι ώστε κάθε γράφημα να χρησιμοποιεί ξεχωριστή κλίμακα, προσθέτοντας το όρισμα κλίμακες = "free_y" στο facet_wrap () λειτουργία:

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

geom_bar (stat = "ταυτότητα") +

facet_wrap (facets = vars (Gender), κλίμακες = "free_y")

Τώρα είναι ευκολότερο να συγκρίνετε πολλές μεταβλητές ανά φύλο.

Για περισσότερες συμβουλές R, μεταβείτε στη σελίδα "Do More With R" ή δείτε τη λίστα αναπαραγωγής YouTube "Do More With R".

Δείτε την επόμενη σελίδα για πληροφορίες σχετικά με τον τρόπο λήψης και αντιμετώπισης δεδομένων που χρησιμοποιούνται σε αυτήν την επίδειξη.