Μια αποτελεσματική προσωπική ροή εργασίας για την επιστήμη των δεδομένων Jupyter – Win Vector LLC
März 5, 2023Θα ήθελα να μοιραστώ αυτό που βρήκα ότι είναι μια πολύ αποτελεσματική προσωπική ροή εργασίας Jupyter για την ανάπτυξη της επιστήμης δεδομένων.

DALL-E «Μια αποτελεσματική προσωπική ροή εργασίας για την επιστήμη των δεδομένων Jupyter»
Jupyter Τα βιβλία εργασίας (nee IPython) είναι έγγραφα JSON που επιτρέπουν σε έναν επιστήμονα δεδομένων να συνδυάζει: κώδικα, σήμανση, αποτελέσματα, εικόνες και γραφήματα. Αποτελούν μεγάλη συμβολή στην επιστημονική αναπαραγωγιμότητα, καθώς μπορούν να περιέχουν μια σειρά από βήματα που μπορούν να επαναληφθούν όλα σε παρτίδες. Διαδραματίζουν παρόμοιο ρόλο με τον εγγράμματο προγραμματισμό, το SWEAVE και το rmarkdown/knitr. Η κύρια διαφορά σχεδιασμού είναι ότι οι φορητοί υπολογιστές Jupyter δεν διαχωρίζουν τις προδιαγραφές από την παρουσίαση, γεγονός που προκαλεί μια σειρά από σημεία τριβής. Δεν είναι ευανάγνωστα χωρίς εργαλείο (όπως JupyterLab, Jupyter Notebook, Visual Studio Code, PyCharm ή άλλα IDE), είναι αρκετά ασύμβατα με τον έλεγχο προέλευσης (καθώς μπορεί να περιέχουν εικόνες ως δυαδικές σταγόνες και πολλά από τα εργαλεία αλλάζουν το σημειωματάριο στο άνοιγμα), και κάνουν grep
η αναζήτηση/αναζήτηση δύσκολη.
Τα παραπάνω θέματα είναι ευτυχώς όλα απαραίτητες δυσκολίες. Η Python είναι ένα περιβάλλον εργασίας πολύ προσανατολισμένο στον κώδικα, επομένως τα περισσότερα εργαλεία εκθέτουν μια συνοπτική προγραμματιζόμενη διεπαφή. Τα εργαλεία που εκτίθενται από τα πακέτα Python IPython, nbformatκαι nbconvert είναι πολύ δυνατά και βολικά. Μόνο με λίγο κώδικα οργάνωσης μπόρεσα να δημιουργήσω μια πολύ ισχυρή ροή εργασιών επιστήμης προσωπικών δεδομένων που έχω διαπιστώσει ότι λειτουργεί πολύ καλά για τους πελάτες.
Μοιράζομαι αυτή τη μικρή ποσότητα κώδικα στο πακέτο wvpy. Αυτό είναι πιο εύκολο να αποδειχθεί σε δράση, τόσο σε αυτό το άρθρο όσο και σε μια επίδειξη βίντεο εδώ.
Το πρώτο χαρακτηριστικό είναι: η μετατροπή φορητών υπολογιστών Jupyter (τα οποία είναι αρχεία JSON που τελειώνουν με α .ipynb
επίθημα) προς και από απλό κώδικα Python που είναι πιο συμβατός με τον έλεγχο πηγής (όπως το Git).
Ας ξεκινήσουμε με ένα απλό παράδειγμα σημειωματάριου Jupyter: plot.ipynb. Εάν εγκαταστήσουμε (χρησιμοποιώντας ένα κέλυφος όπως bask ή zsh) wvpy από την PyPi.
pip install wvpy
Και κατεβάζουμε plot.ipynb
wget https://raw.githubusercontent.com/WinVector/wvpy/main/examples/worksheets/plot.ipynb
Στη συνέχεια, μπορούμε να μετατρέψουμε το σημειωματάριο Jupyter στο μορφοποιημένο αρχείο Python ως εξής (συζητάμε αυτήν τη μορφή λίγο εδώ).
python -m wvpy.pysheet --delete plot.ipynb
Το εργαλείο αναφέρει τα βήματα που κάνει στη μετατροπή.
from "plot.ipynb" to "plot.py" copying previous output target "plot.py" to "plot.py~" converting Jupyter notebook "plot.ipynb" to Python "plot.py" moving input plot.ipynb to plot.ipynb~
Εμφανίζεται το αρχείο Python που προκύπτει εδώ. Η ιδέα είναι: ολόκληρο το αρχείο είναι καθαρό Python, με τα μη python μπλοκ σε συμβολοσειρές πολλών γραμμών. Αυτό το αρχείο έχει αφαιρεθεί όλα τα αποτελέσματα και τα μεταδεδομένα, καθώς και ένα μικρό ποσό κανονικοποίησης κενού χώρου. Αυτή η μορφή „.py“ είναι ακριβώς η σωστή μορφή για έλεγχο πηγής, έχουμε αξιόπιστες και ευανάγνωστες διαφορές. Στην προσωπική μου πρακτική, δεν ελέγχω τα αρχεία „.ipynb“ στον έλεγχο προέλευσης, αλλά μόνο τα αντίστοιχα αρχεία „.py“. Αυτή η πειθαρχία κάνει grep
Η αναζήτηση και η αναζήτηση στοιχείων στο έργο είναι τόσο εύκολη όσο η εύρεση στοιχείων στον κώδικα.
Στο αρχείο „.py“ οι δείκτες „κείμενο έναρξης“, „κείμενο τέλους“ και „κώδικας τέλους“ δείχνουν πού βρίσκονται τα όρια κελιών του Jupyter. Αυτό επιτρέπει την αξιόπιστη μετατροπή από το αρχείο „.py“ σε φορητό υπολογιστή Jupyter. Το PyCharm και άλλοι έχουν παρόμοια στρατηγική αναπαράστασης σημειωματάριων.
Μπορούμε να μετατρέψουμε ξανά από „.py“ σε „.ipynb“ ως εξής.
python -m wvpy.pysheet --delete plot
from "plot.py" to "plot.ipynb" converting Python plot.py to Jupyter notebook plot.ipynb moving input plot.py to plot.py~
Σημειώστε ότι αυτή τη φορά δεν καθορίσαμε το επίθημα αρχείου (το „.py“ ή „.ipynb“). Το εργαλείο ελέγχει αν υπάρχει ακριβώς ένα από αυτά και μετατρέπει το ένα στο άλλο. Αυτό επιτρέπει την εύκολη μετατροπή εμπρός και πίσω με επαναχρησιμοποίηση του ιστορικού εντολών.
Οποιαδήποτε μορφή του φύλλου εργασίας μπορεί να εκτελεστεί και να αποδοθεί με HTML από τη γραμμή εντολών ως εξής.
python -m wvpy.render_workbook plot
start render_as_html "plot.ipynb" 2022-08-20 12:19:06.669369 done render_as_html "plot.html" 2022-08-20 12:19:10.080226
Αυτό παράγει αυτό που περιμένουμε να δούμε από ένα σημειωματάριο Jupyter ως παρουσίαση.
Υπάρχει επίσης μια επιλογή στο πρόγραμμα απόδοσης HTML που αφαιρεί μπλοκ εισόδου. Αυτή η παρουσίαση δεν είναι πλήρως έτοιμη, αλλά κάνει πολύ καλές αναφορές εργασιών προόδου.
python -m wvpy.render_workbook --strip_input plot
start render_as_html "plot.ipynb" 2022-08-20 12:19:35.251560 done render_as_html "plot.html" 2022-08-20 12:19:38.478107
Αυτό δίνει μια απλοποιημένη έξοδο όπως παρακάτω.
Για φύλλα που έχουν ήδη εκτελεστεί, κάποιος θα χρησιμοποιήσει την τυπική εντολή Juypter που παρέχεται „jupyter nbconvert --to html plot.ipynb
„, το πλεονέκτημα της απόδοσης εδώ είναι η παραμετροποίηση των σημειωματάριων και η απομάκρυνση των αναγνωριστικών εισόδου και προτροπής. Η στρατηγική εδώ είναι να είναι ελαφρύ αυτόνομο και όχι βύσμα όπως η στρατηγική που ακολουθεί jupytext ή nbdevή στόχευση πλήρως έτοιμων αναφορών μέσω κάμερας Τέταρτο σχήμα βιβλίου. νιώθω το wvpy Η προσέγγιση μεγιστοποιεί την παραγωγικότητα κατά την ανάπτυξη, με ελάχιστες επιβαρύνσεις προσθήκης και εγκατάστασης.
Παρέχουμε επίσης α απλή κλάση JTask για την εκτέλεση εργασιών απόδοσης, συμπεριλαμβανομένης της εισαγωγής αυθαίρετου κώδικα αρχικοποίησης για κάθε εκτέλεση. Αυτό καθιστά πολύ εύκολη την απόδοση του ίδιου βιβλίου εργασίας Jupyter για διαφορετικούς στόχους (ας πούμε την ίδια ανάλυση για κάθε πόλη σε μια πολιτεία) και ακόμη και τον παραλληλισμό της απόδοσης χρησιμοποιώντας τυπικά εργαλεία Python όπως π.χ. multiprocessing.Pool
. Αυτή η παραμετροποιημένη λειτουργία επιτρέπει την απλή διαχείριση αρκετά μεγάλων έργων. Εάν χρειάζεται να εκτελέσω πολλές παραλλαγές ενός σημειωματάριου, χρησιμοποιώ το Δοχείο JTask και είτε έναν βρόχο for είτε multiprocessing.Pool
πάνω από τις εργασίες στην Python (θυμηθείτε, όταν έχουμε Python δεν χρειάζεται να εκτελούμε όλα τα βήματα στο GUI ή ακόμα και σε ένα κέλυφος!). Βρίσκεται ένα μικρό παράδειγμα της μεθόδου εδώόπου ένα μόνο σημειωματάριο Jupyter ParamExample.ipynb χρησιμοποιείται από run_examples.py για την παραγωγή των πολλαπλών αρχείων HTML, PDF και PNG ανά ημερομηνία που βρίσκονται στο Ευρετήριο.
Βρήκα ότι η πιο γρήγορη ροή εργασιών ανάπτυξης είναι να δουλέψω με τους φορητούς υπολογιστές Jupyter „.ipynb“ (συνήθως στον κώδικα του Visual Studio και να ρυθμίσω τυχόν τιμές που υποτίθεται ότι προέρχονται από το wvpy.render_workbook
με το χέρι μετά τον έλεγχο δεν έχουν τοποθετηθεί globals()
). Στη συνέχεια, όταν το φύλλο εργασίας λειτουργεί, το μετατρέπω σε „.py“ χρησιμοποιώντας wvpy.pysheet
και ελέγξτε το στον έλεγχο πηγής.
Ως δευτερεύουσα σημείωση βρίσκω ότι η Python είναι μια κοινότητα για πρώτη φορά προγραμματιστές, κάτι που είναι πολύ αναζωογονητικό. Οι δυνατότητες (όπως το Jupyter, το nbconvert και το nbformat) απελευθερώνονται ως κώδικας με γενναιόδωρες άδειες και τεκμηρίωση ανοιχτού κώδικα αντί να παγιδεύονται σε μονολιθικές εφαρμογές. Αυτό σημαίνει ότι μπορεί κανείς να εκμεταλλευτεί τις δυνατότητές τους χρησιμοποιώντας μόνο ένα μικρό ποσό κώδικα. Και με την αναφερόμενη υπόθεση ότι η Python είναι μια κοινότητα για πρώτη φορά προγραμματιστή, μικρές ποσότητες κώδικα θεωρούνται εύκολες ενσωματώσεις. Το wvpy προσφέρεται στο ίδιο πνεύμα, είναι διαθέσιμο για χρήση από το PyPi εδώ βάσει άδειας BSD 3 ρητρών και έχει τον κωδικό της διαθέσιμο εδώ για επαναχρησιμοποίηση ή προσαρμογή εδώ με την ίδια άδεια. Δεν είναι ένα μεγάλο έργο, αλλά με έχει κάνει λίγο πιο εύκολη την εργασία σε έργα πελατών και τη διδασκαλία της επιστήμης δεδομένων.
Συμπερασματικά, αυτή είναι η τρέχουσα προσωπική μου ροή εργασίας Jupyter. Βελτιώνει τη συμβατότητα με τον έλεγχο πηγής, την ευκολία αναζήτησης και την αυτόματη απόδοση πολλών φύλλων εργασίας με παραμετροποιημένο τρόπο. Πιστεύω ότι αυτό αντιμετωπίζει τα κύρια σημεία πόνου της εργασίας με φύλλα εργασίας Jupyter.
Θα προσφέρω ιδιωτική (και ελπίζω κάποια μέρα δημόσια) εκπαίδευση σχετικά με τη ροή εργασίας (συμπεριλαμβανομένης της παραμετροποίησης του σημειωματάριου για την εκτέλεση πολλών εργασιών από μία μόνο πηγή, χρήση του multiprocessing.Pool
για επιτάχυνση και IPython.display.display; IPython.display.Markdown
για προσαρμοσμένα αποτελέσματα) στο μέλλον.
Κατηγορίες: Συναρπαστικές Τεχνικές Γνώμες σεμινάρια
