Γεια σε όλους! Είχαμε τον Functional February και τον Mechanical March. Τώρα ήρθε η ώρα για τον Analytical April, στον οποίο θα επικεντρωθούμε σε γλώσσες που είναι εξαιρετικές για την επιστήμη δεδομένων.
Όπως έχεις συνηθίσει από τους τελευταίους μήνες, σε αυτό το βίντεο ο Erik κι εγώ θα σου δώσουμε μια γρήγορη επισκόπηση του τι αφορά ο μήνας και των διαφορετικών γλωσσών που θα εξερευνήσουμε.
Όπως συνήθως, σε λίγο ο Erik θα μας ξεναγήσει στις γλώσσες, αλλά εγώ θα ξεκινήσω δίνοντας μερικές πρακτικές λεπτομέρειες για τον μήνα.
Λοιπόν, κατ' αρχάς οι προτεινόμενες γλώσσες αυτού του μήνα. Έχουμε μόνο τρεις αυτόν τον μήνα: Julia, Python και R. Κάθε μία από αυτές τις γλώσσες είναι αρκετά διαφορετική, και προφανώς η Python είναι μια γλώσσα πολλαπλών χρήσεων, αλλά θα σε ενθαρρύνουμε να δοκιμάσεις να χρησιμοποιήσεις αυτές τις γλώσσες με νοοτροπία επιστήμης δεδομένων αυτόν τον μήνα.
Για να πάρεις το σήμα του Analytical April, πρέπει να ολοκληρώσεις πέντε ασκήσεις σε μία από αυτές τις γλώσσες. Θα εξερευνήσουμε τις διαφορές τους σε λίγο, αλλά με τους όρους του Exercism, η διαδρομή μας για την Python έχει ένα φανταστικό πρόγραμμα σπουδών, οπότε σου προτείνω ανεπιφύλακτα να το δοκιμάσεις. Ελπίζουμε επίσης να ξεκινήσουμε ένα πρόγραμμα σπουδών για τη Julia μέσα στον μήνα, μεγάλο μέρος της δουλειάς έχει ήδη γίνει και χρειάζεται απλώς λίγο γυάλισμα. Η R δεν έχει πρόγραμμα σπουδών, αλλά έχει πολλές ενδιαφέρουσες ασκήσεις για να παίξεις.
Έχουμε πέντε προτεινόμενες ασκήσεις για να δοκιμάσεις:
- etl: όπου μπορείς να εξερευνήσεις την αναδιαμόρφωση δεδομένων σε διαφορετική μορφή
- largest-series-product: όπου μπορείς να εξασκηθείς σε αποδοτικούς τρόπους αναζήτησης μοτίβων σε μια συμβολοσειρά ψηφίων
- saddle-points: για να εξερευνήσεις την εργασία με πολυδιάστατους πίνακες/μήτρες
- sum-of-multiples: για να εξασκηθείς στο φιλτράρισμα και την άθροιση μιας ακολουθίας αριθμών
- word-count: μετατρέπει μια συμβολοσειρά σε λέξεις και τις μετράει
Μια υπενθύμιση ότι εκτός από το σήμα του Analytical April, υπάρχει και ένα σήμα #12in23 διάρκειας ενός έτους, που μπορείς να πάρεις λύνοντας τις διάφορες προτεινόμενες ασκήσεις οποιαδήποτε στιγμή μέσα στη χρονιά. Οπότε θα χρειαστεί να λύσεις αυτές τις 5 ασκήσεις σε Python, R ή Julia κάποια στιγμή φέτος για να πάρεις αυτό το σήμα! Για την πλήρη λίστα των ασκήσεων, υπάρχει μια ανάρτηση στο φόρουμ, με σύνδεσμο στη σελίδα του Analytical April.
Τέλος, πριν βυθιστούμε στις γλώσσες, μια υπενθύμιση ότι τον Μάρτιο ξεκινάμε τον νέο μας διακομιστή Discord. Έχει γίνει πολλή διασκεδαστική δραστηριότητα εκεί, οπότε φρόντισε να το τσεκάρεις. Ο σύνδεσμος είναι στην περιγραφή παρακάτω!
Λοιπόν, ας εξερευνήσουμε τις γλώσσες. Ας πάρουμε μια γρήγορη επισκόπηση καθεμιάς από τις γλώσσες και μετά θα εμβαθύνουμε στα χαρακτηριστικά και τις περιπτώσεις χρήσης τους. Ας ξεκινήσουμε με την Python.
Python
- Σχεδιάστηκε και αναπτύχθηκε από τον Guido van Rossum στα τέλη της δεκαετίας του 1980 ως διάδοχος της γλώσσας προγραμματισμού ABC. Κυκλοφόρησε για πρώτη φορά το 1991.
- Αναπτύχθηκε στην Ολλανδία, στο Centrum Wiskunde & Informatica (CWI) (διάσημο ως ο τόπος όπου ο Edsger Dijkstra έκανε το μεγαλύτερο μέρος της δουλειάς του), ένα ερευνητικό εργαστήριο χρηματοδοτούμενο από την κυβέρνηση.
- Ο Guido προγραμμάτιζε χρησιμοποιώντας C και shell scripts, αλλά και τα δύο είχαν μειονεκτήματα. Η Python στοχεύει να πάρει τα καλύτερα και από τους δύο κόσμους, χωρίς τα μειονεκτήματα.
- Διοικείται από το Python Software Foundation και οι αλλαγές στη γλώσσα γίνονται μέσω των Python Enhancement Proposals (PEPs) (παρόμοια με τα RFC)
R
- Δημιουργήθηκε από τους Ross Ihaka και Robert Gentleman στο Πανεπιστήμιο του Όκλαντ. Η R μπορεί να θεωρηθεί ως μια διαφορετική υλοποίηση της γλώσσας S (με σχετικά μικρές διαφορές), την οποία διαδέχτηκε η S-plus, μια εμπορική (μη ανοιχτή) υλοποίηση της S. Ενώ η R μοιράζεται το μεγαλύτερο μέρος της σύνταξης με την S, η σημασιολογία της είναι εμπνευσμένη από τη Scheme
- Στόχος: η δημιουργία μιας γλώσσας που ήταν πιο κατάλληλη για στατιστικούς υπολογισμούς και γραφικά και πιο εύκολη στη χρήση από αντίστοιχο λογισμικό σχεδιασμένο από επιστήμονες υπολογιστών
Julia
- Αναπτύχθηκε ανοιχτά από τους Jeff Bezanson, Stefan Karpinski, Viral B. Shah και Alan Edelman και έχει αυτή τη στιγμή περισσότερους από χίλιους συνεισφέροντες
- Στόχος: η δημιουργία μιας δωρεάν γλώσσας υψηλού επιπέδου που να έχει την ταχύτητα της C, τον δυναμισμό της Ruby, τον μεταπρογραμματισμό της LISP, τις δυνατότητες γενικής χρήσης της Python, την υποστήριξη στατιστικών της R, την υποστήριξη γραμμικής άλγεβρας της MatLab και τη δύναμη επεξεργασίας συμβολοσειρών της Perl, όλα αυτά ενώ παράλληλα να υποστηρίζει μαζικά παράλληλη εκτέλεση
- Εξαιρετική για επιστημονικούς υπολογισμούς, αλλά και γλώσσα γενικής χρήσης (το framework Genie για διαδικτυακές εφαρμογές)
Όπως συμβαίνει με πολλές γλώσσες, και οι τρεις τους φτιάχτηκαν από δυσαρέσκεια :)
Ωραία. Λοιπόν, όσον αφορά τις περιπτώσεις χρήσης, πότε θα χρησιμοποιούσες καθεμιά από αυτές τις γλώσσες εναντίον των άλλων;
Python
- Πραγματικά γλώσσα γενικής χρήσης (ιστότοποι, scripts, επιστημονικοί υπολογισμοί)
- Μπορεί να χρησιμοποιηθεί για πολλούς διαφορετικούς σκοπούς: τεχνητή νοημοσύνη (TensorFlow), scripts επιστημονικών υπολογισμών (NumPy), ιστότοποι (Django), ενσωματωμένα συστήματα (micro python), διασύνδεση με υλικό (π.χ. raspberry pi), παιχνίδια (EVE online) και η Python πήγε ακόμα και στον Άρη
- Εξαιρετική για να μάθεις προγραμματισμό: πλούτος πόρων και τεράστια κοινότητα. Πολλές οδηγίες για το πώς να γράφεις Pythonic κώδικα (δηλαδή πώς να γράφεις ιδιωματικό κώδικα Python, παραδείγματα), όπως "Το ρητό είναι καλύτερο από το έμμεσο" και "Η αναγνωσιμότητα μετράει"). Πολλά λειτουργικά συστήματα την έχουν εγκατεστημένη εξ ορισμού
- Μία από τις πιο χρησιμοποιούμενες γλώσσες αυτή τη στιγμή, άρα πολλή τεκμηρίωση, βιβλιοθήκες και μεγάλη κοινότητα
R
- Η R χρησιμοποιείται σε μεγάλη ποικιλία χώρων: από ερευνητές για την ανάλυση δεδομένων από πειράματα, από πανεπιστήμια για τη διδασκαλία στατιστικής και ανάλυσης δεδομένων, στον χρηματοπιστωτικό τομέα καθώς η στατιστική είναι κρίσιμη (π.χ. για ασφάλειες), το ίδιο στο λιανικό εμπόριο (η Amazon χρησιμοποιεί την R για ανάλυση δεδομένων) και στη μεταποίηση (η John Deere υπολογίζει πόσα ανταλλακτικά να παράγει), η Εθνική Μετεωρολογική Υπηρεσία βοηθά στην πρόβλεψη του καιρού και καταστροφών, στη δημοσιογραφία δεδομένων (ανάλυση πραγματικών δεδομένων και εξαγωγή συμπερασμάτων, συχνά με οπτικοποίηση), χρησιμοποιείται ευρέως στην υγεία, π.χ. για τον προσδιορισμό της ασφάλειας ενός φαρμάκου βάσει προκλινικών δοκιμών
Julia:
- Εξαιρετική για επιστημονικούς υπολογισμούς, εξόρυξη δεδομένων, μηχανική μάθηση, γραμμική άλγεβρα και κατανεμημένο υπολογισμό. Ο συμβολισμός θα σου φανεί παρόμοιος με τον μαθηματικό συμβολισμό, οπότε η μετάβαση από την εξίσωση στον κώδικα είναι σχετικά εύκολη
- Κατανεμημένος υπολογισμός: οι εργασίες (=coroutines) και τα channels επιτρέπουν την εκτέλεση κώδικα παράλληλα, με τα κομμάτια να επικοινωνούν μεταξύ τους, υποστήριξη πολλαπλών διεργασιών με ανταλλαγή μηνυμάτων (ιδανικό για υπολογισμούς υψηλών επιδόσεων)
- Χρησιμοποιείται στο έργο Celeste (υπερυπολογιστής που εκτελεί κώδικα Julia για την ανάλυση 178 terabyte αστρονομικών δεδομένων) (γεγονός που κάνει τη Julia μέλος του κλαμπ των petaflop, στο οποίο εκείνη την εποχή ανήκαν μόνο οι C, C++ και Fortran, με τη Julia να είναι η πρώτη δυναμική γλώσσα, ένα τετράκις εκατομμύριο υπολογισμοί κινητής υποδιαστολής ανά δευτερόλεπτο. 1 με 15 μηδενικά), το Clima (συμμαχία μοντελοποίησης του κλίματος) έχει ανθρώπους από το Caltech, το MIT και το Jet Propulsion Laboratory της NASA να αναπτύσσουν ένα μοντέλο πρόγνωσης του κλίματος, το CERN, την ASML
Και από προγραμματιστική σκοπιά, πώς διαφέρουν; Είναι συναρτησιακές, αντικειμενοστρεφείς κ.λπ.;
Python:
- Δυναμική και με ισχυρή τυποποίηση
- Πολυπαραδειγματική: προστακτική, συναρτησιακή, αλλά στην πραγματικότητα αντικειμενοστρεφής γλώσσα (τα πάντα είναι αντικείμενα)
- Ο προεπιλεγμένος διερμηνευτής, CPython, μεταγλωττίζει σε bytecode και στη συνέχεια αυτό ερμηνεύεται σε μια εικονική μηχανή. Ο PyPy είναι αντικαταστάτης του CPython που μεταγλωττίζει just-in-time σε κώδικα μηχανής
R:
- Δυναμική και με ισχυρή τυποποίηση
- Πολυπαραδειγματική, με συναρτησιακό πυρήνα αλλά και υποστήριξη διαδικαστικών ή αντικειμενοστρεφών στυλ
Julia:
- Δυναμική και με ισχυρή τυποποίηση, μεταγλωττίζεται just-in-time
- Πολυπαραδειγματική: προστακτική, αντικειμενοστρεφής (υπερφόρτωση μέσω multiple dispatch), συναρτησιακή (συναρτήσεις ανώτερης τάξης, μερική εφαρμογή, τελεστής pipe)
- Ο κώδικας μεταγλωττίζεται just-in-time ahead-of-time κατά την εκτέλεση
Και συνεχίζοντας να τις εξετάζουμε από προγραμματιστική σκοπιά, έχει κάποια από τις γλώσσες κάποια ιδιαίτερα ξεχωριστά χαρακτηριστικά;
Python:
- Ευχάριστη σύνταξη: η ευαισθησία στα κενά κάνει την εμβέλεια εύκολα ορατή. Ο κώδικας είναι συνήθως εύκολος στην ανάγνωση, π.χ. συνθήκες Boolean που διαβάζονται από άνθρωπο (and/or)
- Εκφραστική: κάνεις πολλά με σχετικά λίγο κώδικα (list comprehensions, generators, decorators)
- Τεράστιος πλούτος βιβλιοθηκών για μεγάλη ποικιλία σκοπών
- Όπως αναφέρθηκε προηγουμένως, είναι πραγματικά μια γλώσσα γενικής χρήσης, καθώς μπορεί να χρησιμοποιηθεί σε πολλά διαφορετικά σενάρια
Julia
- Multiple dispatch. Αποφασίζει ποια συνάρτηση θα καλέσει με βάση τους τύπους όλων των ορισμάτων (όπως η υπερφόρτωση συναρτήσεων)
- Δυναμική αλλά με εξαιρετικές επιδόσεις. Οι επιδόσεις της Julia μπορούν να συναγωνιστούν αυτές της Fortran και να πλησιάσουν αυτές της C. Ο "φυσιολογικός" κώδικας είναι συχνά αποδοτικός (δεν χρειάζονται τρελά τρικ, οι μικρότερες συναρτήσεις ενθαρρύνονται μάλιστα). Βιβλιοθήκες που υποστηρίζουν εκτέλεση κώδικα σε GPU
- Κατανεμημένος υπολογισμός: οι εργασίες (=coroutines) και τα channels επιτρέπουν την εκτέλεση κώδικα παράλληλα, με τα κομμάτια να επικοινωνούν μεταξύ τους, υποστήριξη πολλαπλών διεργασιών με ανταλλαγή μηνυμάτων (ιδανικό για υπολογισμούς υψηλών επιδόσεων)
- Εξαιρετική για επιστημονικούς υπολογισμούς, εξόρυξη δεδομένων, μηχανική μάθηση, γραμμική άλγεβρα και κατανεμημένο υπολογισμό. Ο συμβολισμός θα σου φανεί παρόμοιος με τον μαθηματικό συμβολισμό, οπότε η μετάβαση από την εξίσωση στον κώδικα είναι σχετικά εύκολη
R:
- Ευέλικτοι τύποι δεδομένων: ο vector είναι ο βασικός τύπος, ακόμα και τα βαθμωτά μεγέθη είναι vectors. Οι vectors μπορούν να έχουν μεταδεδομένα συνδεδεμένα μαζί τους (π.χ. τα ονόματα των στοιχείων τους). Οι λίστες είναι ετερογενείς (μπορούν να έχουν στοιχεία διαφορετικών τύπων). Ειδικός τύπος dataframe για συλλογή vectors (όλων του ίδιου μήκους).
- Οι διανυσματικές πράξεις επιτρέπουν συνοπτική, αποδοτική και ευανάγνωστη ενημέρωση των vectors
- Η R είναι ένα ολοκληρωμένο σύνολο λογισμικού για χειρισμό δεδομένων, υπολογισμούς και γραφική απεικόνιση. Εύκολη εξερεύνηση, οπτικοποίηση και χειρισμός δεδομένων μέσω του RStudio. Εξαιρετική για εξόρυξη δεδομένων
- Εξαιρετική κοινότητα, φιλική και ποικιλόμορφη. Η R for Data Science Online Learning Community είναι μια κοινότητα μαθητών της R όλων των επιπέδων που συνεργάζονται για να βελτιώσουν τις δεξιότητές τους. Υπάρχει μια ανοιχτή ομάδα στο Slack όπου τα μέλη μπορούν να κρατούν επαφή και να βοηθούν το ένα το άλλο με προβλήματα.
Αν κάποιος δεν είναι σίγουρος ποια να δοκιμάσει τον Απρίλιο, πώς θα του πρότεινες να πάρει την απόφαση;
Όπως με τα πάντα στην πληροφορική: εξαρτάται! Σε αυτή την περίπτωση, θα έλεγα ότι εξαρτάται κυρίως από τους στόχους και την προσωπική σου εμπειρία.
Αν είσαι σχετικά νέος στον προγραμματισμό, ενδιαφέρεσαι για τεχνητή νοημοσύνη ή μηχανική μάθηση ή θέλεις να μάθεις μια γλώσσα που μπορείς να χρησιμοποιήσεις για πολλά διαφορετικά πράγματα, θα σου πρότεινα μάλλον να ξεκινήσεις με την Python: Ο αριθμός των διαθέσιμων πόρων για την Python είναι τεράστιος και περιλαμβάνει πολλά δωρεάν διαδικτυακά μαθήματα Η Python χρησιμοποιείται παντού με τεχνητή νοημοσύνη και μηχανική μάθηση Η Python μπορεί να χρησιμοποιηθεί για πάρα πολλούς σκοπούς Η διαδρομή Python έχει ενεργοποιημένη τη Λειτουργία Μάθησης, που μπορεί να σε βοηθήσει να μάθεις τις βασικές έννοιες της γλώσσας με διασκεδαστικό τρόπο
Αν σε ενδιαφέρει η στατιστική εργασία, θέλεις να εξερευνήσεις και να οπτικοποιήσεις δεδομένα ή είσαι περίεργος για έναν διαφορετικό τρόπο εργασίας με δεδομένα, η γλώσσα R είναι εξαιρετική επιλογή: Οι τύποι δεδομένων της R βασίζονται σε συλλογές δεδομένων (vectors/λίστες) και οι πράξεις μπορούν να εφαρμοστούν σε συλλογές με ευκολία (χωρίς να χρειάζεται βρόχος) Το IDE RStudio είναι εξαιρετικό για την εξερεύνηση και οπτικοποίηση δεδομένων Η R έχει εξαιρετική υποστήριξη για στατιστική ανάλυση Η R επιτρέπει την εύκολη γραφική απεικόνιση δεδομένων
Αν σε ενδιαφέρει ο επιστημονικός υπολογισμός, θέλεις να εκτελείς κώδικα ταυτόχρονα, νοιάζεσαι πραγματικά για τις επιδόσεις ή θέλεις να μάθεις μια σύγχρονη, κομψή γλώσσα που προσφέρει κάτι διαφορετικό από τις περισσότερες άλλες γλώσσες, θα σου πρότεινα τη Julia:
- Το multiple dispatch θα είναι καινούργιο για πολλούς και είναι απίστευτα ισχυρό
- Η Julia είναι εξαιρετική για επιστημονικούς υπολογισμούς
- Το σύστημα τύπων της Julia είναι ευέλικτο και εκφραστικό
- Η Julia έχει εξαιρετικές επιδόσεις
- Η Julia είναι εξαιρετική για ταυτόχρονη εκτέλεση
Φυσικά, αν έχεις τον χρόνο, θα σου πρότεινα να δοκιμάσεις και τις τρεις! Ποτέ δεν ξέρεις πραγματικά ποια γλώσσα θα απολαύσεις αν δεν τη δοκιμάσεις.