Ποια γλώσσα να επιλέξετε για εργασία με δεδομένα - R ή Python; Και τα δυο! Μετανάστευση από τα πάντα στο τακτοποιημένο και data.table και πίσω

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

Ποια γλώσσα να επιλέξετε για εργασία με δεδομένα - R ή Python; Και τα δυο! Μετανάστευση από τα πάντα στο τακτοποιημένο και data.table και πίσω

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

Στην πορεία του άρθρου, θα αναλύσουμε τη σύνταξη των πιο δημοφιλών πακέτων στο R. Αυτά είναι τα πακέτα που περιλαμβάνονται στη βιβλιοθήκη tidyverse, καθώς και ένα πακέτο data.table. Και ας συγκρίνουμε τη σύνταξή τους με pandas, το πιο δημοφιλές πακέτο ανάλυσης δεδομένων στην Python.

Θα προχωρήσουμε βήμα προς βήμα σε ολόκληρη τη διαδρομή της ανάλυσης δεδομένων από τη φόρτωσή τους έως την εκτέλεση αναλυτικών συναρτήσεων και συναρτήσεων παραθύρου χρησιμοποιώντας Python και R.

περιεχόμενο

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

Ποια γλώσσα να επιλέξετε για εργασία με δεδομένα - R ή Python; Και τα δυο! Μετανάστευση από τα πάντα στο τακτοποιημένο και data.table και πίσω

  1. Βασικές Συντακτικές Διαφορές σε R και Python
    1.1. Πρόσβαση στις λειτουργίες του πακέτου
    1.2. ΑΝΑΘΕΣΗ ΕΡΓΑΣΙΑΣ
    1.3. Ευρετηρίαση
    1.4. Μέθοδοι και OOP
    1.5. Σωληνώσεις
    1.6. ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ
  2. Λίγα λόγια για τα πακέτα που θα χρησιμοποιήσουμε
    2.1. τακτοποιημένος
    2.2. πίνακας δεδομένων
    2.3. Πάντα
  3. Εγκατάσταση πακέτων
  4. Τα δεδομένα φορτώνονται
  5. Δημιουργία πλαισίων δεδομένων
  6. Επιλέγοντας τις επιθυμητές στήλες
  7. Φιλτράρισμα σειρών
  8. Ομαδοποίηση και συνάθροιση
  9. Κατακόρυφη σύνδεση πίνακα (UNION)
  10. Οριζόντια ένωση πίνακα (JOIN)
  11. Βασικές συναρτήσεις παραθύρου και υπολογισμένες στήλες
  12. Πίνακας αντιστοιχίας μεταξύ μεθόδων επεξεργασίας δεδομένων σε R και Python
  13. Συμπέρασμα
  14. Μια σύντομη έρευνα σχετικά με το πακέτο που χρησιμοποιείτε

Αν σας ενδιαφέρει η ανάλυση δεδομένων, ίσως βρείτε το δικό μου τηλεγράφημα и YouTube καναλιών. Το μεγαλύτερο μέρος του περιεχομένου του οποίου είναι αφιερωμένο στη γλώσσα R.

Βασικές Συντακτικές Διαφορές σε R και Python

Για να διευκολύνετε τη μετάβαση από Python σε R ή το αντίστροφο, ακολουθούν μερικά βασικά σημεία στα οποία πρέπει να προσέξετε.

Πρόσβαση στις λειτουργίες του πακέτου

Μόλις φορτωθεί ένα πακέτο στο R, δεν χρειάζεται να καθορίσετε το όνομα του πακέτου για να αποκτήσετε πρόσβαση στις λειτουργίες του. Στις περισσότερες περιπτώσεις αυτό δεν είναι αποδεκτό στο R, αλλά είναι αποδεκτό. Δεν χρειάζεται να εισαγάγετε καθόλου ένα πακέτο εάν χρειάζεστε μια από τις συναρτήσεις του στον κώδικά σας, αλλά απλώς καλέστε το καθορίζοντας το όνομα του πακέτου και το όνομα της συνάρτησης. Το διαχωριστικό μεταξύ του ονόματος πακέτου και του ονόματος της συνάρτησης στο R είναι διπλή άνω και κάτω τελεία. package_name::function_name().

Στην Python, αντίθετα, η κλασική προσέγγιση είναι η πρόσβαση στις συναρτήσεις του πακέτου προσδιορίζοντας ρητά το όνομά του. Κατά τη φόρτωση ενός πακέτου, του δίνεται συνήθως ένα συντομευμένο όνομα, για παράδειγμα για pandas συνήθως χρησιμοποιείται ψευδώνυμο pd. Η πρόσβαση στη λειτουργία πακέτου γίνεται μέσω μιας κουκκίδας package_name.function_name().

ΑΝΑΘΕΣΗ ΕΡΓΑΣΙΑΣ

Στο R, είναι σύνηθες να χρησιμοποιείτε ένα βέλος για να εκχωρήσετε μια τιμή σε ένα αντικείμενο. obj_name <- value, αν και επιτρέπεται επίσης ένα μεμονωμένο σύμβολο ίσου, το μοναδικό σύμβολο ίσου στο R χρησιμοποιείται κυρίως για τη μεταβίβαση τιμών σε ορίσματα συνάρτησης.

Στην Python, η ανάθεση γίνεται αποκλειστικά με ένα μόνο σύμβολο ίσου. obj_name = value.

Ευρετηρίαση

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

Στην Python, η ευρετηρίαση ξεκινά από το μηδέν και η επιλεγμένη περιοχή δεν περιλαμβάνει το τελευταίο στοιχείο που καθορίζεται στην ευρετηρίαση. Ο σχεδιασμός λοιπόν x[i:j] στην Python δεν θα περιλαμβάνει το στοιχείο j.

Υπάρχουν επίσης διαφορές στην αρνητική ευρετηρίαση, στο R ο συμβολισμός x[-1] θα επιστρέψει όλα τα στοιχεία του διανύσματος εκτός από το τελευταίο. Στην Python, μια παρόμοια σημείωση θα επέστρεφε μόνο το τελευταίο στοιχείο.

Μέθοδοι και OOP

Το R έχει τη δική του εφαρμογή του OOP, έγραψα για αυτό στο άρθρο "OOP in R (μέρος 1): τάξεις S3". Σε γενικές γραμμές, η R είναι μια λειτουργική γλώσσα και τα πάντα σε αυτό είναι χτισμένα σε συναρτήσεις. Επομένως, για παράδειγμα, για χρήστες Excel, μεταβείτε σε tydiverse θα είναι πιο εύκολο από το pandas. Αν και αυτή μπορεί να είναι η υποκειμενική μου άποψη.

Εν ολίγοις, τα αντικείμενα στο R δεν έχουν μεθόδους (αν μιλάμε για κλάσεις S3, αλλά υπάρχουν και άλλες υλοποιήσεις OOP που είναι πολύ λιγότερο κοινές). Υπάρχουν μόνο γενικευμένες συναρτήσεις που τις επεξεργάζονται διαφορετικά ανάλογα με την κλάση του αντικειμένου.

Σωληνώσεις

Ίσως αυτό είναι το όνομα για pandas Δεν θα είναι απολύτως σωστό, αλλά θα προσπαθήσω να εξηγήσω το νόημα.

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

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

temp_object <- func1()
temp_object2 <- func2(temp_object )
obj <- func3(temp_object2 )

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

Ή ακόμα χειρότερα, αλλά πιο οικεία στους χρήστες του Excel.

obj  <- func3(func2(func1()))

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

Θα εξετάσουμε διάφορες προσεγγίσεις για την επεξεργασία δεδομένων στο R, και εκτελούν παρόμοιες λειτουργίες με διαφορετικό τρόπο.

Σωληνώσεις στη βιβλιοθήκη tidyverse υλοποιούνται από τον χειριστή %>%.

obj <- func1() %>% 
            func2() %>%
            func3()

Έτσι παίρνουμε το αποτέλεσμα της εργασίας func1() και περάστε το ως το πρώτο επιχείρημα σε func2(), τότε περνάμε το αποτέλεσμα αυτού του υπολογισμού ως πρώτο όρισμα func3(). Και τέλος, γράφουμε όλους τους υπολογισμούς που έγιναν στο αντικείμενο obj <-.

Αυτό το μιμίδιο απεικονίζει όλα όσα περιγράφονται παραπάνω καλύτερα από τις λέξεις:
Ποια γλώσσα να επιλέξετε για εργασία με δεδομένα - R ή Python; Και τα δυο! Μετανάστευση από τα πάντα στο τακτοποιημένο και data.table και πίσω

В data.table Οι αλυσίδες χρησιμοποιούνται με παρόμοιο τρόπο.

newDT <- DT[where, select|update|do, by][where, select|update|do, by][where, select|update|do, by]

Σε κάθε μία από τις αγκύλες μπορείτε να χρησιμοποιήσετε το αποτέλεσμα της προηγούμενης πράξης.

В pandas Τέτοιες πράξεις χωρίζονται με περίοδο.

obj = df.fun1().fun2().fun3()

Εκείνοι. παίρνουμε το τραπέζι μας df και χρησιμοποιούμε τη μέθοδό της fun1(), στη συνέχεια εφαρμόζουμε τη μέθοδο στο ληφθέν αποτέλεσμα fun2(), μετά fun3(). Το αποτέλεσμα που προκύπτει αποθηκεύεται σε ένα αντικείμενο obj .

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ

Οι δομές δεδομένων σε R και Python είναι παρόμοιες αλλά έχουν διαφορετικά ονόματα.

Περιγραφή
Τίτλος σε R
Όνομα σε Python / pandas

Δομή πίνακα
data.frame, data.table, tibble
Πλαίσιο δεδομένων

Μονοδιάστατη λίστα τιμών
Vector
Σειρά σε panda ή λίστα σε καθαρή Python

Πολυεπίπεδη μη πινακοειδής δομή
Λίστα
Λεξικό (dict)

Θα δούμε μερικά άλλα χαρακτηριστικά και διαφορές στη σύνταξη παρακάτω.

Λίγα λόγια για τα πακέτα που θα χρησιμοποιήσουμε

Αρχικά, θα σας πω λίγα λόγια για τα πακέτα που θα γνωρίσετε σε αυτό το άρθρο.

τακτοποιημένος

Официальный сайт: tidyverse.org
Ποια γλώσσα να επιλέξετε για εργασία με δεδομένα - R ή Python; Και τα δυο! Μετανάστευση από τα πάντα στο τακτοποιημένο και data.table και πίσω
Βιβλιοθήκη tidyverse γραμμένο από τον Hadley Wickham, Senior Researcher στο RStudio. tidyverse αποτελείται από ένα εντυπωσιακό σύνολο πακέτων που απλοποιούν την επεξεργασία δεδομένων, 5 από τα οποία βρίσκονται στα κορυφαία 10 που έχουν ληφθεί από το αποθετήριο CRAN.

Ο πυρήνας της βιβλιοθήκης αποτελείται από τα ακόλουθα πακέτα: ggplot2, dplyr, tidyr, readr, purrr, tibble, stringr, forcats. Κάθε ένα από αυτά τα πακέτα στοχεύει στην επίλυση ενός συγκεκριμένου προβλήματος. Για παράδειγμα dplyr σχεδιασμένο για χειρισμό δεδομένων, tidyr να φέρει τα δεδομένα σε μια τακτοποιημένη μορφή, stringr διευκολύνει την εργασία με χορδές και ggplot2 είναι ένα από τα πιο δημοφιλή εργαλεία οπτικοποίησης δεδομένων.

Το πλεονέκτημα tidyverse είναι η απλότητα και η αναγνωσιμότητα της σύνταξης, η οποία είναι από πολλές απόψεις παρόμοια με τη γλώσσα ερωτημάτων SQL.

πίνακας δεδομένων

Ποια γλώσσα να επιλέξετε για εργασία με δεδομένα - R ή Python; Και τα δυο! Μετανάστευση από τα πάντα στο τακτοποιημένο και data.table και πίσωОфициальный сайт: r-datatable.com

Συγγραφέας data.table είναι ο Matt Dole του H2O.ai.

Η πρώτη κυκλοφορία της βιβλιοθήκης πραγματοποιήθηκε το 2006.

Η σύνταξη του πακέτου δεν είναι τόσο βολική όσο στο tidyverse και θυμίζει περισσότερο τα κλασικά πλαίσια δεδομένων σε R, αλλά ταυτόχρονα έχει επεκταθεί σημαντικά σε λειτουργικότητα.

Όλοι οι χειρισμοί με τον πίνακα σε αυτό το πακέτο περιγράφονται σε αγκύλες και αν μεταφράσετε τη σύνταξη data.table στην SQL, θα λάβετε κάτι σαν αυτό: data.table[ WHERE, SELECT, GROUP BY ]

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

Πάντα

Официальный сайт: pandas.pydata.org Ποια γλώσσα να επιλέξετε για εργασία με δεδομένα - R ή Python; Και τα δυο! Μετανάστευση από τα πάντα στο τακτοποιημένο και data.table και πίσω

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

Συγγραφέας pandas είναι ο Αμερικανός Wes McKinney.

Όταν πρόκειται για ανάλυση δεδομένων σε Python, ίσο pandas Όχι. Ένα πολύ πολυλειτουργικό πακέτο υψηλού επιπέδου που σας επιτρέπει να εκτελείτε οποιουσδήποτε χειρισμούς με δεδομένα, από τη φόρτωση δεδομένων από οποιαδήποτε πηγή έως την οπτικοποίηση τους.

Εγκατάσταση πρόσθετων πακέτων

Τα πακέτα που αναφέρονται σε αυτό το άρθρο δεν περιλαμβάνονται στις βασικές διανομές R και Python. Αν και υπάρχει μια μικρή προειδοποίηση, εάν έχετε εγκαταστήσει τη διανομή Anaconda, θα χρειαστεί να εγκαταστήσετε επιπλέον pandas δεν απαιτείται.

Εγκατάσταση πακέτων στο R

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

# установка пакетов
install.packages("vroom")
install.packages("readr")
install.packages("dplyr")
install.packages("data.table")

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

# подключение или импорт пакетов в рабочее окружение
library(vroom)
library(readr)
library(dplyr)
library(data.table)

Εγκατάσταση πακέτων σε Python

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

pip install pandas

Μετά από αυτό, επιστρέφουμε στην Python και εισάγουμε το εγκατεστημένο πακέτο με την εντολή import.

import pandas as pd

Τα δεδομένα φορτώνονται

Η εξόρυξη δεδομένων είναι ένα από τα πιο σημαντικά βήματα στην ανάλυση δεδομένων. Τόσο η Python όσο και η R σας προσφέρουν εκτεταμένες δυνατότητες λήψης δεδομένων από οποιαδήποτε πηγή, αν θέλετε: τοπικά αρχεία, αρχεία από το Διαδίκτυο, ιστότοπους, κάθε είδους βάσεις δεδομένων.

Ποια γλώσσα να επιλέξετε για εργασία με δεδομένα - R ή Python; Και τα δυο! Μετανάστευση από τα πάντα στο τακτοποιημένο και data.table και πίσω

Σε αυτό το άρθρο θα χρησιμοποιήσουμε διάφορα σύνολα δεδομένων:

  1. Δύο λήψεις από το Google Analytics.
  2. Δεδομένα επιβατών Titanic.

Όλα τα δεδομένα είναι στα δικά μου GitHub με τη μορφή αρχείων csv και tsv. Από που θα τα ζητήσουμε.

Φόρτωση δεδομένων στο R: tidyverse, vroom, readr

Για να φορτώσετε δεδομένα στη βιβλιοθήκη tidyverse Προορίζονται δύο πακέτα: vroom, readr. vroom πιο μοντέρνα, αλλά στο μέλλον τα πακέτα μπορεί να συνδυαστούν.

Παράθεση από επίσημη τεκμηρίωση vroom.

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

vroom εναντίον αναγνώστη
Τι σημαίνει απελευθέρωση; vroom για readr? Προς το παρόν σχεδιάζουμε να αναπτύξουμε και τα δύο πακέτα ξεχωριστά, αλλά μάλλον θα τα συνδυάσουμε στο μέλλον. Ένα από τα μειονεκτήματα του τεμπελικού διαβάσματος vroom είναι ότι ορισμένα προβλήματα δεδομένων δεν μπορούν να κοινοποιηθούν εκ των προτέρων, επομένως είναι απαραίτητο να σκεφτούμε πώς να τα συνδυάσουμε καλύτερα.

Σε αυτό το άρθρο θα εξετάσουμε και τα δύο πακέτα για τη φόρτωση δεδομένων:

Φόρτωση δεδομένων στο R: Το πακέτο vroom

# install.packages("vroom")
library(vroom)

# Чтение данных
## vroom
ga_nov  <- vroom("https://raw.githubusercontent.com/selesnow/publications/master/data_example/r_python_data/ga_nowember.csv")
ga_dec  <- vroom("https://raw.githubusercontent.com/selesnow/publications/master/data_example/r_python_data/ga_december.csv")
titanic <- vroom("https://raw.githubusercontent.com/selesnow/publications/master/data_example/r_python_data/titanic.csv")

Φόρτωση δεδομένων στο R: reader

# install.packages("readr")
library(readr)

# Чтение данных
## readr
ga_nov  <- read_tsv("https://raw.githubusercontent.com/selesnow/publications/master/data_example/r_python_data/ga_nowember.csv")
ga_dec  <- read_tsv("https://raw.githubusercontent.com/selesnow/publications/master/data_example/r_python_data/ga_december.csv")
titanic <- read_csv("https://raw.githubusercontent.com/selesnow/publications/master/data_example/r_python_data/titanic.csv")

Στη συσκευασία vroom, ανεξάρτητα από τη μορφή δεδομένων csv / tsv, η φόρτωση πραγματοποιείται από τη συνάρτηση με το ίδιο όνομα vroom(), σε συσκευασία readr Χρησιμοποιούμε διαφορετική λειτουργία για κάθε μορφή read_tsv() и read_csv().

Φόρτωση δεδομένων στο R: data.table

В data.table υπάρχει μια λειτουργία για τη φόρτωση δεδομένων fread().

Φόρτωση δεδομένων στο R: το πακέτο data.table

# install.packages("data.table")
library(data.table)

## data.table
ga_nov  <- fread("https://raw.githubusercontent.com/selesnow/publications/master/data_example/r_python_data/ga_nowember.csv")
ga_dec  <- fread("https://raw.githubusercontent.com/selesnow/publications/master/data_example/r_python_data/ga_december.csv")
titanic <- fread("https://raw.githubusercontent.com/selesnow/publications/master/data_example/r_python_data/titanic.csv")

Φόρτωση δεδομένων σε Python: pandas

Αν το συγκρίνουμε με πακέτα R, τότε σε αυτήν την περίπτωση είναι το πιο κοντινό σε σύνταξη pandas θα readr, επειδή pandas μπορεί να ζητήσει δεδομένα από οπουδήποτε και υπάρχει μια ολόκληρη οικογένεια λειτουργιών σε αυτό το πακέτο read_*().

  • read_csv()
  • read_excel()
  • read_sql()
  • read_json()
  • read_html()

Και πολλές άλλες λειτουργίες που έχουν σχεδιαστεί για την ανάγνωση δεδομένων από κάθε είδους μορφές. Αλλά για τους σκοπούς μας είναι αρκετό read_table() ή read_csv() χρησιμοποιώντας όρισμα Σεπτέμβριος για να καθορίσετε το διαχωριστικό στηλών.

Φόρτωση δεδομένων σε Python: pandas

import pandas as pd

ga_nov  = pd.read_csv("https://raw.githubusercontent.com/selesnow/publications/master/data_example/russian_text_in_r/ga_nowember.csv", sep = "t")
ga_dec  = pd.read_csv("https://raw.githubusercontent.com/selesnow/publications/master/data_example/russian_text_in_r/ga_december.csv", sep = "t")
titanic = pd.read_csv("https://raw.githubusercontent.com/selesnow/publications/master/data_example/russian_text_in_r/titanic.csv")

Δημιουργία πλαισίων δεδομένων

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

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

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

Δημιουργία πλαισίου δεδομένων σε R: tidyverse, dplyr

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

Δημιουργία DataFrame στο R: dplyr

## dplyr
### создаём справочник
gender <- tibble(id = c(1, 2),
                 gender = c("female", "male"))

Δημιουργία πλαισίου δεδομένων στο R: data.table

Δημιουργία πλαισίου δεδομένων στο R: data.table

## data.table
### создаём справочник
gender <- data.table(id = c(1, 2),
                    gender = c("female", "male"))

Δημιουργία DataFrame στην Python: pandas

В pandas Η δημιουργία πλαισίων πραγματοποιείται σε διάφορα στάδια, πρώτα δημιουργούμε ένα λεξικό και μετά μετατρέπουμε το λεξικό σε πλαίσιο δεδομένων.

Δημιουργία DataFrame στην Python: pandas

# создаём дата фрейм
gender_dict = {'id': [1, 2],
               'gender': ["female", "male"]}
# преобразуем словарь в датафрейм
gender = pd.DataFrame.from_dict(gender_dict)

Επιλογή στηλών

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

Ποια γλώσσα να επιλέξετε για εργασία με δεδομένα - R ή Python; Και τα δυο! Μετανάστευση από τα πάντα στο τακτοποιημένο και data.table και πίσω

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

Επιλογή στηλών σε R: tidyverse, dplyr

σύνταξη dplyr Μοιάζει πολύ με τη γλώσσα ερωτημάτων SQL, εάν είστε εξοικειωμένοι με αυτήν, θα κατακτήσετε αυτό το πακέτο αρκετά γρήγορα.

Η συνάρτηση χρησιμοποιείται για την επιλογή στηλών. select().

Ακολουθούν μερικά παραδείγματα κώδικα που θα σας επιτρέψουν να επιλέξετε στήλες με τους ακόλουθους τρόπους:

  • Έχοντας παραθέσει τα ονόματα των απαιτούμενων στηλών
  • Πρόσβαση στα ονόματα στηλών χρησιμοποιώντας κανονικές εκφράσεις
  • Κατά τύπο δεδομένων ή οποιαδήποτε άλλη ιδιότητα των δεδομένων που περιέχονται στη στήλη

Επιλογή στηλών σε R: dplyr

# Выбор нужных столбцов
## dplyr
### выбрать по названию столбцов
select(ga_nov, date, source, sessions)
### исключь по названию столбцов
select(ga_nov, -medium, -bounces)
### выбрать по регулярному выражению, стобцы имена которых заканчиваются на s
select(ga_nov, matches("s$"))
### выбрать по условию, выбираем только целочисленные столбцы
select_if(ga_nov, is.integer)

Επιλογή στηλών στο R: data.table

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

DT[i,j,by]

Πού:
i — όπου, δηλαδή φιλτράρισμα κατά σειρές
j - επιλέξτε|ενημέρωση|do, δηλ. Επιλογή στηλών και μετατροπή τους
από — ομαδοποίηση δεδομένων

Επιλογή στηλών στο R: data.table

## data.table
### выбрать по названию столбцов
ga_nov[ , .(date, source, sessions) ]
### исключь по названию столбцов
ga_nov[ , .SD, .SDcols = ! names(ga_nov) %like% "medium|bounces" ]
### выбрать по регулярному выражению
ga_nov[, .SD, .SDcols = patterns("s$")]

Μεταβλητή .SD σας επιτρέπει να έχετε πρόσβαση σε όλες τις στήλες και .SDcols φιλτράρετε τις στήλες που χρειάζεστε χρησιμοποιώντας κανονικές εκφράσεις ή άλλες συναρτήσεις για να φιλτράρετε τα ονόματα των στηλών που χρειάζεστε.

Επιλογή στηλών σε Python, pandas

Για να επιλέξετε στήλες με όνομα στο pandas Αρκεί να παράσχετε μια λίστα με τα ονόματά τους. Και για να επιλέξετε ή να εξαιρέσετε στήλες με το όνομα χρησιμοποιώντας κανονικές εκφράσεις, πρέπει να χρησιμοποιήσετε συναρτήσεις drop() и filter(), και το επιχείρημα άξονας = 1, με το οποίο προσδιορίζετε ότι θέλετε να επεξεργαστείτε στήλες αντί για γραμμές.

Για να επιλέξετε ένα πεδίο ανά τύπο δεδομένων, χρησιμοποιήστε τη συνάρτηση select_dtypes(), και σε επιχειρήματα περιλαμβάνουν ή αποκλείουν Διαβιβάστε μια λίστα τύπων δεδομένων που αντιστοιχούν στα πεδία που πρέπει να επιλέξετε.

Επιλογή στηλών στην Python: pandas

# Выбор полей по названию
ga_nov[['date', 'source', 'sessions']]
# Исключить по названию
ga_nov.drop(['medium', 'bounces'], axis=1)
# Выбрать по регулярному выражению
ga_nov.filter(regex="s$", axis=1)
# Выбрать числовые поля
ga_nov.select_dtypes(include=['number'])
# Выбрать текстовые поля
ga_nov.select_dtypes(include=['object'])

Φιλτράρισμα σειρών

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

Ποια γλώσσα να επιλέξετε για εργασία με δεδομένα - R ή Python; Και τα δυο! Μετανάστευση από τα πάντα στο τακτοποιημένο και data.table και πίσω

Φιλτράρισμα σειρών σε R: tydyverse, dplyr

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

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

Όταν εφαρμόζετε πολλαπλές λογικές εκφράσεις στο φιλτράρισμα, χρησιμοποιήστε τους ακόλουθους τελεστές:

  • & ή κόμμα - λογικό ΚΑΙ
  • | - λογικό Ή

Φιλτράρισμα σειρών σε R: dplyr

# фильтрация строк
## dplyr
### фильтрация строк по одному условию
filter(ga_nov, source == "google")
### фильтр по двум условиям соединённым логическим и
filter(ga_nov, source == "google" & sessions >= 10)
### фильтр по двум условиям соединённым логическим или
filter(ga_nov, source == "google" | sessions >= 10)

Φιλτράρισμα σειρών σε R: data.table

Όπως έγραψα παραπάνω, data.table Η σύνταξη μετασχηματισμού δεδομένων περικλείεται σε αγκύλες.

DT[i,j,by]

Πού:
i — όπου, δηλαδή φιλτράρισμα κατά σειρές
j - επιλέξτε|ενημέρωση|do, δηλ. Επιλογή στηλών και μετατροπή τους
από — ομαδοποίηση δεδομένων

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

Οι στήλες αναφέρονται σε λογικές εκφράσεις χωρίς εισαγωγικά ή το όνομα του πίνακα.

Οι λογικές εκφράσεις συνδέονται μεταξύ τους με τον ίδιο τρόπο όπως στο dplyr μέσω των χειριστών & και |.

Φιλτράρισμα σειρών σε R: data.table

## data.table
### фильтрация строк по одному условию
ga_nov[source == "google"]
### фильтр по двум условиям соединённым логическим и
ga_nov[source == "google" & sessions >= 10]
### фильтр по двум условиям соединённым логическим или
ga_nov[source == "google" | sessions >= 10]

Φιλτράρισμα συμβολοσειρών στην Python: pandas

Φιλτράρισμα κατά σειρές μέσα pandas παρόμοια με το φιλτράρισμα σε data.table, και εκτελείται σε αγκύλες.

Σε αυτήν την περίπτωση, η πρόσβαση στις στήλες πραγματοποιείται με την υποχρεωτική ένδειξη του ονόματος πλαισίου δεδομένων. Επιπλέον, το όνομα της στήλης μπορεί επίσης να αναφέρεται σε εισαγωγικά σε αγκύλες (παράδειγμα df['col_name']), ή χωρίς εισαγωγικά μετά την τελεία (παράδειγμα df.col_name).

Εάν χρειάζεται να φιλτράρετε ένα πλαίσιο δεδομένων με πολλαπλές συνθήκες, κάθε συνθήκη πρέπει να περικλείεται σε παρένθεση. Οι λογικές συνθήκες συνδέονται μεταξύ τους από τους χειριστές. & и |.

Φιλτράρισμα συμβολοσειρών στην Python: pandas

# Фильтрация строк таблицы
### фильтрация строк по одному условию
ga_nov[ ga_nov['source'] == "google" ]
### фильтр по двум условиям соединённым логическим и
ga_nov[(ga_nov['source'] == "google") & (ga_nov['sessions'] >= 10)]
### фильтр по двум условиям соединённым логическим или
ga_nov[(ga_nov['source'] == "google") | (ga_nov['sessions'] >= 10)]

Ομαδοποίηση και συγκέντρωση δεδομένων

Μία από τις πιο συχνά χρησιμοποιούμενες λειτουργίες στην ανάλυση δεδομένων είναι η ομαδοποίηση και η συγκέντρωση.

Ποια γλώσσα να επιλέξετε για εργασία με δεδομένα - R ή Python; Και τα δυο! Μετανάστευση από τα πάντα στο τακτοποιημένο και data.table και πίσω

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

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

Ομαδοποίηση και συγκέντρωση δεδομένων σε R: tidyverse, dplyr

В dplyr η συνάρτηση χρησιμοποιείται για ομαδοποίηση group_by(), και για συνάθροιση summarise(). Οντως, dplyr υπάρχει μια ολόκληρη οικογένεια λειτουργιών summarise_*(), αλλά ο σκοπός αυτού του άρθρου είναι να συγκρίνει τη βασική σύνταξη, επομένως δεν θα εμβαθύνουμε σε τέτοιες λεπτομέρειες.

Κύριες λειτουργίες συνάθροισης:

  • sum() — άθροιση
  • min() / max() — ελάχιστη και μέγιστη τιμή
  • mean() — αριθμητικός μέσος όρος
  • median() — διάμεσος
  • length() - ποσότητα

Ομαδοποίηση και Συνάθροιση σε R: dplyr

## dplyr
### группировка и агрегация строк
group_by(titanic, Pclass) %>%
  summarise(passangers = length(PassengerId),
            avg_price  = mean(Fare))

Σε λειτουργία group_by() ως πρώτο επιχείρημα περάσαμε έναν πίνακα τιτανικός, και μετά υποδείχθηκε το πεδίο Pclass, με την οποία θα ομαδοποιήσουμε το τραπέζι μας. Το αποτέλεσμα αυτής της λειτουργίας με χρήση του χειριστή %>% μεταβιβάστηκε ως το πρώτο όρισμα στη συνάρτηση summarise()και πρόσθεσε 2 ακόμη πεδία: επιβάτες и μέση_τιμή. Στο πρώτο, χρησιμοποιώντας τη συνάρτηση length() υπολόγισε τον αριθμό των εισιτηρίων και στη δεύτερη χρησιμοποιώντας τη συνάρτηση mean() έλαβε τη μέση τιμή εισιτηρίου.

Ομαδοποίηση και συγκέντρωση δεδομένων σε R: data.table

В data.table χρησιμοποιείται ένα όρισμα για τη συγκέντρωση j που έχει τη δεύτερη θέση σε αγκύλες, και για ομαδοποίηση by ή keyby, που κατέχουν την τρίτη θέση.

Ο κατάλογος των συναρτήσεων συγκέντρωσης σε αυτήν την περίπτωση είναι πανομοιότυπος με αυτόν που περιγράφεται στο dplyr, γιατί Πρόκειται για συναρτήσεις από τη βασική σύνταξη R.

Ομαδοποίηση και συνάθροιση στο R: δεδομένα.πίνακας

## data.table
### фильтрация строк по одному условию
titanic[, .(passangers = length(PassengerId),
            avg_price  = mean(Fare)),
        by = Pclass]

Ομαδοποίηση και συγκέντρωση δεδομένων στην Python: pandas

Ομαδοποίηση σε pandas παρόμοια με dplyr, αλλά η συγκέντρωση δεν μοιάζει με τίποτα dplyr καθόλου data.table.

Για ομαδοποίηση, χρησιμοποιήστε τη μέθοδο groupby(), στην οποία πρέπει να περάσετε μια λίστα στηλών βάσει των οποίων θα ομαδοποιηθεί το πλαίσιο δεδομένων.

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

Λειτουργίες συγκέντρωσης:

  • sum() — άθροιση
  • min() / max() — ελάχιστη και μέγιστη τιμή
  • mean() — αριθμητικός μέσος όρος
  • median() — διάμεσος
  • count() - ποσότητα

Λειτουργία reset_index() στο παρακάτω παράδειγμα χρησιμοποιείται για την επαναφορά ένθετων ευρετηρίων που pandas από προεπιλογή ορίζεται μετά τη συγκέντρωση δεδομένων.

Σύμβολο σας επιτρέπει να μεταβείτε στην επόμενη γραμμή.

Ομαδοποίηση και συνάθροιση στην Python: pandas

# группировка и агрегация данных
titanic.groupby(["Pclass"]).
    agg({'PassengerId': 'count', 'Fare': 'mean'}).
        reset_index()

Κάθετη ένωση τραπεζιού

Μια λειτουργία κατά την οποία συνδέετε δύο ή περισσότερους πίνακες της ίδιας δομής. Τα δεδομένα που κατεβάσαμε περιέχουν πίνακες. ga_nov и ga_dec. Αυτοί οι πίνακες είναι πανομοιότυποι ως προς τη δομή, δηλαδή έχουν τις ίδιες στήλες και τους τύπους δεδομένων σε αυτές τις στήλες.

Ποια γλώσσα να επιλέξετε για εργασία με δεδομένα - R ή Python; Και τα δυο! Μετανάστευση από τα πάντα στο τακτοποιημένο και data.table και πίσω

Αυτή είναι μια εκφόρτωση από το Google Analytics για τον Νοέμβριο και τον Δεκέμβριο, σε αυτήν την ενότητα θα συνδυάσουμε αυτά τα δεδομένα σε έναν πίνακα.

Κάθετη ένωση πινάκων σε R: tidyverse, dplyr

В dplyr Μπορείτε να συγχωνεύσετε 2 πίνακες σε έναν χρησιμοποιώντας τη συνάρτηση bind_rows(), περνώντας πίνακες ως επιχειρήματά του.

Φιλτράρισμα σειρών σε R: dplyr

# Вертикальное объединение таблиц
## dplyr
bind_rows(ga_nov, ga_dec)

Κάθετη ένωση πινάκων στο R: data.table

Δεν είναι επίσης τίποτα περίπλοκο, το χρησιμοποιούμε rbind().

Φιλτράρισμα σειρών σε R: data.table

## data.table
rbind(ga_nov, ga_dec)

Κάθετη ένωση πινάκων στην Python: pandas

В pandas για να συνδυάσετε πίνακες χρησιμοποιήστε τη συνάρτηση concat(), στο οποίο πρέπει να περάσετε μια λίστα πλαισίων για να τα συνδυάσετε.

Φιλτράρισμα συμβολοσειρών στην Python: pandas

# вертикальное объединение таблиц
pd.concat([ga_nov, ga_dec])

Οριζόντια ένωση τραπεζιού

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

Ποια γλώσσα να επιλέξετε για εργασία με δεδομένα - R ή Python; Και τα δυο! Μετανάστευση από τα πάντα στο τακτοποιημένο και data.table και πίσω

Υπάρχουν διάφοροι τύποι ενοποίησης:

Ποια γλώσσα να επιλέξετε για εργασία με δεδομένα - R ή Python; Και τα δυο! Μετανάστευση από τα πάντα στο τακτοποιημένο και data.table και πίσω

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

1 - θηλυκό
2 - αρσενικό

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

Οριζόντια ένωση πινάκων στο R: tidyverse, dplyr

В dplyr Υπάρχει μια ολόκληρη οικογένεια λειτουργιών για οριζόντια ενοποίηση:

  • inner_join()
  • left_join()
  • right_join()
  • full_join()
  • semi_join()
  • nest_join()
  • anti_join()

Το πιο συχνά χρησιμοποιούμενο στο ιατρείο μου είναι left_join().

Οι συναρτήσεις που αναφέρονται παραπάνω χρειάζονται δύο πίνακες για να ενωθούν ως δύο πρώτα ορίσματα και ως τρίτο όρισμα, by Πρέπει να καθορίσετε τις στήλες για να ενώσετε.

Οριζόντια ένωση πινάκων σε R: dplyr

# объединяем таблицы
left_join(titanic, gender,
          by = c("Sex" = "id"))

Οριζόντια ένωση πινάκων στο R: data.table

В data.table πρέπει να συνδυάσετε πίνακες με πλήκτρο χρησιμοποιώντας τη συνάρτηση merge().

Ορίσματα της συνάρτησης merge() στο data.table

  • x, y — Πίνακες για ενοποίηση
  • από — Μια στήλη που είναι το κλειδί για τη σύνδεση εάν έχει το ίδιο όνομα και στους δύο πίνακες
  • by.x, by.y — Ονόματα στηλών προς ένωση, εάν έχουν διαφορετικά ονόματα στους πίνακες
  • all, all.x, all.y — Τύπος σύνδεσης, all θα επιστρέψει όλες τις σειρές και από τους δύο πίνακες, το all.x αντιστοιχεί στη λειτουργία LEFT JOIN (θα αφήσει όλες τις σειρές του πρώτου πίνακα), all.y — αντιστοιχεί στη λειτουργία RIGHT JOIN (θα αφήσει όλες τις σειρές του δεύτερου πίνακα).

Οριζόντια ένωση πινάκων στο R: data.table

# объединяем таблицы
merge(titanic, gender, by.x = "Sex", by.y = "id", all.x = T)

Οριζόντια ένωση πινάκων στην Python: pandas

Το ίδιο με το data.tableΣε pandas για τη σύνδεση πινάκων, χρησιμοποιείται μια συνάρτηση merge().

Ορίσματα της συνάρτησης merge() στα panda

  • πώς — Τύπος σύνδεσης: αριστερά, δεξιά, εξωτερική, εσωτερική
  • on — Μια στήλη που είναι κλειδί εάν έχει το ίδιο όνομα και στους δύο πίνακες
  • left_on, right_on — Ονόματα στηλών κλειδιών, εάν έχουν διαφορετικά ονόματα σε πίνακες

Οριζόντια ένωση πινάκων στην Python: pandas

# объединяем по ключу
titanic.merge(gender, how = "left", left_on = "Sex", right_on = "id")

Βασικές συναρτήσεις παραθύρου και υπολογισμένες στήλες

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

Ποια γλώσσα να επιλέξετε για εργασία με δεδομένα - R ή Python; Και τα δυο! Μετανάστευση από τα πάντα στο τακτοποιημένο και data.table και πίσω

Ουσιαστικά, με τη βοήθεια συναρτήσεων παραθύρου χωρίζουμε το εισερχόμενο πλαίσιο δεδομένων σε μέρη σύμφωνα με κάποιο χαρακτηριστικό, δηλαδή με βάση την τιμή ενός πεδίου ή πολλά πεδία. Και εκτελούμε αριθμητικές πράξεις σε κάθε παράθυρο. Το αποτέλεσμα αυτών των πράξεων θα επιστραφεί σε κάθε σειρά, δηλαδή χωρίς να αλλάξει ο συνολικός αριθμός σειρών στον πίνακα.

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

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

Λειτουργίες παραθύρου σε R: tidyverse, dplyr

Για να προσθέσετε νέες στήλες χωρίς τη χρήση ομαδοποίησης σειρών, στο dplyr εξυπηρετεί τη λειτουργία mutate().

Το πρόβλημα που περιγράφεται παραπάνω μπορεί να λυθεί ομαδοποιώντας τα δεδομένα ανά πεδίο Pclass και συνοψίζοντας το πεδίο σε μια νέα στήλη Να Κάνω. Στη συνέχεια, καταργούμε την ομαδοποίηση του πίνακα και διαιρούμε τις τιμές των πεδίων Να Κάνω για το τι συνέβη στο προηγούμενο βήμα.

Λειτουργίες παραθύρου σε R: dplyr

group_by(titanic, Pclass) %>%
  mutate(Pclass_cost = sum(Fare)) %>%
  ungroup() %>%
  mutate(ticket_fare_rate = Fare / Pclass_cost)

Συναρτήσεις παραθύρου στο R: data.table

Ο αλγόριθμος λύσης παραμένει ο ίδιος όπως στο dplyr, πρέπει να χωρίσουμε τον πίνακα σε παράθυρα ανά πεδίο Pclass. Εμφανίστε σε μια νέα στήλη το άθροισμα για την ομάδα που αντιστοιχεί σε κάθε σειρά και προσθέστε μια στήλη στην οποία θα υπολογίσουμε το μερίδιο του κόστους κάθε εισιτηρίου στην ομάδα του.

Για να προσθέσετε νέες στήλες στο data.table παρών χειριστή :=. Παρακάτω είναι ένα παράδειγμα επίλυσης ενός προβλήματος χρησιμοποιώντας το πακέτο data.table

Συναρτήσεις παραθύρου στο R: data.table

titanic[,c("Pclass_cost","ticket_fare_rate") := .(sum(Fare), Fare / Pclass_cost), 
        by = Pclass]

Συναρτήσεις παραθύρου στην Python: pandas

Ένας τρόπος για να προσθέσετε μια νέα στήλη pandas — χρησιμοποιήστε τη λειτουργία assign(). Για να συνοψίσουμε το κόστος των εισιτηρίων ανά κατηγορία καμπίνας, χωρίς να ομαδοποιήσουμε τις σειρές, θα χρησιμοποιήσουμε τη συνάρτηση transform().

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

Συναρτήσεις παραθύρου στην Python: pandas

titanic.assign(Pclass_cost      =  titanic.groupby('Pclass').Fare.transform(sum),
               ticket_fare_rate = lambda x: x['Fare'] / x['Pclass_cost'])

Πίνακας αντιστοιχίας συναρτήσεων και μεθόδων

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

Περιγραφή
τακτοποιημένος
πίνακας δεδομένων
Πάντα

Τα δεδομένα φορτώνονται
vroom()/ readr::read_csv() / readr::read_tsv()
fread()
read_csv()

Δημιουργία πλαισίων δεδομένων
tibble()
data.table()
dict() + from_dict()

Επιλογή στηλών
select()
διαφωνία j, τη δεύτερη θέση σε αγκύλες
περνάμε τη λίστα των απαιτούμενων στηλών σε αγκύλες / drop() / filter() / select_dtypes()

Φιλτράρισμα σειρών
filter()
διαφωνία i, πρώτη θέση σε αγκύλες
παραθέτουμε τις συνθήκες φιλτραρίσματος σε αγκύλες / filter()

Ομαδοποίηση και συνάθροιση
group_by() + summarise()
επιχειρήματα j + by
groupby() + agg()

Κατακόρυφη σύνδεση πίνακα (UNION)
bind_rows()
rbind()
concat()

Οριζόντια ένωση πίνακα (JOIN)
left_join() / *_join()
merge()
merge()

Βασικές συναρτήσεις παραθύρου και προσθήκη υπολογιζόμενων στηλών
group_by() + mutate()
διαφωνία j χρησιμοποιώντας τον χειριστή := + επιχείρημα by
transform() + assign()

Συμπέρασμα

Ίσως στο άρθρο δεν περιέγραψα τις πιο βέλτιστες εφαρμογές επεξεργασίας δεδομένων, οπότε θα χαρώ αν διορθώσετε τα λάθη μου στα σχόλια ή απλώς συμπληρώσετε τις πληροφορίες που παρέχονται στο άρθρο με άλλες μεθόδους εργασίας με δεδομένα στο R / Python.

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

Αν σας άρεσε το άρθρο, θα χαρώ να έχω νέους συνδρομητές στο δικό μου YouTube и τηλεγράφημα καναλιών.

Опрос

Ποια από τα πακέτα που παρατίθενται χρησιμοποιείτε στην εργασία σας;

Στα σχόλια μπορείτε να γράψετε τον λόγο της επιλογής σας.

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

Ποιο πακέτο επεξεργασίας δεδομένων χρησιμοποιείτε (μπορείτε να επιλέξετε πολλές επιλογές)

  • 45,2%τακτοποιημένος19

  • 33,3%δεδομένα.πίνακας14

  • 54,8%pandas23

Ψήφισαν 42 χρήστες. 9 χρήστες απείχαν.

Πηγή: www.habr.com

Αγοράστε αξιόπιστη φιλοξενία για ιστότοπους με προστασία DDoS, διακομιστές VPS VDS 🔥 Αγοράστε αξιόπιστη φιλοξενία ιστοσελίδων με προστασία DDoS, διακομιστές VPS VDS | ProHoster