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.Toolkit.

מבוא

Python היא שפת תכנות ברמה גבוהה עם מטרה כללית המתמקדת בשיפור פרודוקטיביות מפתחים וקריאות קוד. בסדרת מאמרים זו, אדבר על אפשרויות השימוש בשפת Python בפלטפורמת InterSystems IRIS, כאשר המוקד העיקרי של מאמר זה הוא השימוש ב- Python כשפה ליצירה ויישום מודלים של למידת מכונה.

למידת מכונה (ML) היא מחלקה של שיטות בינה מלאכותית, שהתכונה האופיינית להן אינה פתרון ישיר של בעיה, אלא למידה בתהליך של פתרון בעיות דומות רבות.

אלגוריתמים ומודלים של למידת מכונה הופכים נפוצים יותר ויותר. יש לכך סיבות רבות, אבל הכל מסתכם בנגישות, פשטות והשגת תוצאות מעשיות. האם יצירת מודלים של רשתות עצביות או אפילו רשתות עצבים הן טכנולוגיה חדשה?

כמובן שלא, אבל כיום אין צורך לכתוב מאות אלפי שורות קוד כדי להפעיל מודל אחד, ועלויות היצירה והיישום של מודלים הולכות וקטנות.

הכלים מתפתחים - בעוד שאין לנו כלים AI/ML מוכווני GUI לחלוטין, ניכרת גם ההתקדמות שראינו עם מחלקות רבות אחרות של מערכות מידע כמו BI (מכתיבת קוד לשימוש במסגרות ופתרונות ניתנים להגדרה מוכווני GUI) . בכלים ליצירת AI/ML. כבר עברנו את שלב כתיבת הקוד וכיום אנו משתמשים במסגרות לבניית והדרכה של מודלים.

שיפורים אחרים, כמו היכולת להפיץ מודל שהוכשר מראש שבו משתמש הקצה צריך פשוט לסיים את אימון המודל על הנתונים הספציפיים שלו, גם מקלים על התחלת יישום למידת מכונה. ההתקדמות הללו מקלה בהרבה על לימוד למידת מכונה, הן עבור אנשי מקצוע והן עבור חברות כולה.

מצד שני, אנחנו אוספים יותר ויותר נתונים. עם פלטפורמת נתונים מאוחדת כמו InterSystems IRIS, ניתן להכין את כל המידע הזה באופן מיידי ולהשתמש בו כקלט עבור מודלים של למידת מכונה.

עם המעבר לענן, השקת פרויקטי AI/ML קלה מאי פעם. אנחנו יכולים לצרוך רק את המשאבים שאנחנו צריכים. יתרה מכך, הודות להקבלה שמציעות פלטפורמות ענן, אנו יכולים לחסוך בזבוז זמן.

אבל מה לגבי תוצאות? כאן הדברים מסתבכים יותר. ישנם כלים רבים לבניית מודלים, עליהם אדון בהמשך. לא קל לבנות מודל טוב, אבל מה הלאה? להרוויח מהשימוש במודל על ידי עסק היא גם משימה לא טריוויאלית. שורש הבעיה הוא ההפרדה בין עומסי עבודה אנליטיים לטרנזקציות ומודלים של נתונים. כאשר אנו מאמנים מודל, אנו בדרך כלל עושים זאת על סמך נתונים היסטוריים. אבל המקום למודל שנבנה הוא בעיבוד נתונים עסקה. מה המודל הטוב ביותר לזיהוי עסקאות הונאה אם ​​נריץ אותו פעם ביום? הרמאים כבר יצאו עם הכסף. אנחנו צריכים להכשיר את המודל על נתונים היסטוריים, אבל אנחנו צריכים גם ליישם אותו בזמן אמת על נתונים נכנסים חדשים כדי שהתהליכים העסקיים שלנו יוכלו לפעול על פי התחזיות שמבוצעות על ידי המודל.

ML Toolkit הוא ערכת כלים שעושה בדיוק את זה: מקרב מודלים וסביבה עסקה כך שניתן יהיה להשתמש בקלות במודלים שאתה בונה ישירות בתהליכים העסקיים שלך. Python Gateway הוא חלק מ-ML Toolkit ומספק אינטגרציה עם שפת Python (בדומה ל-R Gateway, היותו חלק מ-ML Toolkit מספק אינטגרציה עם שפת R).

ערכת כלים

לפני שנמשיך, ברצוני לתאר כמה כלים וספריות של Python שנשתמש בהם מאוחר יותר.

טכנולוגיה

  • Python היא שפת תכנות מפורשת, לשימוש כללי, ברמה גבוהה. היתרון העיקרי של השפה הוא ספרייה גדולה של ספריות מתמטיות, ML ו-AI. כמו ObjectScript, זו שפה מונחה עצמים, אבל הכל מוגדר באופן דינמי, לא סטטי. גם הכל הוא חפץ. מאמרים מאוחרים יותר מניחים היכרות חולפת עם השפה. אם אתה רוצה להתחיל ללמוד, אני ממליץ להתחיל עם תיעוד.
  • לתרגילים הבאים שלנו, הגדר Python 3.6.7 64 סיביות.
  • IDE: אני משתמש פיאצ 'רם, אבל באופן כללי много. אם אתה משתמש ב-Atelier, יש תוסף Eclipse למפתחי Python. אם אתה משתמש בקוד VS, אז יש הרחבה עבור Python.
  • מחברת: במקום IDE, אתה יכול לכתוב ולשתף את הסקריפטים שלך במחברות מקוונות. הפופולרי שבהם הוא יופיטר.

ספריות

הנה רשימה (חלקית) של ספריות למידת מכונה:

  • מטומטם - חבילה בסיסית לחישובים מדויקים.
  • פנדות - מבני נתונים בעלי ביצועים גבוהים וכלי ניתוח נתונים.
  • מטפלוטליב - יצירת תרשימים.
  • יובל ים - הדמיית נתונים המבוססת על matplotlib.
  • סקלרן - שיטות למידת מכונה.
  • XGBoost - אלגוריתמים של למידת מכונה במסגרת מתודולוגיית ה- Gradient Boosting.
  • גנסים - NLP.
  • קרס - רשתות עצביות.
  • זרימת מתיחה היא פלטפורמה ליצירת מודלים של למידת מכונה.
  • PyTorch היא פלטפורמה ליצירת מודלים של למידת מכונה המתמקדים ב-Python.
  • ניוקה - PMML מדגמים שונים.

טכנולוגיות AI/ML הופכות את העסק ליעיל יותר וניתן להתאמה. יתרה מכך, כיום הטכנולוגיות הללו הופכות קלות יותר לפיתוח ויישום. התחל ללמוד על טכנולוגיות AI/ML וכיצד הן יכולות לעזור לארגון שלך לצמוח.

התקנה

ישנן מספר דרכים להתקין ולהשתמש ב- Python Gateway:

  • Less
    • Windows
    • לינוקס
    • Mac
  • סַוָר
    • השתמש בתמונה מ- DockerHub
    • צור מראה משלך

ללא קשר לשיטת ההתקנה, תזדקק לקוד המקור. המקום היחיד להוריד את הקוד הוא עמוד משחרר. הוא מכיל מהדורות יציבות שנבדקו, פשוט קח את האחרונה. כרגע זה 0.8, אבל עם הזמן יהיו חדשים. אין לשכפל/להוריד את המאגר, הורד את המהדורה האחרונה.

Less

אם אתה מתקין את Python Gateway על מערכת הפעלה, תחילה (ללא קשר למערכת ההפעלה) תצטרך להתקין את Python. לזה:

  1. התקן את Python 3.6.7 64 סיביות. מומלץ להתקין את 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 מצביע על פייתון 3.6.7.
  2. ודא שמשתנה סביבת המערכת הוא PATH מכיל משתנה PYTHONHOME (או הספרייה שהיא מפנה אליה).

לינוקס (דביאן/אובונטו)

  1. בדוק אם משתנה הסביבה הוא PATH מכיל /usr/lib и /usr/lib/x86_64-linux-gnu. השתמש בקובץ /etc/environment כדי להגדיר משתני סביבה.
  2. במקרה של טעויות undefined symbol: _Py_TrueStruct להגדיר את ההגדרה PythonLib. גם ב תקרא אותי יש סעיף פתרון בעיות.

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 הרץ: `docker 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, כדאי לבדוק שהוא עובד. הפעל את הקוד הזה במסוף IRIS של InterSystems:

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 מותקן ואימתת שהוא עובד. הגיע הזמן להתחיל להשתמש בו!
הממשק העיקרי לפייתון הוא isc.py.Main. הוא מציע את קבוצות השיטות הבאות (כולן חוזרות %Status):

  • ביצוע קוד
  • העברת נתונים
  • עזר

ביצוע קוד

שיטות אלו מאפשרות לך לבצע קוד Python שרירותי.

SimpleString

SimpleString היא השיטה העיקרית. זה דורש 4 ארגומנטים אופציונליים:

  • code היא שורת הקוד לביצוע. תו הזנת שורה: $c(10).
  • returnVariable הוא שם המשתנה שיש להחזיר.
  • serialization - איך לעשות סדרה returnVariable. 0 - מחרוזת (ברירת מחדל), 1 - repr.
  • 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 -> InterSystems IRIS

ישנן 4 דרכים לקבל את הערך של משתנה Python ב-InterSystems IRIS, בהתאם לסידרה הדרושה לך:

  • String עבור סוגי נתונים פשוטים ואיתור באגים.
  • Repr לאחסון חפצים פשוטים ואיתור באגים.
  • JSON עבור מניפולציה קלה של נתונים בצד InterSystems IRIS.
  • Pickle לשמור חפצים.

שיטות אלו מאפשרות לך לקבל משתנים מ-Python כמחרוזת או כזרמים.

  • GetVariable(variable, serialization, .stream, useString) - לקבל serialization משתנה variable в stream. אם useString הוא 1 והסדרה ממוקמת במחרוזת, ואז מחרוזת מוחזרת, לא זרם.
  • GetVariableJson(variable, .stream, useString) - קבל סדרת JSON של משתנה.
  • GetVariablePickle(variable, .stream, useString, useDill) -קבל סידרת חמוצים (או שמיר) של משתנה.

בואו ננסה לקבל את המשתנה שלנו 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) - יוצר מערך נתונים (פנדות 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 בפיתון.

ExecuteQuery - אוניברסלי (כל שאילתת SQL חוקית תועבר לפייתון). למרות זאת, ExecuteGlobal והעטיפות שלו ExecuteClass и ExecuteTable לעבוד עם מספר הגבלות. הם הרבה יותר מהירים (פי 3-5 מהר יותר מהדריבר של ODBC ופי 20 מהר יותר מאשר ExecuteQuery). מידע נוסף ב מסמכי העברת נתונים.
כל השיטות הללו תומכות בהעברת נתונים מכל אזור. שקית פלסטיק isc.py חייב להיות זמין באזור היעד.

לבצע שאילתה

ExecuteQuery(request, variable, type, namespace) - העברת התוצאות של כל שאילתת SQL חוקית לפייתון. זוהי שיטת העברת הנתונים האיטית ביותר. השתמש בו אם ExecuteGlobal והעטיפות שלו אינן זמינות.

טענות:

  • query - שאילתת sql.
  • variable - שם המשתנה Python שבו הנתונים כתובים.
  • type - list או פנדות dataframe.
  • namespace - האזור בו תבוצע הבקשה.

בצע גלובל

ExecuteGlobal(global, variable, type, start, end, mask, labelels, namespace) - העברת גלובל לפייתון.

טענות:

  • global הוא שמו של הגלובלי בלי ^
  • variable - שם המשתנה Python שבו הנתונים כתובים.
  • type - list או פנדות dataframe.
  • start - המנוי הראשון של הגלובלי. בהכרח %Integer.
  • end הוא המנוי האחרון של הגלובלי. בהכרח %Integer.
  • mask - מסכת ערכים גלובליים. המסכה יכולה להיות קצרה יותר ממספר השדות בגלובלי (במקרה זה ידלגו על השדות בסוף). כיצד לעצב את המסכה:
    • + להעביר את הערך כפי שהוא.
    • - דילוג על ערך.
    • b - סוג בוליאני (0 - False, כל השאר - True).
    • d - תאריך (מ-$horolog, ב-Windows מ-1970, ב-Linux מ-1900).
    • t - זמן ($הורלוג, שניות אחרי חצות).
    • m — חותמת זמן (מחרוזת פורמט שנה-חודש-יום שעה:דקה:שניה).
  • labels - %רשימת שמות העמודות. האלמנט הראשון הוא שם המנוי.
  • namespace - האזור בו תבוצע הבקשה.

ExecuteClass

לעטוף מעל ExecuteGlobal. מכין שיחה על סמך הגדרת המחלקה ExecuteGlobal וקורא לו.

ExecuteClass(class, variable, type, start, end, properties, namespace) - העברת נתוני מחלקה לפייתון.

טענות:

  • class - שם הכיתה
  • variable - שם המשתנה Python שבו הנתונים כתובים.
  • type - list או פנדות dataframe.
  • start - מזהה מתחיל.
  • end - זיהוי סופי
  • properties - רשימה (מופרדת בפסיק) של מאפייני מחלקה שיש לטעון למערך הנתונים. מסכות נתמכות * и ?. ברירת מחדל - * (כל הנכסים). תכונה %%CLASSNAME התעלמו.
  • namespace - האזור בו תבוצע הבקשה.

כל המאפיינים מועברים כפי שהם למעט מאפייני סוג %Date, %Time, %Boolean и %TimeStamp - הם מומרים למחלקות Python המתאימות.

ExecuteTable

לעטוף מעל ExecuteClass. מתרגם את שם הטבלה לשם מחלקה וקורא ExecuteClass. חֲתִימָה:

ExecuteTable(table, variable, type, start, end, properties, namespace) - העברת נתוני טבלה לפייתון.

טענות:

  • 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, לינוקס 1900-01-01, מק). להשתמש %TimeStampלהעביר נתונים מחוץ לטווח הזה או להשתמש ב-pandas dataframe as מגבלה זו היא רק עבור הרשימה.
  • עבור 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 היא עטיפה isc.py.Main. מבצע isc.py.ens.Operation מאפשר אינטראקציה עם תהליך Python ממוצרי InterSystems IRIS. חמש בקשות נתמכות:

  • 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 - (לינוקס בלבד) אם אתה רואה שגיאות אתחול, הגדר את הערך שלו ל libpython3.6m.so או אפילו בנתיב המלא לספריית Python.

יצירת תהליכים עסקיים

ישנם שני שיעורים זמינים המקלים על פיתוח תהליכים עסקיים:

  • isc.py.ens.ProcessUtils מאפשר לך לחלץ הערות מפעילויות עם החלפת משתנה.
  • isc.py.util.BPEmulator מקל על בדיקת תהליכים עסקיים עם Python. זה יכול לבצע תהליך עסקי (חלקי Python) בתהליך הנוכחי.

החלפה משתנה

כל התהליכים העסקיים קיבלו בירושה isc.py.ens.ProcessUtils, יכול להשתמש בשיטה GetAnnotation(name) כדי לקבל את הערך של הערת פעילות לפי שמה. הערת הפעילות עשויה להכיל משתנים שיוערכו בצד InterSystems IRIS לפני שיועבר לפייתון. להלן התחביר להחלפת משתנים:

  • ${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. במסוף IRIS של InterSystems, הפעל: 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 - קוד פייתון.
  • SeparateLines - האם לפצל את הקוד לשורות לביצוע. $c(10) (n) משמש להפרדת מחרוזות. שימו לב שלא מומלץ לעבד את כל ההודעה בבת אחת, פונקציה זו מיועדת רק לעיבוד def וביטויים מרובי קווים דומים. בְּרִירַת מֶחדָל 0.
  • Variables היא רשימה מופרדת בפסיקים של משתנים שיתווספו לתגובה.
  • Serialization - איך לעשות סדרה של המשתנים שאנו רוצים להחזיר. אפשרויות: Str, Repr, JSON, Pickle и Dill, ברירת מחדל Str.

במקרה שלנו, אנחנו רק קובעים את הנכס Code, כך שכל שאר המאפיינים משתמשים בערכי ברירת המחדל שלהם. הגדרנו את זה על ידי התקשרות process.GetAnnotation("Import pandas"), אשר בזמן ריצה מחזיר ביאור לאחר ביצוע החלפת משתנה. סוף סוף הקוד import pandas as pd יועבר לפייתון. GetAnnotation יכול להיות שימושי לקבלת סקריפטים מרובי שורות של Python, אך אין הגבלות על דרך זו לקבל קוד. אתה יכול להגדיר את הנכס Code בכל דרך שנוחה לך.

קבלת משתנים

עוד אתגר מעניין באמצעות isc.py.msg.ExecutionRequest - Correlation Matrix: Tabular:

Python Gateway ב-InterSystems IRIS

הוא מחשב את מטריצת המתאם בצד של פייתון ומחלץ את המשתנה corrmat חזרה ל-InterSystems IRIS בפורמט JSON על ידי הגדרת מאפייני הבקשה:

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

אנו יכולים לראות את התוצאות ב-Visual Trace:

Python Gateway ב-InterSystems IRIS

ואם אנחנו צריכים את הערך הזה ב-BP, אפשר לקבל אותו כך: callresponse.Variables.GetAt("corrmat").

העברת נתונים

לאחר מכן, בואו נדבר על העברת נתונים מ-InterSystems IRIS לפייתון, כל הבקשות להעברת נתונים מיישמות את הממשק isc.py.msg.DataRequest, המספק את המאפיינים הבאים:

  • Variable הוא משתנה Python שאליו נכתבים הנתונים.
  • Type - סוג משתנה: dataframe (Pandas dataframe) או 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 ב-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 - נקה את ההקשר לפני השחזור.

מחברת צדק

מחברת צדק הוא יישום אינטרנט בקוד פתוח המאפשר לך ליצור ולפרסם מחברות המכילות קוד, הדמיות וטקסט. Python Gateway מאפשר לך להציג ולערוך תהליכי BPL כמחברת Jupyter. שימו לב שכרגע נעשה שימוש ב-executor הרגיל של 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 (הסביבה העיקרית עבור מדעני נתונים רבים), להשתמש במספר ספריות מוכנות כדי ליצור במהירות בינה מלאכותית אנליטית רובוטית. פתרונות ML על פלטפורמת InterSystems IRIS.

תזכור

MLToolkit

קבוצת המשתמשים של MLToolkit היא מאגר GitHub פרטי שנוצר כחלק מארגון GitHub הארגוני של InterSystems. זה פונה למשתמשים חיצוניים שמתקינים, לומדים או כבר משתמשים ברכיבי MLToolkit, כולל Python Gateway. לקבוצה מספר מקרים מיושמים (עם קוד מקור ונתוני בדיקות) בתחומי השיווק, הייצור, הרפואה ותעשיות רבות נוספות. כדי להצטרף לקבוצת המשתמשים של ML Toolkit, אנא שלח דוא"ל קצר לכתובת הבאה: [מוגן בדוא"ל] וכלול את המידע הבא במכתבך:

  • שם משתמש GitHub
  • ארגון (אתה עובד או לומד)
  • מיקום (המיקום האמיתי שלך בארגון שלך, "סטודנט" או "עצמאי").
  • מדינה

למי שקרא את המאמר ומעוניין ב-InterSystems IRIS כפלטפורמה לפיתוח או אירוח של מנגנוני בינה מלאכותית ולמידת מכונה, אנו מזמינים אותך לדון בתרחישים אפשריים המעניינים את הארגון שלך. אנו ננתח בקלות את הצרכים של הארגון שלך ונקבע במשותף תוכנית פעולה; כתובת הדוא"ל ליצירת קשר של קבוצת המומחים שלנו ל-AI/ML - [מוגן בדוא"ל].

מקור: www.habr.com

הוספת תגובה