Προς το περιεχόμενο

Notebooks_


Cr4zyc4t3

Προτεινόμενες αναρτήσεις

Έχει σχέση με το Jupiter. 
Το μόνο σχετικό που βρήκα είναι αυτό το Link: https://jupyter.org   όπου σου λέει να το κατεβάσεις είτε για τον υπολογιστή είτε να το τρέξεις στον browser σου. 
Χρησιμοποιείται κυρίως για ανάλυση δεδομένων, επιστημονική πληροφορική και μηχανική εκμάθηση/τεχνητή νοημοσύνη(ΑΙ).


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

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

  • 2 εβδομάδες αργότερα...

Γενικά μιλώντας, ένα notebook είναι ένα document που περιέχει τόσο κώδικα (python) όσο και τα αποτελέσματα του (κείμενο, γραφήματα)

Αυτό εξυπηρετεί σε πολλά πράγματα, είναι ευκολο να τα μετατρέψεις σε ότι θες, μπορεις να κανεις share τα αποτελέσματα με άλλους, να φτιαξεις reports και αν είσαι data scientist εχουν το τρελό πλεονέκτημα του interactive coding που εξυπηρετει πολυ στο data exploration

Έχουν προβλήματα; Σίγουρα. Δεν είναι καθολου ευκολο να συνεργαστεις με άλλους, σε source control ειναι μπαχαλο (γιατι δεν ειναι σκετο python αλλα ενα πολυ μπερδεμενο markup που περιεχει και κωδικα και αποτελεσματα), παιζει γενικα πολυ code redundacy και γενικα ειναι maintenance hell. Και φυσικα, το σημαντικοτερο όλων, δε μπορεις να κανεις debugging

Ευκολοτερος τρόπος να βαλεις Jupyter (το πιο γνωστο ίσως notebook), είναι να εγκαταστήσεις το anaconda (https://www.anaconda.com/), είναι ενα ολοκληρωμενο πακετο με python, jupyter, vs code, spyder και ολα τα καλουδια ωστε να μη χρειαζεται να τα στηνεις ενα-ενα. Εναλλακτικα, αν εχεις τα υπολοιπα, βαζεις μονο το jupyter (https://jupyter.org/install)

Εναλλακτικα του jupyter, αν εχεις google account, υπαρχει το colab (https://colab.research.google.com/). Δε θελει εγκατασταση, γραφεις κωδικα online όπως στα google docs

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημοσ. (επεξεργασμένο)
6 hours ago, georgemarios said:

Δεν είναι καθολου ευκολο να συνεργαστεις με άλλους, σε source control ειναι μπαχαλο (γιατι δεν ειναι σκετο python αλλα ενα πολυ μπερδεμενο markup που περιεχει και κωδικα και αποτελεσματα), παιζει γενικα πολυ code redundacy και γενικα ειναι maintenance hell. Και φυσικα, το σημαντικοτερο όλων, δε μπορεις να κανεις debugging

Για να είμαι απόλυτα ειλικρινής με λίγο discipline για να ακολουθείς τα best practices και με boilerplate κώδικα 10 γραμμών είναι αρκετά εύκολο λύσεις τα περισσότερα από αυτά τα προβλήματα, αλλά το 95+% των scientists δεν ξέρουν πως να στήσουν το workflow ώστε το collaboration να είναι streamlined και, πολύ φοβάμαι, δεν τους ενδιαφέρει και ιδιαίτερα κιόλας.

Χοντρικά χοντρικά πρέπει

1. Να οργανώσεις τον κώδικα σου κανονικά. (packages, multiple modules, tests κτλ)

2. Στο notebook κάνεις import τον κώδικά σου με τέτοιο τρόπο ώστε να μπορείς να κάνεις reload() οποιαδήποτε αλλαγή κάνεις στο πακέτο χωρίς να χρειάζεται να κάνεις restart τον kernel. Εν γένει, αυτό είναι λίγο tricky στην python αλλά τελικά είναι 10 γραμμές boilerplate κώδικα.

3. Το notebook είναι μόνο για experimentation. Μόλις γράψεις μια συνάρτηση την μεταφέρεις στα αρχεία κώδικα και γράφεις test.

4. Για να μπορείς να κάνεις collaborate με άλλους, πρέπει πριν κάνεις commit κάποια αλλαγή σε ένα notebook να κάνεις πάντα "remove all output". Με τον τρόπο αυτό το αρχείο του notebook γίνεται ένα απλό json file, οπότε τα git diff, git blame κτλ αρχίζουν και λειτουργούν ξανά. Ιδανικά, σετάρεις το https://github.com/kynan/nbstripout ως pre-commit hook.

To boilerplate για να δουλεύει το reload είναι κάτι τέτοιο:

import sys
from IPython.lib import deepreload

import my_package                                          

# https://stackoverflow.com/questions/8391411/how-to-block-calls-to-print
class disabled_print:
    def __enter__(self):
        self._original_stdout = sys.stdout
        sys.stdout = open(os.devnull, 'w')

    def __exit__(self, exc_type, exc_val, exc_tb):
        sys.stdout.close()
        sys.stdout = self._original_stdout

# https://stackoverflow.com/questions/28101895/reloading-packages-and-their-submodules-recursively-in-python
def reload() -> None:
    with disabled_print():
        to_be_excluded = {key for (key, value) in sys.modules.items() if my_package.__name__ not in key}
        deepreload.reload(my_package, exclude=to_be_excluded)

Το βάζεις στο πρώτο κελί και μετά στα επόμενα κελιά έχεις:
 

reload()

foo = my_package.get_foo()
goo = my_package.get_goo()
plt.plot(foo, goo)
plt.show()

με τον τρόπο αυτό μπορείς να κάνεις αλλαγές στο my_package και μπορείς να τις βλέπεις κατευθείαν στο notebook χωρίς να κάνεις kernel restart. Ομοίως, αν ο συνεργάτης σου κάνει push κάποιες αλλαγές, κάνεις git pull και τις βλέπεις χωρίς να κάνεις kernel restart.

Επεξ/σία από pmav99
  • Like 2
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...