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. ม.ล.ทูลกิตต์.

การแนะนำ

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 เป็นภาษาเชิงวัตถุ แต่ทุกอย่างถูกกำหนดแบบไดนามิก ไม่ใช่แบบคงที่ ทุกอย่างยังเป็นวัตถุ บทความต่อมาถือว่าเป็นความคุ้นเคยกับภาษา หากคุณอยากเริ่มเรียนรู้ ผมแนะนำให้เริ่มจาก เอกสาร.
  • สำหรับแบบฝึกหัดต่อไปของเรา ให้ตั้งค่า ไพธอน 3.6.7 64 บิต.
  • ไอดี: ฉันใช้ PyCharmแต่โดยทั่วไปแล้ว หลาย. หากคุณใช้ Atelier มีปลั๊กอิน Eclipse สำหรับนักพัฒนา Python หากคุณใช้ VS Code แสดงว่ามีส่วนขยายสำหรับ Python
  • สมุดบันทึก: แทนที่จะเป็น IDE คุณสามารถเขียนและแบ่งปันสคริปต์ของคุณในสมุดบันทึกออนไลน์ได้ ความนิยมมากที่สุดของพวกเขาคือ ดาวพฤหัสบดี.

ห้องสมุด

นี่คือรายการ (บางส่วน) ของไลบรารีแมชชีนเลิร์นนิง:

  • นัมปี้ — แพ็คเกจพื้นฐานสำหรับการคำนวณที่แน่นอน
  • นุ่น — โครงสร้างข้อมูลที่มีประสิทธิภาพสูงและเครื่องมือวิเคราะห์ข้อมูล
  • Matplotlib - การสร้างแผนภูมิ
  • ทะเล - การแสดงข้อมูลตาม matplotlib
  • สเลิร์น — วิธีการเรียนรู้ของเครื่อง
  • XGBoost - อัลกอริทึมการเรียนรู้ของเครื่องภายในวิธีการส่งเสริมการไล่ระดับสี
  • เกนซิม — เอ็นแอลพี
  • Keras - เครือข่ายประสาท
  • เทนเซอร์โฟลว์ เป็นแพลตฟอร์มสำหรับสร้างโมเดลแมชชีนเลิร์นนิง
  • ไพทอร์ช เป็นแพลตฟอร์มสำหรับสร้างโมเดลแมชชีนเลิร์นนิงที่เน้น Python
  • นโยกา - PMML จากรุ่นต่างๆ

เทคโนโลยี AI/ML ทำให้ธุรกิจมีประสิทธิภาพและปรับเปลี่ยนได้มากขึ้น ยิ่งไปกว่านั้น ทุกวันนี้ เทคโนโลยีเหล่านี้พัฒนาและนำไปใช้ได้ง่ายขึ้น เริ่มเรียนรู้เกี่ยวกับเทคโนโลยี AI/ML และวิธีที่เทคโนโลยีเหล่านี้จะช่วยให้องค์กรของคุณเติบโตได้

การติดตั้ง

มีหลายวิธีในการติดตั้งและใช้ Python Gateway:

  • ระบบปฏิบัติการ
    • Windows
    • ลินุกซ์
    • Mac
  • นักเทียบท่า
    • ใช้ภาพจาก DockerHub
    • สร้างภาพของคุณเอง

คุณต้องมีซอร์สโค้ดโดยไม่คำนึงถึงวิธีการติดตั้ง ที่เดียวที่จะดาวน์โหลดรหัสคือ หน้าเผยแพร่. มันมีรุ่นที่เสถียรที่ผ่านการทดสอบแล้ว เพียงแค่คว้าอันล่าสุด ในขณะนี้คือ 0.8 แต่เมื่อเวลาผ่านไปจะมีสิ่งใหม่ อย่าโคลน/ดาวน์โหลดที่เก็บ ให้ดาวน์โหลดรุ่นล่าสุด

ระบบปฏิบัติการ

หากคุณกำลังติดตั้ง 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 ชี้ไปที่ Python 3.6.7
  2. ตรวจสอบให้แน่ใจว่าตัวแปรสภาพแวดล้อมของระบบคือ PATH มีตัวแปร PYTHONHOME (หรือไดเร็กทอรีที่ชี้ไป)

ลินุกซ์ (เดเบียน/อูบุนตู)

  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 จาก หลาม.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 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 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 เพื่อการจัดการข้อมูลที่ง่ายในฝั่ง InterSystems IRIS
  • 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 -> ไพธอน

กำลังโหลดข้อมูลจาก InterSystems IRIS ไปยัง Python

  • ExecuteQuery(query, variable, type, namespace) - สร้างชุดข้อมูล (pandas dataframe หรือ list) จากแบบสอบถาม sql และตั้งค่าเป็นตัวแปรหลาม 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 จากไอดี start ไปยัง end ใน Python เป็นตัวแปรประเภท type: listหรือหมีแพนด้า dataframe. properties — รายการ (คั่นด้วยเครื่องหมายจุลภาค) ของคุณสมบัติของคลาสที่จะโหลดลงในชุดข้อมูล รองรับหน้ากาก * и ?. ค่าเริ่มต้น - * (คุณสมบัติทั้งหมด). คุณสมบัติ %%CLASSNAME ละเว้น
  • ExecuteTable(table, variable, type, start, end, properties, namespace) - โหลดข้อมูลตาราง table จากไอดี start ไปยัง end ในหลาม

ExecuteQuery - สากล (แบบสอบถาม SQL ที่ถูกต้องจะถูกส่งผ่านไปยัง Python) อย่างไรก็ตาม, ExecuteGlobal และผ้าคลุมของเขา ExecuteClass и ExecuteTable ทำงานกับข้อ จำกัด หลายประการ เร็วกว่ามาก (เร็วกว่าไดรเวอร์ ODBC 3-5 เท่าและเร็วกว่า 20 เท่า ExecuteQuery). ข้อมูลเพิ่มเติมใน เอกสารการถ่ายโอนข้อมูล.
วิธีการทั้งหมดนี้รองรับการถ่ายโอนข้อมูลจากพื้นที่ใด ๆ ถุงพลาสติก isc.py จะต้องมีอยู่ในพื้นที่เป้าหมาย

ดำเนินการแบบสอบถาม

ExecuteQuery(request, variable, type, namespace) - ส่งผลลัพธ์ของแบบสอบถาม SQL ที่ถูกต้องไปยัง Python นี่เป็นวิธีการถ่ายโอนข้อมูลที่ช้าที่สุด ใช้มันถ้า ExecuteGlobal และไม่มีเครื่องห่อหุ้ม

อาร์กิวเมนต์:

  • query - แบบสอบถาม sql
  • variable - ชื่อของตัวแปร Python ที่เขียนข้อมูล
  • type - list หรือหมีแพนด้า dataframe.
  • namespace - พื้นที่ที่คำขอจะดำเนินการ

ดำเนินการทั่วโลก

ExecuteGlobal(global, variable, type, start, end, mask, labelels, namespace) - ส่งผ่านส่วนกลางไปยัง Python

อาร์กิวเมนต์:

  • global เป็นชื่อของโลกที่ไม่มี ^
  • variable - ชื่อของตัวแปร Python ที่เขียนข้อมูล
  • type - list หรือหมีแพนด้า dataframe.
  • start — ตัวห้อยตัวแรกของโลก อย่างจำเป็น %Integer.
  • end เป็นตัวห้อยตัวสุดท้ายของโลก อย่างจำเป็น %Integer.
  • mask — หน้ากากแห่งค่านิยมสากล มาสก์อาจสั้นกว่าจำนวนฟิลด์ในโกลบอล (ซึ่งในกรณีนี้ฟิลด์ที่อยู่ท้ายสุดจะถูกข้ามไป) วิธีจัดรูปแบบมาสก์:
    • + ส่งค่าตามที่เป็นอยู่
    • - ข้ามค่า
    • b — ประเภทบูลีน (0 - Falseส่วนที่เหลือทั้งหมด - True).
    • d — วันที่ (จาก $horolog บน Windows จากปี 1970 บน Linux จากปี 1900)
    • t - เวลา ($horolog, วินาทีหลังเที่ยงคืน)
    • m — การประทับเวลา (ปี-เดือน-วัน ชั่วโมง:นาที:วินาที รูปแบบสตริง)
  • labels - % รายชื่อคอลัมน์ องค์ประกอบแรกคือชื่อของตัวห้อย
  • namespace - พื้นที่ที่คำขอจะดำเนินการ

ดำเนินการคลาส

ห่อ ExecuteGlobal. เตรียมการโทรตามคำจำกัดความของคลาส ExecuteGlobal และโทรหาเขา

ExecuteClass(class, variable, type, start, end, properties, namespace) - ส่งข้อมูลคลาสไปยัง Python

อาร์กิวเมนต์:

  • 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) - ส่งข้อมูลตารางไปยัง Python

อาร์กิวเมนต์:

  • table - ชื่อตาราง
    ข้อโต้แย้งอื่น ๆ ทั้งหมดจะถูกส่งผ่านตามที่เป็นอยู่ ExecuteClass.

ข้อคิดเห็น

  • ExecuteGlobal, ExecuteClass и ExecuteTable ทำงานเร็วเท่ากัน
  • ExecuteGlobal เร็วกว่า 20 เท่า ExecuteQuery บนชุดข้อมูลขนาดใหญ่ (เวลาถ่ายโอน >0.01 วินาที)
  • ExecuteGlobal, ExecuteClass и ExecuteTable ทำงานกับ globals ด้วยโครงสร้างนี้: ^global(key) = $lb(prop1, prop2, ..., propN) ที่ไหน key เป็นจำนวนเต็ม
  • สำหรับ ExecuteGlobal, ExecuteClass и ExecuteTable ช่วงค่าที่รองรับ %Date สอดคล้องกับช่วง mktime และขึ้นอยู่กับระบบปฏิบัติการหน้าต่าง:1970-01-01, ลินุกซ์ 1900-01-01, Mac). ใช้ %TimeStampเพื่อส่งข้อมูลนอกช่วงนี้หรือใช้ pandas dataframe เป็น ข้อจำกัดนี้มีไว้สำหรับรายการเท่านั้น
  • สำหรับ ExecuteGlobal, ExecuteClass и ExecuteTable อาร์กิวเมนต์ทั้งหมดยกเว้นแหล่งข้อมูล (ส่วนกลาง คลาส หรือตาราง) และตัวแปรเป็นทางเลือก

ตัวอย่าง

ชั้นเรียนทดสอบ isc.py.test.บุคคล มีวิธีการที่แสดงตัวเลือกการถ่ายโอนข้อมูลทั้งหมด:

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

โดยพื้นฐานแล้ว การดำเนินการของไพห์ตันเป็นเพียงส่วนเสริม 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 ด้วย ID บริบท
  • 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 Gateway หากต้องการใช้:

  1. ในการรันเทอร์มินัล OS: 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 — รหัสหลาม
  • 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

มันคำนวณ Correlation Matrix ในฝั่ง 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 (แพนด้าดาต้าเฟรม) หรือ 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

โน้ตบุ๊ค Jupyter เป็นเว็บแอปพลิเคชันแบบโอเพ่นซอร์สที่ช่วยให้คุณสามารถสร้างและเผยแพร่สมุดบันทึกที่มีรหัส การแสดงภาพ และข้อความ Python Gateway อนุญาตให้คุณดูและแก้ไขกระบวนการ BPL เป็น Jupyter Notebook โปรดทราบว่าตัวเรียกใช้งาน 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 (สภาพแวดล้อมหลักสำหรับ Data Scientist จำนวนมาก) ใช้ไลบรารี่สำเร็จรูปจำนวนมากเพื่อสร้าง AI เชิงวิเคราะห์แบบหุ่นยนต์ที่ปรับตัวได้อย่างรวดเร็ว / โซลูชัน ML บนแพลตฟอร์ม InterSystems IRIS

การอ้างอิง

MLToolkit

กลุ่มผู้ใช้ MLToolkit เป็นที่เก็บ GitHub ส่วนตัวที่สร้างขึ้นโดยเป็นส่วนหนึ่งขององค์กร GitHub ของ InterSystems ถูกส่งไปยังผู้ใช้ภายนอกที่กำลังติดตั้ง เรียนรู้ หรือใช้งานคอมโพเนนต์ MLToolkit รวมถึง Python Gateway อยู่แล้ว กลุ่มนี้มีกรณีการใช้งานจำนวนมาก (พร้อมซอร์สโค้ดและข้อมูลทดสอบ) ในด้านการตลาด การผลิต การแพทย์ และอุตสาหกรรมอื่นๆ อีกมากมาย หากต้องการเข้าร่วมกลุ่มผู้ใช้ ML Toolkit โปรดส่งอีเมลสั้นๆ ไปยังที่อยู่ต่อไปนี้: [ป้องกันอีเมล] และรวมข้อมูลต่อไปนี้ไว้ในจดหมายของคุณ:

  • ชื่อผู้ใช้ GitHub
  • องค์กร (คุณทำงานหรือเรียน)
  • ตำแหน่ง (ตำแหน่งจริงของคุณในองค์กรของคุณ ไม่ว่าจะเป็น "นักศึกษา" หรือ "อิสระ")
  • ประเทศ

สำหรับผู้ที่ได้อ่านบทความและสนใจ InterSystems IRIS ในฐานะแพลตฟอร์มสำหรับการพัฒนาหรือโฮสต์กลไกปัญญาประดิษฐ์และการเรียนรู้ของเครื่อง เราขอเชิญคุณหารือเกี่ยวกับสถานการณ์ที่เป็นไปได้ที่องค์กรของคุณสนใจ เราจะพร้อมวิเคราะห์ความต้องการขององค์กรของคุณและร่วมกันกำหนดแผนปฏิบัติการ ที่อยู่อีเมลติดต่อของกลุ่มผู้เชี่ยวชาญ AI/ML – [ป้องกันอีเมล].

ที่มา: will.com

เพิ่มความคิดเห็น