Python Gateway στο InterSystems IRIS

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

Σχέδιο

  1. Εισαγωγή.
  2. Εργαλεία.
  3. Εγκατάσταση.
  4. API.
  5. Διαλειτουργικότητα.
  6. Σημειωματάριο Jupyter.
  7. Συμπεράσματα.
  8. Συνδέσεις.
  9. M.L.Εργαλειοθήκη.

Εισαγωγή

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

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

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

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

Τα εργαλεία εξελίσσονται - ενώ δεν διαθέτουμε εργαλεία AI/ML πλήρως προσανατολισμένα στο GUI, φαίνεται επίσης η πρόοδος που έχουμε δει με πολλές άλλες κατηγορίες συστημάτων πληροφοριών όπως το BI (από τη σύνταξη κώδικα έως τη χρήση πλαισίων και ρυθμιζόμενων λύσεων προσανατολισμένων στο GUI) . σε εργαλεία δημιουργίας AI/ML. Έχουμε ήδη περάσει το στάδιο της σύνταξης κώδικα και σήμερα χρησιμοποιούμε πλαίσια για κατασκευή και εκπαίδευση μοντέλων.

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

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

Με τη μετάβαση στο cloud, η εκκίνηση έργων AI/ML είναι ευκολότερη από ποτέ. Μπορούμε να καταναλώσουμε μόνο τους πόρους που χρειαζόμαστε. Επιπλέον, χάρη στον παραλληλισμό που προσφέρουν οι πλατφόρμες cloud, μπορούμε να εξοικονομήσουμε χρόνο.

Τι γίνεται όμως με τα αποτελέσματα; Εδώ είναι που τα πράγματα γίνονται πιο περίπλοκα. Υπάρχουν πολλά εργαλεία για την κατασκευή μοντέλων, τα οποία θα συζητήσω στη συνέχεια. Το να φτιάξεις ένα καλό μοντέλο δεν είναι εύκολο, αλλά τι μετά; Το κέρδος από τη χρήση του μοντέλου από μια επιχείρηση είναι επίσης ένα μη τετριμμένο έργο. Η ρίζα του προβλήματος είναι ο διαχωρισμός αναλυτικού και συναλλακτικού φόρτου εργασίας και μοντέλων δεδομένων. Όταν εκπαιδεύουμε ένα μοντέλο, το κάνουμε συνήθως βάσει ιστορικών δεδομένων. Αλλά η θέση για το κατασκευασμένο μοντέλο είναι η επεξεργασία δεδομένων συναλλαγών. Τι ωφελεί το καλύτερο μοντέλο ανίχνευσης δόλιας συναλλαγής εάν το εκτελούμε μία φορά την ημέρα; Οι απατεώνες έχουν ήδη φύγει με τα χρήματα. Πρέπει να εκπαιδεύσουμε το μοντέλο σε ιστορικά δεδομένα, αλλά πρέπει επίσης να το εφαρμόσουμε σε πραγματικό χρόνο σε νέα εισερχόμενα δεδομένα, ώστε οι επιχειρηματικές μας διαδικασίες να μπορούν να ενεργούν σύμφωνα με τις προβλέψεις του μοντέλου.

Το ML Toolkit είναι μια εργαλειοθήκη που κάνει ακριβώς αυτό: συνδυάζει μοντέλα και ένα περιβάλλον συναλλαγών, έτσι ώστε τα μοντέλα που δημιουργείτε να μπορούν να χρησιμοποιηθούν εύκολα απευθείας στις επιχειρηματικές σας διαδικασίες. Το Python Gateway είναι μέρος του ML Toolkit και παρέχει ενοποίηση με τη γλώσσα Python (παρόμοια με το R Gateway, το να είσαι μέρος του ML Toolkit παρέχει ενοποίηση με τη γλώσσα R).

Εργαλειοθήκη

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

Τεχνολογία

  • Η Python είναι μια ερμηνευμένη, γενικής χρήσης, υψηλού επιπέδου γλώσσα προγραμματισμού. Το κύριο πλεονέκτημα της γλώσσας είναι μια μεγάλη βιβλιοθήκη μαθηματικών, ML και AI βιβλιοθηκών. Όπως το ObjectScript, είναι μια αντικειμενοστραφή γλώσσα, αλλά τα πάντα ορίζονται δυναμικά, όχι στατικά. Επίσης όλα είναι αντικείμενο. Τα μεταγενέστερα άρθρα προϋποθέτουν μια παροδική εξοικείωση με τη γλώσσα. Εάν θέλετε να αρχίσετε να μαθαίνετε, σας συνιστώ να ξεκινήσετε με τεκμηρίωση.
  • Για τις επόμενες ασκήσεις μας, σετ Python 3.6.7 64bit.
  • IDE: Χρησιμοποιώ PyCharm, αλλά γενικά много. Εάν χρησιμοποιείτε το Atelier, υπάρχει ένα πρόσθετο Eclipse για προγραμματιστές Python. Εάν χρησιμοποιείτε κώδικα VS, τότε υπάρχει επέκταση Python.
  • Σημειωματάριο: Αντί για IDE, μπορείτε να γράψετε και να μοιραστείτε τα σενάρια σας σε ηλεκτρονικά σημειωματάρια. Το πιο δημοφιλές από αυτά είναι jupyter.

βιβλιοθήκες

Ακολουθεί μια (μερική) λίστα βιβλιοθηκών μηχανικής εκμάθησης:

  • Νούμπι — ένα θεμελιώδες πακέτο για ακριβείς υπολογισμούς.
  • Πάντα — Δομές δεδομένων υψηλής απόδοσης και εργαλεία ανάλυσης δεδομένων.
  • matplotlib - Δημιουργία διαγραμμάτων.
  • Θαλασσοπόρος - Οπτικοποίηση δεδομένων με βάση το matplotlib.
  • Sklearn — μέθοδοι μηχανικής μάθησης.
  • XGBoost — Αλγόριθμοι μηχανικής μάθησης εντός της μεθοδολογίας Gradient Boosting.
  • Τζένσιμ — NLP.
  • Keras - νευρωνικά δίκτυα.
  • Τάση ροής είναι μια πλατφόρμα για τη δημιουργία μοντέλων μηχανικής μάθησης.
  • PyTorch είναι μια πλατφόρμα για τη δημιουργία μοντέλων μηχανικής μάθησης που επικεντρώνονται στην Python.
  • Nyoka - PMML από διάφορα μοντέλα.

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

Εγκατάσταση

Υπάρχουν διάφοροι τρόποι εγκατάστασης και χρήσης Python Gateway:

  • OS
    • Windows
    • Linux
    • Mac
  • Λιμενεργάτης
    • Χρησιμοποιήστε την εικόνα από το DockerHub
    • Δημιουργήστε τη δική σας εικόνα

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

OS

Εάν εγκαθιστάτε το Python Gateway σε ένα λειτουργικό σύστημα, τότε πρώτα (ανεξάρτητα από το λειτουργικό σύστημα) πρέπει να εγκαταστήσετε την Python. Για αυτό:

  1. Εγκαταστήστε την Python 3.6.7 64 bit. Συνιστάται η εγκατάσταση της Python στον προεπιλεγμένο κατάλογο.
  2. Εγκαταστήστε τη μονάδα dill: pip install dill.
  3. Κάντε λήψη του κώδικα ObjectScript (δηλ. do $system.OBJ.ImportDir("C:InterSystemsReposPythoniscpy", "*.cls", "c",,1)) σε οποιαδήποτε περιοχή με προϊόντα. Σε περίπτωση που θέλετε μια υπάρχουσα περιοχή να υποστηρίζει προϊόντα, εκτελέστε: write ##class(%EnsembleMgr).EnableNamespace($Namespace, 1).
  4. Θέση επεξήγηση DLL/SO/DYLIB σε ένα φάκελο bin την παρουσία σας InterSystems IRIS. Το αρχείο της βιβλιοθήκης πρέπει να είναι διαθέσιμο στη διαδρομή που επιστρέφεται από write ##class(isc.py.Callout).GetLib().

Windows

  1. Βεβαιωθείτε ότι η μεταβλητή περιβάλλοντος είναι PYTHONHOME δείχνει στην Python 3.6.7.
  2. Βεβαιωθείτε ότι η μεταβλητή περιβάλλοντος συστήματος είναι PATH περιέχει μια μεταβλητή PYTHONHOME (ή τον κατάλογο στον οποίο δείχνει).

Linux (Debian/Ubuntu)

  1. Ελέγξτε εάν η μεταβλητή περιβάλλοντος είναι PATH περιέχει /usr/lib и /usr/lib/x86_64-linux-gnu. Χρησιμοποιήστε το Αρχείο /etc/environment για να ορίσετε μεταβλητές περιβάλλοντος.
  2. Σε περίπτωση λαθών undefined symbol: _Py_TrueStruct ορίστε τη ρύθμιση PythonLib. επίσης σε readme υπάρχει μια ενότητα Αντιμετώπιση προβλημάτων.

Mac

  1. Προς το παρόν μόνο η python 3.6.7 υποστηρίζεται από python.org. Ελέγξτε τη μεταβλητή PATH.

Εάν έχετε αλλάξει μεταβλητές περιβάλλοντος, επανεκκινήστε το προϊόν InterSystems.

Λιμενεργάτης

Η χρήση δοχείων έχει πολλά πλεονεκτήματα:

  • Φορητότητα
  • Αποτελεσματικότητα
  • Μόνωση
  • Ελαφρότητα
  • Αμετάβλητο

Δείτε αυτό μια σειρά άρθρων για περισσότερες πληροφορίες σχετικά με τη χρήση του Docker με τα προϊόντα InterSystems.

Όλες οι εκδόσεις Python Gateway βασίζονται αυτήν τη στιγμή σε κοντέινερ. 2019.4.

Έτοιμη εικόνα

Τρέξιμο: docker run -d -p 52773:52773 --name irispy intersystemscommunity/irispy-community:latestγια λήψη και εκτέλεση του Python Gateway με την InterSystems IRIS Community Edition. Αυτό είναι όλο.

Δημιουργήστε τη δική σας εικόνα

Για να δημιουργήσετε μια εικόνα docker, εκτελέστε τη ρίζα του αποθετηρίου: docker build --force-rm --tag intersystemscommunity/irispy:latest ..
Από προεπιλογή, η εικόνα δημιουργείται με βάση την εικόνα store/intersystems/iris-community:2019.4.0.383.0, ωστόσο μπορείτε να το αλλάξετε αυτό ορίζοντας τη μεταβλητή IMAGE.
Για δημιουργία από το InterSystems IRIS εκτελέστε: «δόκερ build --build-arg IMAGE=store/intersystems/iris:2019.4.0.383.0 --force-rm --tag intersystemscommunity/irispy:latest».

Μετά από αυτό, μπορείτε να εκτελέσετε την εικόνα docker:

docker run -d 
  -p 52773:52773 
  -v /<HOST-DIR-WITH-iris.key>/:/mount 
  --name irispy 
  intersystemscommunity/irispy:latest 
  --key /mount/iris.key

Εάν χρησιμοποιείτε μια εικόνα που βασίζεται στο InterSystems IRIS Community Edition, μπορείτε να παραλείψετε το κλειδί.

Σχόλια

  • Διαδικασία δοκιμής isc.py.test.Process αποθηκεύει έναν αριθμό εικόνων σε έναν προσωρινό κατάλογο. Ίσως θέλετε να αλλάξετε αυτήν τη διαδρομή σε έναν προσαρτημένο κατάλογο. Για να το κάνετε αυτό, επεξεργαστείτε τη ρύθμιση WorkingDir καθορίζοντας τον προσαρτημένο κατάλογο.
  • Για πρόσβαση στο τερματικό, εκτελέστε: docker exec -it irispy sh.
  • Πρόσβαση στην Πύλη Διαχείρισης Συστήματος μέσω σύνδεσης SuperUser/SYS.
  • Για να σταματήσετε ένα κοντέινερ, εκτελέστε: docker stop irispy && docker rm --force irispy.

Επαλήθευση της εγκατάστασης

Αφού εγκαταστήσετε το Python Gateway, αξίζει να ελέγξετε ότι λειτουργεί. Εκτελέστε αυτόν τον κωδικό στο τερματικό InterSystems IRIS:

set sc = ##class(isc.py.Callout).Setup() 
set sc = ##class(isc.py.Main).SimpleString("x='HELLO'", "x", , .var).
write var

Το αποτέλεσμα πρέπει να είναι HELLO - την τιμή της μεταβλητής Python x. Εάν η κατάσταση επιστροφής sc είναι λάθος ή var άδεια, ελέγξτε Readme—Ενότητα αντιμετώπισης προβλημάτων.

API

Το Python Gateway είναι εγκατεστημένο και έχετε επαληθεύσει ότι λειτουργεί. Ώρα να αρχίσετε να το χρησιμοποιείτε!
Η κύρια διεπαφή για την Python είναι isc.py.Main. Προσφέρει τις ακόλουθες ομάδες μεθόδων (όλες επιστρέφουν %Status):

  • Εκτέλεση κώδικα
  • Μεταφορά δεδομένων
  • Βοηθητική

Εκτέλεση κώδικα

Αυτές οι μέθοδοι σας επιτρέπουν να εκτελέσετε αυθαίρετο κώδικα Python.

SimpleString

SimpleString είναι η κύρια μέθοδος. Χρειάζονται 4 προαιρετικά ορίσματα:

  • code είναι η γραμμή κώδικα που πρέπει να εκτελεστεί. Χαρακτήρας ροής γραμμής: $c(10).
  • returnVariable είναι το όνομα της μεταβλητής προς επιστροφή.
  • serialization - πώς να κάνετε σειριακή returnVariable. 0 - συμβολοσειρά (προεπιλογή), 1 - αναπ.
  • result - Αναφορά ByRef στη μεταβλητή στην οποία είναι γραμμένη η τιμή returnVariable.

Πιο πάνω έχουμε κάνει:

set sc = ##class(isc.py.Main).SimpleString("x='HELLO'", "x", , .var).

Σε αυτό το παράδειγμα, εκχωρούμε σε μια μεταβλητή Python x αξία Hello και θέλετε να επιστρέψετε την τιμή μιας μεταβλητής Python x σε μια μεταβλητή ObjectScript var.

ExecuteCode

Το ExecuteCode είναι μια ασφαλέστερη και λιγότερο περιοριστική εναλλακτική SimpleString.
Οι γραμμές στην πλατφόρμα InterSystems IRIS περιορίζονται σε 3 χαρακτήρες και αν θέλετε να εκτελέσετε ένα μεγαλύτερο κομμάτι κώδικα, πρέπει να χρησιμοποιήσετε ροές.
Χρειάζονται δύο επιχειρήματα:

  • code — μια συμβολοσειρά ή ροή κώδικα Python που πρόκειται να εκτελεστεί.
  • variable - (προαιρετικό) εκχωρεί το αποτέλεσμα της εκτέλεσης code αυτή η μεταβλητή Python.

Προτείνετε να χρησιμοποιήσετε:

set sc = ##class(isc.py.Main).ExecuteCode("2*3", "y").

Σε αυτό το παράδειγμα, πολλαπλασιάζουμε το 2 επί 3 και αποθηκεύουμε το αποτέλεσμα σε μια μεταβλητή Python y.

Μεταφορά δεδομένων

Περάστε δεδομένα από και προς την Python.

Python -> InterSystems IRIS

Υπάρχουν 4 τρόποι για να λάβετε την τιμή μιας μεταβλητής Python στο InterSystems IRIS, ανάλογα με τη σειριοποίηση που χρειάζεστε:

  • String για απλούς τύπους δεδομένων και εντοπισμό σφαλμάτων.
  • Repr για την αποθήκευση απλών αντικειμένων και τον εντοπισμό σφαλμάτων.
  • JSON για εύκολο χειρισμό δεδομένων στην πλευρά IRIS της InterSystems.
  • Pickle για να αποθηκεύσετε αντικείμενα.

Αυτές οι μέθοδοι σάς επιτρέπουν να λαμβάνετε μεταβλητές από την Python ως συμβολοσειρά ή ως ροές.

  • GetVariable(variable, serialization, .stream, useString) - πάρε serialization μεταβλητός variable в stream. Αν useString είναι 1 και η σειριοποίηση τοποθετείται σε μια συμβολοσειρά, μετά επιστρέφεται μια συμβολοσειρά, όχι μια ροή.
  • GetVariableJson(variable, .stream, useString) — λάβετε σειριοποίηση JSON μιας μεταβλητής.
  • GetVariablePickle(variable, .stream, useString, useDill) -Λάβετε μια σειριοποίηση μιας μεταβλητής Pickle (ή Dill).

Ας προσπαθήσουμε να πάρουμε τη μεταβλητή μας y.

set sc = ##class(isc.py.Main).GetVariable("y", , .val, 1)
write val
>6

InterSystems IRIS -> Python

Φόρτωση δεδομένων από το InterSystems IRIS στην Python.

  • ExecuteQuery(query, variable, type, namespace) - δημιουργεί ένα σύνολο δεδομένων (pandas dataframe ή list) από το ερώτημα sql και ορίστε το σε μεταβλητή python variable. Πλαστική σακούλα isc.py θα πρέπει να είναι διαθέσιμο στην περιοχή namespace - το αίτημα θα εκτελεστεί εκεί.
  • ExecuteGlobal(global, variable, type, start, end, mask, labels, namespace) - φορτώνει παγκόσμια δεδομένα global από τον δείκτη start να end στην Python ως μεταβλητή τύπου type: list, ή τα πάντα dataframe. Περιγραφή προαιρετικών ορισμάτων mask και labels διαθέσιμο στην τεκμηρίωση και το αποθετήριο της τάξης Έγγραφα μεταφοράς δεδομένων.
  • ExecuteClass(class, variable, type, start, end, properties, namespace) - φορτώνει δεδομένα κλάσης class από id start να end στην Python ως μεταβλητή τύπου type: list, ή τα πάντα dataframe. properties — λίστα (διαχωρισμένη με κόμμα) των ιδιοτήτων κλάσης που θα φορτωθούν στο σύνολο δεδομένων. Υποστηρίζονται μάσκες * и ?. Προκαθορισμένο - * (όλα τα ακίνητα). Ιδιοκτησία %%CLASSNAME αγνόησε.
  • ExecuteTable(table, variable, type, start, end, properties, namespace) - φορτώνει δεδομένα πίνακα table από id start να end σε python.

ExecuteQuery - καθολική (οποιοδήποτε έγκυρο ερώτημα SQL θα περάσει στην Python). Ωστόσο, ExecuteGlobal και τα περιτυλίγματα του ExecuteClass и ExecuteTable λειτουργούν με διάφορους περιορισμούς. Είναι πολύ πιο γρήγορα (3-5 φορές πιο γρήγορα από το πρόγραμμα οδήγησης ODBC και 20 φορές πιο γρήγορα από ExecuteQuery). Περισσότερες πληροφορίες στο Έγγραφα μεταφοράς δεδομένων.
Όλες αυτές οι μέθοδοι υποστηρίζουν τη μεταφορά δεδομένων από οποιαδήποτε περιοχή. Πλαστική σακούλα isc.py πρέπει να είναι διαθέσιμο στην περιοχή στόχο.

ExecuteQuery

ExecuteQuery(request, variable, type, namespace) - μεταβίβαση των αποτελεσμάτων οποιουδήποτε έγκυρου ερωτήματος SQL στην Python. Αυτή είναι η πιο αργή μέθοδος μεταφοράς δεδομένων. Χρησιμοποιήστε το εάν ExecuteGlobal και τα περιτυλίγματα του δεν είναι διαθέσιμα.

Επιχειρήματα:

  • query - ερώτημα sql.
  • variable - το όνομα της μεταβλητής Python στην οποία είναι γραμμένα τα δεδομένα.
  • type - list ή τα πάντα dataframe.
  • namespace - την περιοχή στην οποία θα εκτελεστεί το αίτημα.

ExecuteGlobal

ExecuteGlobal(global, variable, type, start, end, mask, labelels, namespace) - μεταβίβαση ενός παγκόσμιου στην Python.

Επιχειρήματα:

  • global είναι το όνομα του παγκόσμιου χωρίς ^
  • variable - το όνομα της μεταβλητής Python στην οποία είναι γραμμένα τα δεδομένα.
  • type - list ή τα πάντα dataframe.
  • start — ο πρώτος δείκτης του παγκόσμιου. Αναγκαίως %Integer.
  • end είναι ο τελευταίος δείκτης του παγκόσμιου. Αναγκαίως %Integer.
  • mask — μάσκα παγκόσμιων αξιών. Η μάσκα μπορεί να είναι μικρότερη από τον αριθμό των πεδίων στο καθολικό (οπότε τα πεδία στο τέλος θα παραβλεφθούν). Πώς να διαμορφώσετε τη μάσκα:
    • + περάστε την τιμή ως έχει.
    • - παράβλεψη αξίας.
    • b — Boolean τύπος (0 - False, όλα τα υπόλοιπα - True).
    • d — Ημερομηνία (από $horolog, στα Windows από το 1970, στο Linux από το 1900).
    • t - Ώρα ($horolog, δευτερόλεπτα μετά τα μεσάνυχτα).
    • m — Χρονική σήμανση (ΕΤΟΣ-ΜΗΝΑΣ-ΗΜΕΡΑ ΩΡΑ: MINUTE:ΔΕΥΤΕΡΗ συμβολοσειρά μορφής).
  • labels - %Λίστα ονομάτων στηλών. Το πρώτο στοιχείο είναι το όνομα του δείκτη.
  • namespace - την περιοχή στην οποία θα εκτελεστεί το αίτημα.

ExecuteClass

τυλίξτε πάνω ExecuteGlobal. Προετοιμάζει μια κλήση με βάση τον ορισμό της κλάσης ExecuteGlobal και τον καλεί.

ExecuteClass(class, variable, type, start, end, properties, namespace) - μεταβίβαση δεδομένων κλάσης στην Python.

Επιχειρήματα:

  • class - όνομα τάξης
  • variable - το όνομα της μεταβλητής Python στην οποία είναι γραμμένα τα δεδομένα.
  • type - list ή τα πάντα dataframe.
  • start — Id έναρξης.
  • end - τελικό Id
  • properties — λίστα (διαχωρισμένη με κόμμα) των ιδιοτήτων κλάσης που θα φορτωθούν στο σύνολο δεδομένων. Υποστηρίζονται μάσκες * и ?. Προκαθορισμένο - * (όλα τα ακίνητα). Ιδιοκτησία %%CLASSNAME αγνόησε.
  • namespace - την περιοχή στην οποία θα εκτελεστεί το αίτημα.

Όλες οι ιδιότητες μεταβιβάζονται ως έχουν εκτός από τις ιδιότητες τύπου %Date, %Time, %Boolean и %TimeStamp - μετατρέπονται στις αντίστοιχες κλάσεις Python.

ExecuteTable

τυλίξτε πάνω ExecuteClass. Μεταφράζει το όνομα του πίνακα σε όνομα κλάσης και καλεί ExecuteClass. Υπογραφή:

ExecuteTable(table, variable, type, start, end, properties, namespace) - μεταβίβαση δεδομένων πίνακα στην Python.

Επιχειρήματα:

  • table - όνομα πίνακα.
    Όλα τα άλλα επιχειρήματα μεταβιβάζονται ως έχουν. ExecuteClass.

Σημειώσεις

  • ExecuteGlobal, ExecuteClass и ExecuteTable δουλεύουν εξίσου γρήγορα.
  • ExecuteGlobal 20 φορές πιο γρήγορα από ExecuteQuery σε μεγάλα σύνολα δεδομένων (χρόνος μεταφοράς >0.01 δευτερόλεπτο).
  • ExecuteGlobal, ExecuteClass и ExecuteTable εργαστείτε σε παγκόσμιους με αυτήν τη δομή: ^global(key) = $lb(prop1, prop2, ..., propN) όπου key — ένας ακέραιος αριθμός.
  • Για ExecuteGlobal, ExecuteClass и ExecuteTable υποστηριζόμενη περιοχή τιμών %Date αντιστοιχεί στο εύρος mktime και εξαρτάται από το λειτουργικό σύστημαπαράθυρα: 1970-01-01, linux 1900-01-01, mac). Χρήση %TimeStampγια να μεταβιβάσετε δεδομένα εκτός αυτού του εύρους ή να χρησιμοποιήσετε το πλαίσιο δεδομένων pandas ως αυτός ο περιορισμός είναι μόνο για τη λίστα.
  • Για ExecuteGlobal, ExecuteClass и ExecuteTable όλα τα ορίσματα εκτός από την πηγή δεδομένων (καθολική, κλάση ή πίνακα) και τη μεταβλητή είναι προαιρετικά.

παραδείγματα

τάξη δοκιμής isc.py.test.Person περιέχει μια μέθοδο που δείχνει όλες τις επιλογές μεταφοράς δεδομένων:

set global = "isc.py.test.PersonD"
set class = "isc.py.test.Person"
set table = "isc_py_test.Person"
set query = "SELECT * FROM isc_py_test.Person"

// Общие аргументы
set variable = "df"
set type = "dataframe"
set start = 1
set end = $g(^isc.py.test.PersonD, start)

// Способ 0: ExecuteGlobal без аргументов
set sc = ##class(isc.py.Main).ExecuteGlobal(global, variable _ 0, type)

// Способ 1: ExecuteGlobal с аргументами    
// При передаче глобала названия полей задаются вручную
// globalKey - название сабсткрипта 
set labels = $lb("globalKey", "Name", "DOB", "TS", "RandomTime", "AgeYears", "AgeDecimal", "AgeDouble", "Bool")

// mask содержит на 1 элемент меньше чем labels потому что "globalKey" - название сабскипта
// Пропускаем %%CLASSNAME
set mask = "-+dmt+++b"

set sc = ##class(isc.py.Main).ExecuteGlobal(global, variable _ 1, type, start, end, mask, labels)

// Способ 2: ExecuteClass
set sc = ##class(isc.py.Main).ExecuteClass(class, variable _ 2, type, start, end)

// Способ 3: ExecuteTable
set sc = ##class(isc.py.Main).ExecuteTable(table, variable _ 3, type, start, end)

// Способ 4: ExecuteTable
set sc = ##class(isc.py.Main).ExecuteQuery(query, variable _ 4, type)

μέθοδος κλήσης do ##class(isc.py.test.Person).Test() για να δείτε πώς λειτουργούν όλες οι μέθοδοι μεταφοράς δεδομένων.

Βοηθητικές Μέθοδοι

  • GetVariableInfo(variable, serialization, .defined, .type, .length) - λάβετε πληροφορίες σχετικά με τη μεταβλητή: εάν είναι καθορισμένη, τάξη και μήκος σειριοποίησης.
  • GetVariableDefined(variable, .defined) - εάν ορίζεται η μεταβλητή.
  • GetVariableType(variable, .type) - πάρτε την κλάση της μεταβλητής.
  • GetStatus() - λάβετε και αφαιρέστε την τελευταία εξαίρεση στην πλευρά της Python.
  • GetModuleInfo(module, .imported, .alias) — λήψη μεταβλητής μονάδας και κατάσταση εισαγωγής.
  • GetFunctionInfo(function, .defined, .type, .docs, .signature, .arguments) - λάβετε πληροφορίες σχετικά με τη λειτουργία.

Διαλειτουργικότητα

Έχετε μάθει πώς να καλείτε το Python Gateway από το τερματικό, τώρα ας αρχίσουμε να το χρησιμοποιούμε στην παραγωγή. Η βάση για την αλληλεπίδραση με την Python σε αυτή τη λειτουργία είναι isc.py.ens.Operation. Μας επιτρέπει:

  • Εκτέλεση κώδικα Python
  • Αποθήκευση/Επαναφορά περιβάλλοντος Python
  • Φόρτωση και λήψη δεδομένων από την Python

Βασικά, μια λειτουργία Pyhton είναι ένα wrapper over isc.py.Main. Λειτουργία isc.py.ens.Operation επιτρέπει την αλληλεπίδραση με τη διαδικασία Python από τα προϊόντα IRIS της InterSystems. Υποστηρίζονται πέντε αιτήματα:

  • isc.py.msg.ExecutionRequest για εκτέλεση κώδικα Python. επιστρέφει isc.py.msg.ExecutionResponse με το αποτέλεσμα εκτέλεσης και τις τιμές των ζητούμενων μεταβλητών.
  • isc.py.msg.StreamExecutionRequest για εκτέλεση κώδικα Python. επιστρέφει isc.py.msg.StreamExecutionResponse το αποτέλεσμα της εκτέλεσης και τις τιμές των ζητούμενων μεταβλητών. Αναλογικό isc.py.msg.ExecutionRequest, αλλά δέχεται και επιστρέφει ροές αντί για συμβολοσειρές.
  • isc.py.msg.QueryRequest για να μεταφέρετε το αποτέλεσμα της εκτέλεσης ενός ερωτήματος SQL. επιστρέφει Ens.Response.
  • isc.py.msg.GlobalRequest/isc.py.msg.ClassRequest/isc.py.msg.TableRequest για τη διαβίβαση δεδομένων καθολικών/τάξεων/πίνακα. επιστρέφει Ens.Response.
  • isc.py.msg.SaveRequest για να αποθηκεύσετε το πλαίσιο Python. επιστρέφει Ens.StringResponse με αναγνωριστικό περιβάλλοντος.
  • isc.py.msg.RestoreRequest για να επαναφέρετε το περιβάλλον Python.

    Περαιτέρω, isc.py.ens.Operation έχει δύο ρυθμίσεις:

    • Initializer - επιλογή κλάσης που υλοποιεί τη διεπαφή isc.py.init.Abstract. Μπορεί να χρησιμοποιηθεί για τη φόρτωση συναρτήσεων, μονάδων, κλάσεων και τα παρόμοια. Εκτελείται μία φορά όταν ξεκινά η διαδικασία.
    • PythonLib - (μόνο Linux) εάν βλέπετε σφάλματα εκκίνησης, ορίστε την τιμή του σε libpython3.6m.so ή ακόμα και στην πλήρη διαδρομή προς τη βιβλιοθήκη Python.

Δημιουργία επιχειρηματικών διαδικασιών

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

  • isc.py.ens.ProcessUtils σας επιτρέπει να εξαγάγετε σχολιασμούς από δραστηριότητες με αντικατάσταση μεταβλητών.
  • isc.py.util.BPEmulator διευκολύνει τον έλεγχο επιχειρηματικών διαδικασιών με την Python. Μπορεί να εκτελέσει μια επιχειρηματική διαδικασία (τμήματα Python) στην τρέχουσα διαδικασία.

Αντικατάσταση μεταβλητής

Όλες οι επιχειρηματικές διαδικασίες που κληρονομήθηκαν από isc.py.ens.ProcessUtils, μπορεί να χρησιμοποιήσει τη μέθοδο GetAnnotation(name) για να λάβετε την αξία ενός σχολιασμού δραστηριότητας με το όνομά του. Ο σχολιασμός δραστηριότητας μπορεί να περιέχει μεταβλητές που θα αξιολογηθούν στην πλευρά του InterSystems IRIS πριν περάσουν στην Python. Εδώ είναι η σύνταξη για την αντικατάσταση μεταβλητής:

  • ${class:method:arg1:...:argN} - κλήση μεθόδου
  • #{expr} - εκτέλεση κώδικα στη γλώσσα ObjectScript.

Ένα παράδειγμα είναι διαθέσιμο στη δοκιμαστική επιχειρηματική διαδικασία isc.py.test.Process, για παράδειγμα, στη δραστηριότητα Correlation Matrix: Graph: f.savefig(r'#{process.WorkDirectory}SHOWCASE${%PopulateUtils:Integer:1:100}.png'). Σε αυτό το παράδειγμα:

  • #{process.WorkDirectory} επιστρέφει την ιδιότητα WorkDirectory του αντικειμένου process, που είναι ένα παράδειγμα της τάξης isc.py.test.Process εκείνοι. τρέχουσα επιχειρηματική διαδικασία.
  • ${%PopulateUtils:Integer:1:100} καλεί μια μέθοδο Integer κατηγορία %PopulateUtils, περνώντας επιχειρήματα 1 и 100, επιστρέφοντας έναν τυχαίο ακέραιο στην περιοχή 1...100.

Δοκιμή επιχειρηματικής διαδικασίας

Η δοκιμαστική παραγωγή και η επιχειρηματική διαδικασία δοκιμής είναι διαθέσιμες από προεπιλογή ως μέρος της πύλης Python. Για να τα χρησιμοποιήσετε:

  1. Στην εκτέλεση τερματικού λειτουργικού συστήματος: pip install pandas matplotlib seaborn.
  2. Στο τερματικό InterSystems IRIS, εκτελέστε: do ##class(isc.py.test.CannibalizationData).Import() για συμπλήρωση δεδομένων δοκιμής.
  3. Παρουσίαση προϊόντων isc.py.test.Production.
  4. Τύπος αιτήματος αποστολής Ens.Request в isc.py.test.Process.

Ας δούμε πώς λειτουργούν όλα μαζί. Ανοιξε isc.py.test.Process στον επεξεργαστή BPL:

Python Gateway στο InterSystems IRIS

Εκτέλεση κώδικα

Η πιο σημαντική κλήση είναι η εκτέλεση κώδικα Python:

Python Gateway στο InterSystems IRIS

Χρησιμοποιήθηκε το αίτημα isc.py.msg.ExecutionRequest, ορίστε οι ιδιότητές του:

  • Code — Κώδικας Python.
  • SeparateLines - εάν θα χωριστεί ο κώδικας σε γραμμές για εκτέλεση. $c(10) (n) χρησιμοποιείται για τον διαχωρισμό συμβολοσειρών. Σημειώστε ότι ΔΕΝ συνιστάται η επεξεργασία ολόκληρου του μηνύματος ταυτόχρονα, αυτή η λειτουργία είναι μόνο για επεξεργασία def και παρόμοιες εκφράσεις πολλαπλών γραμμών. Προκαθορισμένο 0.
  • Variables είναι μια λίστα μεταβλητών διαχωρισμένων με κόμματα που θα προστεθούν στην απάντηση.
  • Serialization - Πώς να σειριοποιήσουμε τις μεταβλητές που θέλουμε να επιστρέψουμε. Επιλογές: Str, Repr, JSON, Pickle и Dill, Προκαθορισμένο Str.

Στην περίπτωσή μας, ορίζουμε μόνο την ιδιοκτησία Code, έτσι ώστε όλες οι άλλες ιδιότητες να χρησιμοποιούν τις προεπιλεγμένες τιμές τους. Το ρυθμίσαμε καλώντας process.GetAnnotation("Import pandas"), το οποίο κατά το χρόνο εκτέλεσης επιστρέφει έναν σχολιασμό μετά την εκτέλεση της αντικατάστασης μεταβλητής. Τέλος ο κωδικός import pandas as pd θα περάσουν στην Python. GetAnnotation μπορεί να είναι χρήσιμο για τη λήψη σεναρίων Python πολλαπλών γραμμών, αλλά δεν υπάρχουν περιορισμοί σε αυτόν τον τρόπο λήψης κώδικα. Μπορείτε να ορίσετε την ιδιοκτησία Code με κάθε τρόπο που σας βολεύει.

Λήψη μεταβλητών

Μια άλλη ενδιαφέρουσα πρόκληση χρησιμοποιώντας isc.py.msg.ExecutionRequest - Correlation Matrix: Tabular:

Python Gateway στο InterSystems IRIS

Υπολογίζει τον πίνακα συσχέτισης στην πλευρά της Python και εξάγει τη μεταβλητή corrmat επιστροφή στο InterSystems IRIS σε μορφή JSON ορίζοντας τις ιδιότητες αιτήματος:

  • Variables: "corrmat"
  • Serialization: "JSON"

Μπορούμε να δούμε τα αποτελέσματα στο Visual Trace:

Python Gateway στο InterSystems IRIS

Και αν χρειαζόμαστε αυτήν την τιμή στο BP, μπορεί να ληφθεί ως εξής: callresponse.Variables.GetAt("corrmat").

Μεταφορά δεδομένων

Στη συνέχεια, ας μιλήσουμε για τη μεταφορά δεδομένων από το InterSystems IRIS στην Python, όλα τα αιτήματα μεταφοράς δεδομένων υλοποιούν τη διεπαφή isc.py.msg.DataRequest, το οποίο παρέχει τις ακόλουθες ιδιότητες:

  • Variable είναι μια μεταβλητή Python στην οποία γράφονται τα δεδομένα.
  • Type - μεταβλητός τύπος: dataframe (πλαίσιο δεδομένων pandas) ή list.
  • Namespace - την περιοχή από την οποία λαμβάνουμε δεδομένα. Πλαστική σακούλα isc.py θα πρέπει να είναι διαθέσιμο σε αυτόν τον τομέα. Αυτή μπορεί να είναι μια περιοχή χωρίς υποστήριξη προϊόντος.

Με βάση αυτή τη διεπαφή, υλοποιούνται 4 κατηγορίες αιτημάτων:

  • isc.py.msg.QueryRequest - ορίστε ιδιότητα Query για αποστολή ερωτήματος SQL.
  • isc.py.msg.ClassRequest - ορίστε ιδιότητα Class για να μεταβιβάσετε δεδομένα τάξης.
  • isc.py.msg.TableRequest - ορίστε ιδιότητα Table για να μεταβιβάσετε δεδομένα πίνακα.
  • isc.py.msg.GlobalRequest - ορίστε ιδιότητα Global για μεταφορά δεδομένων παγκοσμίως.

Στη διαδικασία δοκιμής, δείτε τη δραστηριότητα RAWΌπου isc.py.msg.QueryRequest φαίνεται στην πράξη.

Python Gateway στο InterSystems IRIS

Αποθήκευση/Επαναφορά ενός περιβάλλοντος Python

Τέλος, μπορούμε να αποθηκεύσουμε το περιβάλλον Python στο InterSystems IRIS, για να το κάνουμε αυτό, στείλτε isc.py.msg.SaveRequest με επιχειρήματα:

  • Mask — Αποθηκεύονται μόνο οι μεταβλητές που ικανοποιούν τη μάσκα. Υποστηρίζεται * и ?. Ένα παράδειγμα: "Data*, Figure?". Προκαθορισμένο *.
  • MaxLength — Το μέγιστο μήκος της αποθηκευμένης μεταβλητής. Εάν η σειριοποίηση μιας μεταβλητής είναι μεγαλύτερη, τότε θα αγνοηθεί. Ορίστε στο 0 για να λάβετε μεταβλητές οποιουδήποτε μήκους. Προκαθορισμένο $$$MaxStringLength.
  • Name — Όνομα περιβάλλοντος (προαιρετικό).
  • Description — Περιγραφή του πλαισίου (προαιρετικό).

Επιστρέφει Ens.StringResponse с Id αποθηκευμένο πλαίσιο. Στη διαδικασία δοκιμής, δείτε τη δραστηριότητα Save Context.

Σχετικό αίτημα isc.py.msg.RestoreRequest φορτώνει ένα περιβάλλον από το InterSystems IRIS στην Python:

  • ContextId είναι το αναγνωριστικό περιβάλλοντος.
  • Clear — εκκαθαρίστε το πλαίσιο πριν από την επαναφορά.

Jupyter Notebook

Jupyter Notebook είναι μια διαδικτυακή εφαρμογή ανοιχτού κώδικα που σας επιτρέπει να δημιουργείτε και να δημοσιεύετε σημειωματάρια που περιέχουν κώδικα, απεικονίσεις και κείμενο. Το Python Gateway σάς επιτρέπει να προβάλλετε και να επεξεργάζεστε διεργασίες BPL ως Σημειωματάριο Jupyter. Σημειώστε ότι αυτή τη στιγμή χρησιμοποιείται ο κανονικός εκτελεστής Python 3.

Αυτή η επέκταση προϋποθέτει ότι οι σχολιασμοί περιέχουν κώδικα Python και χρησιμοποιούν ονόματα δραστηριοτήτων ως προηγούμενους τίτλους. Είναι πλέον δυνατή η ανάπτυξη επιχειρηματικών διαδικασιών PythonGateway στο Jupyter Notebook. Να τι είναι δυνατό:

  • Δημιουργήστε νέες επιχειρηματικές διαδικασίες
  • Διαγραφή επιχειρηματικών διαδικασιών
  • Δημιουργήστε νέες δραστηριότητες
  • Αλλαγή δραστηριοτήτων
  • Διαγραφή δραστηριοτήτων

Εδώ βίντεο επίδειξης. Και μερικά στιγμιότυπα οθόνης:

Εξερεύνηση διεργασιών

Python Gateway στο InterSystems IRIS

Επεξεργαστής διαδικασίας

Python Gateway στο InterSystems IRIS

Εγκατάσταση

  1. Θα χρειαστείτε το InterSystems IRIS 2019.2+.
  2. Εγκαταστήστε το PythonGateway v0.8+ (απαιτείται μόνο isc.py.util.Jupyter, isc.py.util.JupyterCheckpoints и isc.py.ens.ProcessUtils).
  3. Ενημερώστε τον κώδικα ObjectScript από το αποθετήριο.
  4. Εκτέλεση do ##class(isc.py.util.Jupyter).Install() και ακολουθήστε τις οδηγίες.

Εγγραφές.

Ευρήματα

Το MLToolkit είναι ένα σύνολο εργαλείων που στοχεύει να συνδυάσει μοντέλα και περιβάλλον συναλλαγών, έτσι ώστε τα ενσωματωμένα μοντέλα να μπορούν εύκολα να χρησιμοποιηθούν απευθείας στις επιχειρηματικές σας διαδικασίες. Το Python Gateway είναι μέρος του MLToolkit και παρέχει ενοποίηση με τη γλώσσα Python, επιτρέποντάς σας να ενορχηστρώνετε οποιουσδήποτε αλγόριθμους μηχανικής μάθησης που δημιουργήθηκαν στην Python (το κύριο περιβάλλον για πολλούς Επιστήμονες Δεδομένων), να χρησιμοποιήσετε πολλές έτοιμες βιβλιοθήκες για να δημιουργήσετε γρήγορα προσαρμοστικό, ρομποτικό αναλυτικό AI / Λύσεις ML στην πλατφόρμα InterSystems IRIS.

παραπομπές

MLToolkit

Η ομάδα χρηστών MLToolkit είναι ένα ιδιωτικό αποθετήριο GitHub που δημιουργήθηκε ως μέρος του εταιρικού οργανισμού GitHub της InterSystems. Απευθύνεται σε εξωτερικούς χρήστες που εγκαθιστούν, μαθαίνουν ή χρησιμοποιούν ήδη στοιχεία MLToolkit, συμπεριλαμβανομένης της Python Gateway. Η ομάδα έχει μια σειρά από υλοποιημένες περιπτώσεις (με πηγαίο κώδικα και δεδομένα δοκιμών) στους τομείς του μάρκετινγκ, της μεταποίησης, της ιατρικής και πολλών άλλων βιομηχανιών. Για να εγγραφείτε στην ομάδα χρηστών ML Toolkit, στείλτε ένα σύντομο email στην ακόλουθη διεύθυνση: [προστασία μέσω email] και συμπεριλάβετε τις ακόλουθες πληροφορίες στην επιστολή σας:

  • Όνομα χρήστη GitHub
  • Οργάνωση (εργάζεστε ή σπουδάζετε)
  • Θέση (η πραγματική θέση σας στον οργανισμό σας, είτε "Φοιτητής" είτε "Ανεξάρτητος").
  • Χώρα

Για όσους έχουν διαβάσει το άρθρο και ενδιαφέρονται για το InterSystems IRIS ως πλατφόρμα για την ανάπτυξη ή τη φιλοξενία μηχανισμών τεχνητής νοημοσύνης και μηχανικής μάθησης, σας προσκαλούμε να συζητήσετε πιθανά σενάρια που ενδιαφέρουν την επιχείρησή σας. Θα αναλύσουμε εύκολα τις ανάγκες της επιχείρησής σας και θα καθορίσουμε από κοινού ένα σχέδιο δράσης. διεύθυνση ηλεκτρονικού ταχυδρομείου επικοινωνίας της ομάδας μας εμπειρογνωμόνων AI/ML – [προστασία μέσω email].

Πηγή: www.habr.com

Προσθέστε ένα σχόλιο