Κύριος μετασχηματισμός δεδομένων στα πάντα με αυτές τις τρεις χρήσιμες τεχνικές

Μια βουτιά στο φιλτράρισμα, το χειρισμό και τη λειτουργία

Φωτογραφία Μιλάντ Φακούριαν on Unsplash

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

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

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

Ας μιλήσουμε για τρεις τρόπους για να γίνει αυτό.

Φιλτράρισμα — αλλά εξηγείται σωστά

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

Ας αναθεωρήσουμε, χρησιμοποιώντας το αγαπημένο μου, παράξενα ευέλικτο παράδειγμα: ένα DataFrame βαθμών μαθητών, που ονομάζεται εύστοχα grades:

Εικόνα από συντάκτη

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

βαθμοί[βαθμοί['Βαθμολογία'] >= 90]
Εικόνα από συντάκτη

Αυτό μας αφήνει με τον Τζακ και την Ερμιόνη. Δροσερός. Τι ακριβώς έγινε όμως εδώ; Γιατί λειτουργεί η παραπάνω γραμμή κώδικα; Ας βουτήξουμε λίγο βαθύτερα κοιτάζοντας την έξοδο της έκφρασης μέσα στις παραπάνω εξωτερικές αγκύλες:

βαθμοί['Βαθμολογία'] >= 90
Εικόνα από συντάκτη

Α, ΕΝΤΑΞΕΙ. Οτι έχει νόημα. Φαίνεται ότι αυτή η γραμμή κώδικα επιστρέφει ένα αντικείμενο της σειράς Pandas που κρατά Boolean ( True / False ) τιμές που καθορίζονται από τι >= 90 επιστράφηκε για κάθε μεμονωμένη σειρά. Αυτό είναι το βασικό ενδιάμεσο βήμα. Στη συνέχεια, αυτή η σειρά Booleans περνάει στις εξωτερικές αγκύλες και φιλτράρει όλες τις σειρές ανάλογα.

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

grades.loc[grades['Score'] >= 90]
Εικόνα από συντάκτη

Υπάρχουν διάφοροι λόγοι που μπορούμε να επιλέξουμε να χρησιμοποιήσουμε loc (ένα από τα οποία είναι ότι στην πραγματικότητα μας επιτρέπει να φιλτράρουμε σειρές και στήλες μέσω μιας μεμονωμένης πράξης), αλλά αυτό ανοίγει ένα Pandora's Box of Pandas που αφήνεται καλύτερα σε άλλο άρθρο.

Προς το παρόν, ο σημαντικός μαθησιακός στόχος είναι ο εξής: όταν φιλτράρουμε στο Pandas, η μπερδεμένη σύνταξη δεν είναι κάποιου είδους περίεργη μαγεία. Πρέπει απλώς να το αναλύσουμε στα δύο συστατικά του βήματα: 1) να αποκτήσουμε μια Boolean Series των σειρών που ικανοποιούν την κατάστασή μας και 2) να χρησιμοποιήσουμε τη σειρά για να φιλτράρουμε ολόκληρο το DataFrame.

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

Ας προχωρήσουμε.

Λειτουργίες The Beauty of Lambda

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

Εισαγάγετε τις λειτουργίες λάμδα — μια χρήσιμη δυνατότητα γλώσσας που ενσωματώνεται όμορφα με τα Panda.

Ως μια γρήγορη ανασκόπηση, δείτε πώς λειτουργούν τα λάμδα:

>>> add_function = λάμδα x, y: x + y
>>> add_function(2, 3)
5

Οι συναρτήσεις λάμδα δεν διαφέρουν από τις κανονικές συναρτήσεις, εκτός από το γεγονός ότι έχουν μια πιο συνοπτική σύνταξη:

  • Όνομα συνάρτησης στα αριστερά του ίσου
  • Η lambda λέξη-κλειδί στα δεξιά του ίσου (παρόμοια με το def λέξη-κλειδί σε έναν παραδοσιακό ορισμό συνάρτησης Python, αυτό επιτρέπει στην Python να γνωρίζει ότι ορίζουμε μια συνάρτηση).
  • Παράμετρος(εις) μετά το lambda λέξη-κλειδί, στα αριστερά της άνω τελείας.
  • Επιστρέψτε την τιμή στα δεξιά της άνω και κάτω τελείας.

Τώρα λοιπόν, ας εφαρμόσουμε τις συναρτήσεις λάμδα σε μια ρεαλιστική κατάσταση.

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

Εικόνα από συντάκτη

Τώρα, ως Master Data Highnesses αυτής της εταιρείας, μας δόθηκαν ορισμένες άκρως απόρρητες πληροφορίες: σε όλους σε αυτήν την εταιρεία θα δοθεί αύξηση 10% συν επιπλέον $1000. Αυτό είναι πιθανώς πολύ συγκεκριμένο για έναν υπολογισμό για να βρεθεί μια συγκεκριμένη μέθοδος, αλλά αρκετά απλό με μια συνάρτηση λάμδα:

update_income = lambda num: num + (αριθμός * .10) + 1000

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

monies['New Income'] = χρήματα['Income'].apply(update_income)
χρήματα
Εικόνα από συντάκτη

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

Θα κρατήσω το θέμα εδώ απλό.

Τα λάμδα είναι εξαιρετικά χρήσιμα, και ως εκ τούτου, θα πρέπει να τα χρησιμοποιήσετε. Απολαμβάνω!

Λειτουργίες χειρισμού χορδών σειράς

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

Για παράδειγμα, ας πούμε ότι έχουμε καλέσει το ακόλουθο DataFrame names που αποθηκεύει τα ονόματα και τα επώνυμα των ανθρώπων:

Εικόνα από συντάκτη

Τώρα, λόγω περιορισμών χώρου στη βάση δεδομένων μας, αποφασίζουμε ότι αντί να αποθηκεύουμε ολόκληρο το επώνυμο ενός ατόμου, είναι πιο αποτελεσματικό να αποθηκεύουμε απλώς το τελευταίο του αρχικό. Επομένως, πρέπει να μεταμορφώσουμε το 'Last Name' στήλη ανάλογα. Με τα λάμδα, η προσπάθειά μας να το κάνουμε αυτό μπορεί να μοιάζει με το εξής:

names['Last Name'] = names['Last Name'].apply(lambda s: s[:1])
ονόματα
Εικόνα από συντάκτη

Αυτό λειτουργεί ξεκάθαρα, αλλά είναι λίγο αδέξιο, και επομένως όχι τόσο Pythonic όσο θα μπορούσε να είναι. Ευτυχώς, με την ομορφιά των συναρτήσεων χειρισμού συμβολοσειρών στα Pandas, υπάρχει ένας άλλος, πιο κομψός τρόπος (για τους σκοπούς της επόμενης γραμμής κώδικα, απλώς προχωρήστε και υποθέστε ότι δεν έχουμε ήδη αλλάξει το 'Last Name' στήλη με τον παραπάνω κωδικό):

names['Last Name'] = names['Last Name'].str[:1]
ονόματα
Εικόνα από συντάκτη

Τα-ντα! ο .str Η ιδιότητα μιας σειράς Pandas μας επιτρέπει να συνδέουμε κάθε συμβολοσειρά της σειράς με μια συγκεκριμένη λειτουργία συμβολοσειράς, ακριβώς σαν να δουλεύαμε με κάθε συμβολοσειρά ξεχωριστά.

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

names['First Name'] = names['First Name'].str.lower()
names['Last Name'] = names['Last Name'].str.lower()
ονόματα
Εικόνα από συντάκτη

Πολύ πιο απλό από το να ταλαιπωρηθείτε να ορίσετε τις δικές σας συναρτήσεις λάμδα και να καλέσετε τις συναρτήσεις συμβολοσειράς μέσα σε αυτό. Όχι ότι δεν μου αρέσουν τα λάμδα — αλλά όλα έχουν τη θέση τους και η απλότητα πρέπει πάντα να έχει προτεραιότητα στην Python.

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

Χρησιμοποιήστε τες άφθονα. Είναι εξαιρετικοί.

Τελικές σκέψεις και ανακεφαλαίωση

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

  1. Φιλτράρετε όπως το εννοείτε. Μάθετε τι πραγματικά συμβαίνει για να ξέρετε τι κάνετε.
  2. Αγαπήστε τα λάμδα σας. Μπορούν να σας βοηθήσουν να χειριστείτε τα δεδομένα με εκπληκτικούς τρόπους.
  3. Τα πάντα αγαπούν τα κορδόνια όσο κι εσείς. Υπάρχουν πολλές ενσωματωμένες λειτουργίες — μπορείτε επίσης να τις χρησιμοποιήσετε.

Ακολουθεί μια τελευταία συμβουλή: δεν υπάρχει «σωστός» τρόπος φιλτραρίσματος ενός συνόλου δεδομένων. Εξαρτάται από τα διαθέσιμα δεδομένα καθώς και από το μοναδικό πρόβλημα που θέλετε να λύσετε. Ωστόσο, ενώ δεν υπάρχει καθορισμένη μέθοδος που μπορείτε να ακολουθήσετε κάθε φορά, υπάρχει μια χρήσιμη συλλογή εργαλείων που αξίζει να έχετε στη διάθεσή σας. Σε αυτό το άρθρο, συζήτησα τρία από αυτά.

Σας ενθαρρύνω να βγείτε έξω και να βρείτε περισσότερα.

αναφορές

[1] https://www.aboutdatablog.com/post/10-most-useful-string-functions-in-pandas

Ο κύριος μετασχηματισμός δεδομένων στα πάντα με αυτές τις τρεις χρήσιμες τεχνικές αναδημοσίευση από την Πηγή https://towardsdatascience.com/master-data-transformation-in-pandas-with-these-three-useful-techniques-20699f03e51d?source=rss—-7f60cf 5620 μέσω https://towardsdatascience.com/feed

Si al principi no tens èxit, aleshores el paracaigudisme no és per a tu.

->

Σφραγίδα ώρας:

Περισσότερα από Σύμβουλοι Blockchain