InterSystems IRIS'te Python Ağ Geçidi

Bu makale, InterSystems IRIS veri platformu için açık kaynaklı bir topluluk projesi olan Python Gateway hakkındadır. Bu proje, Python'da (birçok Veri Bilimcisi için ana ortam) oluşturulan herhangi bir makine öğrenimi algoritmasını düzenlemenize, InterSystems IRIS platformunda hızlı bir şekilde uyarlanabilir, robotik analitik AI / ML çözümleri oluşturmak için çok sayıda hazır kitaplığı kullanmanıza olanak tanır. Bu makalede InterSystems IRIS'in Python'da süreçleri nasıl düzenleyebildiğini, iki yönlü verileri verimli bir şekilde iletebildiğini ve akıllı iş süreçleri yaratabildiğini göstereceğim.

Plan

  1. Giriş.
  2. Aletler.
  3. Kurulum.
  4. API.
  5. Birlikte çalışabilirlik.
  6. Jüpiter Not Defteri.
  7. Sonuç.
  8. Bağlantılar.
  9. MLToolkit.

Giriş

Python, geliştirici üretkenliğini ve kod okunabilirliğini artırmayı amaçlayan üst düzey, genel amaçlı bir programlama dilidir. Bu makale dizisinde Python'u InterSystems IRIS platformunda kullanma olanaklarını tartışacağım; bu makalenin ana odağı Python'un makine öğrenimi modelleri oluşturmak ve çalıştırmak için bir dil olarak kullanılmasıdır.

Makine öğrenimi (ML), karakteristik özelliği bir problemin doğrudan çözümü değil, birçok benzer problemin çözümü sürecinde öğrenme olan bir yapay zeka yöntemleri sınıfıdır.

Makine öğrenimi algoritmaları ve modelleri giderek yaygınlaşıyor. Bunun pek çok nedeni var, ancak hepsi erişilebilirliğe, basitliğe ve pratik sonuçlara ulaşmaya bağlı. Kümeleme ve hatta sinir ağı modellemesi yeni bir teknoloji midir?

Elbette hayır ama günümüzde tek bir modeli çalıştırmak için yüzbinlerce satır kod yazmaya gerek yok ve model oluşturma ve kullanma maliyeti de giderek azalıyor.

Araçlar gelişiyor - tam olarak GUI merkezli AI/ML araçlarına sahip olmasak da, BI gibi diğer birçok bilgi sistemi sınıfında (kod yazmaktan çerçeveleri ve GUI merkezli yapılandırılabilir çözümleri kullanmaya kadar) gördüğümüz ilerleme şu şekildedir: AI/ML oluşturmaya yönelik araçlarda da gözlemlendi. Kod yazma aşamasını çoktan geçtik ve bugün modeller oluşturmak ve eğitmek için çerçeveler kullanıyoruz.

Son kullanıcının modelin eğitimini kendi spesifik verileri üzerinde tamamlaması gereken, önceden eğitilmiş bir modeli dağıtma yeteneği gibi diğer iyileştirmeler de makine öğrenimine başlamayı kolaylaştırır. Bu ilerlemeler, makine öğrenmeyi öğrenmeyi hem profesyoneller hem de genel olarak şirketler için çok daha kolay hale getiriyor.

Öte yandan giderek daha fazla veri topluyoruz. InterSystems IRIS gibi birleşik bir veri platformuyla tüm bu bilgiler anında hazırlanıp makine öğrenimi modellerine girdi olarak kullanılabilir.

Buluta geçişle birlikte AI/ML projelerini başlatmak her zamankinden daha kolay hale geliyor. Sadece ihtiyacımız olan kaynakları tüketebiliriz. Üstelik bulut platformlarının sunduğu paralelleştirme sayesinde harcanan zamandan da tasarruf edebiliyoruz.

Peki ya sonuçlar? İşte bu noktada işler daha da karmaşıklaşıyor. Model oluşturmak için daha sonra tartışacağım birçok araç var. İyi bir model oluşturmak kolay değil ama sırada ne var? Bir iş modelini kullanarak kar elde etmek de önemsiz olmayan bir iştir. Sorunun temelinde analitik ve işlemsel iş yüklerinin ve veri modellerinin ayrılması yatıyor. Bir modeli eğittiğimizde bunu genellikle geçmiş veriler üzerinde yaparız. Ancak oluşturulan modelin yeri işlemsel veri işlemedir. Günde bir kez çalıştırırsak en iyi sahte işlem tespit modelinin ne faydası olur? Dolandırıcılar çoktan parayı alıp gittiler. Modeli geçmiş verilere göre eğitmemiz gerekiyor ama aynı zamanda iş süreçlerimizin modelin yaptığı tahminlere göre hareket edebilmesi için bunu yeni gelen verilere de gerçek zamanlı olarak uygulamamız gerekiyor.

ML Araç Seti tam da bunu yapmayı amaçlayan bir araç setidir: yerleşik modellerin doğrudan iş süreçlerinizde kolayca kullanılabilmesi için modelleri ve işlem ortamını birleştirin. Python Gateway, ML Toolkit'in bir parçasıdır ve Python diliyle entegrasyon sağlar (ML Toolkit'in bir parçası olan R Gateway'in R diliyle entegrasyon sağlamasına benzer şekilde).

araçları

Devam etmeden önce daha sonra kullanacağımız birkaç Python aracını ve kütüphanesini anlatmak istiyorum.

Teknoloji

  • Python yorumlanmış, üst düzey, genel amaçlı bir programlama dilidir. Dilin temel avantajı matematik, makine öğrenimi ve yapay zeka kütüphanelerinden oluşan geniş kütüphanesidir. ObjectScript gibi nesne yönelimli bir dildir ancak her şey statik olarak değil dinamik olarak tanımlanır. Ayrıca her şey bir nesnedir. Daha sonraki makaleler dile geçici bir aşinalık olduğunu varsayar. Öğrenmeye başlamak istiyorsanız, başlamanızı öneririm belgeleme.
  • Sonraki alıştırmalarımız için Python3.6.7 64 bit.
  • IDE: kullanıyorum pycharmama genel olarak onlar çok. Atelier kullanıyorsanız Python geliştiricileri için bir Eclipse eklentisi bulunmaktadır. VS Code kullanıyorsanız Python için bir uzantı vardır.
  • Not Defteri: Bir IDE yerine komut dosyalarınızı çevrimiçi not defterlerine yazıp paylaşabilirsiniz. Bunlardan en popüler olanı Jüpiter.

Kütüphaneler

Makine öğrenimi kitaplıklarının (kapsamlı olmayan) bir listesi:

  • Dizi — hassas hesaplamalar için temel bir paket.
  • Pandalar — yüksek performanslı veri yapıları ve veri analizi araçları.
  • matplotlib - grafiklerin oluşturulması.
  • deniz doğumu — matplotlib'e dayalı veri görselleştirme.
  • Sklearn — makine öğrenimi yöntemleri.
  • XGBoost — Gradyan artırma metodolojisi çerçevesinde makine öğrenimi algoritmaları.
  • gensim —NLP.
  • keras - nöral ağlar.
  • tensör akışı — makine öğrenimi modelleri oluşturmaya yönelik bir platform.
  • PyTorch Python'a odaklanan makine öğrenimi modelleri oluşturmaya yönelik bir platformdur.
  • Bir yılan - Çeşitli modellerden PMML.

AI/ML teknolojileri işletmeyi daha verimli ve uyarlanabilir hale getirir. Üstelik günümüzde bu teknolojilerin geliştirilmesi ve uygulanması kolaylaşıyor. AI/ML teknolojilerini ve bunların kuruluşunuzun büyümesine nasıl yardımcı olabileceğini öğrenmeye başlayın.

Montaj

Python Gateway'i kurmanın ve kullanmanın birkaç yolu vardır:

  • ОС
    • Windows
    • Linux
    • Mac
  • liman işçisi
    • DockerHub'tan bir görüntü kullanın
    • Kendi görünümünüzü yaratın

Kurulum yönteminden bağımsız olarak kaynak koduna ihtiyacınız olacaktır. Kodu indirebileceğiniz tek yer sürümler sayfası. Test edilmiş kararlı sürümleri içerir, sadece en sonuncuyu alın. Şu anda 0.8 ama zamanla yenileri olacak. Depoyu klonlamayın/indirmeyin, en son sürümü indirin.

ОС

Python Gateway'i bir işletim sistemine kuruyorsanız, öncelikle (işletim sisteminden bağımsız olarak) Python'u yüklemeniz gerekir. Bunun için:

  1. Python 3.6.7 64 bit'i yükleyin. Python'u varsayılan dizine kurmanız önerilir.
  2. Modülü yükleyin dill: pip install dill.
  3. ObjectScript kodunu indirin (ör. do $system.OBJ.ImportDir("C:InterSystemsReposPythoniscpy", "*.cls", "c",,1)) ürünlerin bulunduğu herhangi bir alana. Mevcut bir alanın ürünleri desteklemesini istiyorsanız şunu çalıştırın: write ##class(%EnsembleMgr).EnableNamespace($Namespace, 1).
  4. Yer belirtme çizgisi DLL/SO/DYLIB klasöre bin InterSystems IRIS örneğiniz. Kütüphane dosyası döndürülen yolda bulunmalıdır write ##class(isc.py.Callout).GetLib().

Windows

  1. Ortam değişkeninin olduğundan emin olun PYTHONHOME Python 3.6.7'ye işaret ediyor.
  2. Sistem ortam değişkeninin olduğundan emin olun. PATH bir değişken içerir PYTHONHOME (veya işaret ettiği dizin).

Linux (Debian/Ubuntu)

  1. Ortam değişkeninin olup olmadığını kontrol edin PATH içerdiği /usr/lib и /usr/lib/x86_64-linux-gnu. Dosyayı kullan /etc/environment ortam değişkenlerini ayarlamak için.
  2. Hata durumunda undefined symbol: _Py_TrueStruct ayarı yap PythonLib. Ayrıca Benioku Sorun Giderme bölümü bulunmaktadır.

Mac

  1. Şu anda yalnızca Python 3.6.7 desteklenmektedir python.org. Değişkeni kontrol edin PATH.

Ortam değişkenlerini değiştirdiyseniz InterSystems ürününüzü yeniden başlatın.

liman işçisi

Konteyner kullanmanın birçok avantajı vardır:

  • taşınabilirlik
  • etki
  • Yalıtım
  • hafiflik
  • Değişmezlik

Bunu kontrol et makale dizisi Docker'ı InterSystems ürünleriyle kullanma hakkında daha fazla bilgi için.

Tüm Python Gateway yapıları şu anda konteyner tabanlıdır 2019.4.

Hazır görüntü

Koşmak: docker run -d -p 52773:52773 --name irispy intersystemscommunity/irispy-community:latestPython Gateway'i InterSystems IRIS Community Edition ile indirip çalıştırmak için. Bu kadar.

Kendi görünümünüzü yaratın

Bir liman işçisi görüntüsü oluşturmak için havuzun kökünde çalıştırın: docker build --force-rm --tag intersystemscommunity/irispy:latest ..
Varsayılan olarak görüntü, görüntü temel alınarak oluşturulur store/intersystems/iris-community:2019.4.0.383.0ancak bunu bir değişken ayarlayarak değiştirebilirsiniz IMAGE.
InterSystems IRIS'ten derlemek için şunu çalıştırın: `docker build --build-arg IMAGE=store/intersystems/iris:2019.4.0.383.0 --force-rm --tag intersystemscommunity/irispy:latest ".

Bundan sonra liman işçisi görüntüsünü çalıştırabilirsiniz:

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'ı temel alan bir görüntü kullanıyorsanız anahtarı atlayabilirsiniz.

Yorumlar

  • Test süreci isc.py.test.Process bir dizi görüntüyü geçici bir dizine kaydeder. Bu yolu bağlı dizine değiştirmek isteyebilirsiniz. Bunu yapmak için ayarı düzenleyin WorkingDir monte edilen dizini belirterek.
  • Terminal çalıştırmasına erişmek için: docker exec -it irispy sh.
  • Sistem Yönetim Portalına giriş yaparak erişim SuperUser/SYS.
  • Kabı durdurmak için şunu çalıştırın: docker stop irispy && docker rm --force irispy.

Kurulumun doğrulanması

Python Gateway'i yükledikten sonra çalışıp çalışmadığını kontrol etmeye değer. Bu kodu InterSystems IRIS terminalinde yürütün:

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

Sonuç şöyle olmalıdır: HELLO — Python değişken değeri x. İade durumu ise sc bir hata mı yoksa var boş, kontrol et Benioku - Sorun giderme bölümü.

API

Python Gateway kuruldu ve çalıştığını doğruladınız. Kullanmaya başlamanın zamanı geldi!
Python'un ana arayüzü isc.py.Main. Aşağıdaki yöntem gruplarını sunar (tümü geri dönüş) %Status):

  • Kod Yürütme
  • Veri aktarımı
  • yardımcı

Kod Yürütme

Bu yöntemler isteğe bağlı Python kodunu çalıştırmanıza olanak tanır.

SimpleString

SimpleString - bu ana yöntemdir. 4 isteğe bağlı argüman alır:

  • code - yürütülecek kod satırı. Satır besleme karakteri: $c(10).
  • returnVariable — döndürülecek değişkenin adı.
  • serialization - nasıl serileştirilir returnVariable. 0 — dize (varsayılan), 1 — repr.
  • result — Değerin yazıldığı değişkene ByRef referansı returnVariable.

Yukarıda şunları yaptık:

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

Bu örnekte bir Python değişkenine atama yapıyoruz x değer Hello ve bir Python değişkeninin değerini döndürmek istiyorum x bir ObjectScript değişkenine var.

Çalıştırma Kodu

ExecuteCode daha güvenli ve daha az kısıtlayıcı bir alternatiftir SimpleString.
InterSystems IRIS platformundaki satırlar 3 karakterle sınırlıdır ve daha uzun bir kod parçası çalıştırmak istiyorsanız iş parçacığı kullanmanız gerekir.
İki argüman kabul edilir:

  • code - yürütülecek Python kodunun bir satırı veya akışı.
  • variable — (isteğe bağlı) yürütme sonucunu atar code bu Python değişkeni.

Kullanılacak örnek:

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

Bu örnekte 2 ile 3'ü çarpıyoruz ve sonucu bir Python değişkenine yazıyoruz. y.

Veri aktarımı

Verileri Python'a ve Python'dan aktarın.

Python -> Sistemler Arası IRIS

İhtiyacınız olan serileştirmeye bağlı olarak InterSystems IRIS'te bir Python değişkeninin değerini almanın 4 yolu vardır:

  • String basit veri türleri ve hata ayıklama için.
  • Repr basit nesneleri depolamak ve hata ayıklamak için.
  • JSON InterSystems IRIS tarafında kolay veri manipülasyonu için.
  • Pickle nesneleri kaydetmek için.

Bu yöntemler Python'dan değişkenleri bir dize veya akış olarak almanıza olanak tanır.

  • GetVariable(variable, serialization, .stream, useString) - elde etmek serialization değişken variable в stream. Eğer useString 1'dir ve serileştirme bir dizeye yerleştirilir, ardından bir akış değil bir dize döndürülür.
  • GetVariableJson(variable, .stream, useString) - bir değişkenin JSON serileştirmesini alın.
  • GetVariablePickle(variable, .stream, useString, useDill) -bir değişkenin Turşu (veya Dereotu) serileştirmesini alın.

Değişkenimizi almaya çalışalım y.

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

InterSystems IRIS -> Python

InterSystems IRIS'ten Python'a veri yükleme.

  • ExecuteQuery(query, variable, type, namespace) - bir veri kümesi oluşturur (pandalar dataframe veya list) sql sorgusundan alır ve bunu bir Python değişkenine ayarlar variable. Naylon poşet isc.py bölgede mevcut olmalıdır namespace — istek orada yürütülecektir.
  • ExecuteGlobal(global, variable, type, start, end, mask, labels, namespace) - küresel verileri yükler global alt simgeden start karşı end Python'da bir tür değişkeni olarak type: listveya pandalar dataframe. İsteğe bağlı bağımsız değişkenlerin açıklaması mask ve labels sınıf dokümantasyonunda ve deposunda mevcuttur Veri Aktarımı belgeleri.
  • ExecuteClass(class, variable, type, start, end, properties, namespace) - sınıf verilerini yükler class kimlikten start karşı end Python'da bir tür değişkeni olarak type: listveya pandalar dataframe. properties — veri kümesine yüklenmesi gereken sınıf özelliklerinin (virgülle ayrılmış) bir listesi. Desteklenen maskeler * и ?. Varsayılan - * (tüm özellikler). Mülk %%CLASSNAME görmezden gelindi.
  • ExecuteTable(table, variable, type, start, end, properties, namespace) - tablo verilerini yükler table kimlikten start karşı end Python'da.

ExecuteQuery — evrensel (herhangi bir doğru SQL sorgusu Python'a iletilecektir). Fakat, ExecuteGlobal ve ambalajları ExecuteClass и ExecuteTable bir dizi kısıtlamayla çalışın. Çok daha hızlıdırlar (ODBC sürücüsünden 3-5 kat daha hızlı ve 20 kat daha hızlıdırlar) ExecuteQuery). Daha fazla bilgi için: Veri Aktarımı belgeleri.
Tüm bu yöntemler herhangi bir alandan veri aktarımını destekler. Naylon poşet isc.py Hedef bölgede mevcut olmalıdır.

Sorguyu çalıştır

ExecuteQuery(request, variable, type, namespace) - herhangi bir doğru SQL sorgusunun sonuçlarının Python'a aktarılması. Bu en yavaş veri aktarım yöntemidir. Eğer kullan ExecuteGlobal ve ambalajları mevcut değildir.

argümanlar:

  • query -sql sorgusu.
  • variable — verinin yazıldığı Python değişkeninin adı.
  • type - list veya Pandalar dataframe.
  • namespace — isteğin yürütüleceği alan.

YürütGlobal

ExecuteGlobal(global, variable, type, start, end, mask, labelels, namespace) - Python'da bir global geçmek.

argümanlar:

  • global - olmadan küresel ad ^
  • variable — verinin yazıldığı Python değişkeninin adı.
  • type - list veya Pandalar dataframe.
  • start - globalin ilk alt simgesi. mutlaka %Integer.
  • end — globalin son alt simgesi. mutlaka %Integer.
  • mask — küresel değer maskesi. Maske, geneldeki alan sayısından daha kısa olabilir (bu durumda sondaki alanlar atlanır). Bir maske nasıl biçimlendirilir:
    • + değeri olduğu gibi aktarın.
    • - değeri atla.
    • b — Boole türü (0 - False, Tüm kalan - True).
    • d — Tarih ($horolog'dan, Windows'ta 1970'den, Linux'ta 1900'den).
    • t — Zaman ($horolog, gece yarısından sonraki saniyeler).
    • m — Zaman damgası (biçim dizesi YIL-AY-GÜN SAAT:DAKİKA:SANİYE).
  • labels — %Sütun adlarının listesi. İlk öğe abonenin adıdır.
  • namespace — isteğin yürütüleceği alan.

Yürütme Sınıfı

Sar ExecuteGlobal. Sınıf tanımına göre bir çağrı hazırlar ExecuteGlobal ve onu çağırıyor.

ExecuteClass(class, variable, type, start, end, properties, namespace) - Python'da sınıf verilerinin aktarılması.

argümanlar:

  • class - sınıf adı
  • variable — verinin yazıldığı Python değişkeninin adı.
  • type - list veya Pandalar dataframe.
  • start — başlangıç ​​kimliği.
  • end — son kimlik
  • properties — veri kümesine yüklenmesi gereken sınıf özelliklerinin (virgülle ayrılmış) bir listesi. Desteklenen maskeler * и ?. Varsayılan - * (tüm özellikler). Mülk %%CLASSNAME görmezden gelindi.
  • namespace — isteğin yürütüleceği alan.

Tür özellikleri dışında tüm özellikler olduğu gibi iletilir %Date, %Time, %Boolean и %TimeStamp - karşılık gelen Python sınıflarına dönüştürülürler.

YürütmeTablosu

Sar ExecuteClass. Tablo adını sınıf adına ve çağrılara çevirir ExecuteClass. İmza:

ExecuteTable(table, variable, type, start, end, properties, namespace) - tablo verilerinin Python'a aktarılması.

argümanlar:

  • table - Tablo ismi.
    Diğer tüm argümanlar olduğu gibi iletilir ExecuteClass.

Notlar

  • ExecuteGlobal, ExecuteClass и ExecuteTable eşit derecede hızlı çalışın.
  • ExecuteGlobal 20 kat daha hızlı ExecuteQuery büyük veri kümelerinde (aktarım süresi >0.01 saniye).
  • ExecuteGlobal, ExecuteClass и ExecuteTable bu yapıya sahip globaller üzerinde çalışın: ^global(key) = $lb(prop1, prop2, ..., propN) nerede key - Bir tam sayı.
  • için ExecuteGlobal, ExecuteClass и ExecuteTable desteklenen değer aralığı %Date aralığa karşılık gelir mktime ve işletim sistemine bağlıdır (pencereler: 1970-01-01, linux 1900-01-01, mac). Kullanmak %TimeStampbu aralığın dışındaki verileri aktarmak veya pandaların veri çerçevesini kullanmak için bu yalnızca liste sınırlamasıdır.
  • için ExecuteGlobal, ExecuteClass и ExecuteTable veri kaynağı (global, sınıf veya tablo) ve değişken dışındaki tüm argümanlar isteğe bağlıdır.

Örnekler

Test sınıfı isc.py.test.Person tüm veri aktarım seçeneklerini gösteren bir yöntem içerir:

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)

Yöntemi çağır do ##class(isc.py.test.Person).Test() tüm veri aktarım yöntemlerinin nasıl çalıştığını görmek için.

Yardımcı Yöntemler

  • GetVariableInfo(variable, serialization, .defined, .type, .length) — değişken hakkında bilgi alın: tanımlanmış olup olmadığı, sınıfı ve serileştirme uzunluğu.
  • GetVariableDefined(variable, .defined) – değişkenin tanımlı olup olmadığı.
  • GetVariableType(variable, .type) - değişkenin sınıfını alın.
  • GetStatus() - Python tarafındaki son istisnayı alın ve kaldırın.
  • GetModuleInfo(module, .imported, .alias) - modül değişkenini ve içe aktarma durumunu alın.
  • GetFunctionInfo(function, .defined, .type, .docs, .signature, .arguments) — işlev hakkında bilgi alın.

birlikte çalışabilirlik

Python Gateway’i terminalden nasıl çağıracağınızı öğrendiniz, şimdi üretimde kullanmaya başlayalım. Bu modda Python ile etkileşim kurmanın temeli isc.py.ens.Operation. Bize şunları sağlar:

  • Python'da kod yürütme
  • Python içeriğini kaydet/geri yükle
  • Python'dan veri yükleme ve alma

Temel olarak, bir Python işlemi bir sarmalayıcıdır. isc.py.Main. Operasyon isc.py.ens.Operation InterSystems IRIS ürünlerinden Python süreciyle etkileşim kurma yeteneği sağlar. Beş sorgu desteklenir:

  • isc.py.msg.ExecutionRequest Python kodunu yürütmek için. İadeler isc.py.msg.ExecutionResponse yürütme sonucu ve istenen değişkenlerin değerleri ile.
  • isc.py.msg.StreamExecutionRequest Python kodunu yürütmek için. İadeler isc.py.msg.StreamExecutionResponse yürütmenin sonucu ve istenen değişkenlerin değerleri. Analog isc.py.msg.ExecutionRequestancak dizeler yerine akışları kabul eder ve döndürür.
  • isc.py.msg.QueryRequest Bir SQL sorgusu yürütmenin sonucunu iletmek için. İadeler Ens.Response.
  • isc.py.msg.GlobalRequest/isc.py.msg.ClassRequest/isc.py.msg.TableRequest genel/sınıf/tablo verilerini iletmek için. İadeler Ens.Response.
  • isc.py.msg.SaveRequest Python içeriğini kaydetmek için. İadeler Ens.StringResponse bağlam kimliği ile.
  • isc.py.msg.RestoreRequest Python bağlamını geri yüklemek için.

    Buna ek olarak, isc.py.ens.Operation iki ayarı vardır:

    • Initializer — arayüzü uygulayan bir sınıf seçmek isc.py.init.Abstract. Fonksiyonları, modülleri, sınıfları vb. yüklemek için kullanılabilir. İşlem başladığında bir kez yürütülür.
    • PythonLib - (Yalnızca Linux) yükleme sırasında hata görürseniz değerini şu şekilde ayarlayın: libpython3.6m.so hatta Python kütüphanesinin tam yolunda.

İş süreçlerinin oluşturulması

İş süreçlerinin gelişimini kolaylaştıran iki sınıf mevcuttur:

  • isc.py.ens.ProcessUtils değişken ikameli etkinliklerden ek açıklamalar çıkarmanıza olanak tanır.
  • isc.py.util.BPEmulator Python ile iş süreçlerini test etmeyi kolaylaştırır. Mevcut süreçte bir iş sürecini (Python parçaları) yürütebilir.

Değişken Değiştirme

Miras alınan tüm iş süreçleri isc.py.ens.ProcessUtilsyöntemini kullanabilir GetAnnotation(name) etkinlik ek açıklama değerini adına göre almak için. Etkinlik ek açıklaması, Python'a aktarılmadan önce InterSystems IRIS tarafında hesaplanacak değişkenleri içerebilir. Değişken değiştirmenin sözdizimi şöyledir:

  • ${class:method:arg1:...:argN} - yöntem çağrısı
  • #{expr} — kodu ObjectScript dilinde yürütün.

Test iş sürecinde bir örnek mevcuttur isc.py.test.Processörneğin etkinlikte Correlation Matrix: Graph: f.savefig(r'#{process.WorkDirectory}SHOWCASE${%PopulateUtils:Integer:1:100}.png'). Bu örnekte:

  • #{process.WorkDirectory} nesnenin WorkDirectory özelliğini döndürür process, sınıfın bir örneğidir isc.py.test.Process onlar. mevcut iş süreci.
  • ${%PopulateUtils:Integer:1:100} bir yöntem çağırır Integer sınıf %PopulateUtils, argümanları iletmek 1 и 100aralıkta rastgele bir tamsayı döndürüyor 1...100.

İş sürecini test edin

Test ürünleri ve test iş süreçleri varsayılan olarak Python Gateway'in bir parçası olarak mevcuttur. Bunları kullanmak için:

  1. İşletim sistemi terminalinde şunu çalıştırın: pip install pandas matplotlib seaborn.
  2. InterSystems IRIS terminalinde şunu çalıştırın: do ##class(isc.py.test.CannibalizationData).Import() Test verilerini doldurmak için.
  3. Ürünleri başlatın isc.py.test.Production.
  4. İstek türünü gönder Ens.Request в isc.py.test.Process.

Hep birlikte nasıl çalıştığını görelim. Açık isc.py.test.Process BPL düzenleyicide:

InterSystems IRIS'te Python Ağ Geçidi

Kod Yürütme

En önemli zorluk Python kodunu çalıştırmaktır:

InterSystems IRIS'te Python Ağ Geçidi

Kullanılan sorgu isc.py.msg.ExecutionRequest, işte özellikleri:

  • Code — Python kodu.
  • SeparateLines — kodun yürütülmek üzere satırlara bölünüp bölünmeyeceği. $c(10) (n) dizeleri ayırmak için kullanılır. Lütfen mesajın tamamının bir kerede işlenmesinin önerilmediğini unutmayın; bu işlev yalnızca iletiyi işlemek için tasarlanmıştır. def ve benzer çok satırlı ifadeler. Varsayılan 0.
  • Variables — cevaba eklenecek değişkenlerin virgülle ayrılmış listesi.
  • Serialization — Döndürmek istediğimiz değişkenleri nasıl serileştiririz. Seçenekler: Str, Repr, JSON, Pickle и Dill, varsayılan Str.

Bizim durumumuzda yalnızca özelliği ayarladık Codebu nedenle diğer tüm özellikler varsayılan değerleri kullanır. arayarak ayarladık process.GetAnnotation("Import pandas")çalışma zamanında değişken değişimi gerçekleştirildikten sonra bir açıklama döndürür. Sonuçta kod import pandas as pd Python'a aktarılacak. GetAnnotation çok satırlı Python komut dosyalarının elde edilmesinde yararlı olabilir, ancak bu kod alma yönteminde herhangi bir kısıtlama yoktur. Özelliği ayarlayabilirsiniz Code sizin için uygun olan herhangi bir şekilde.

Değişkenleri Alma

Kullanımıyla ilgili bir başka ilginç zorluk isc.py.msg.ExecutionRequest - Correlation Matrix: Tabular:

InterSystems IRIS'te Python Ağ Geçidi

Python tarafındaki Korelasyon Matrisini hesaplar ve değişkeni çıkarır. corrmat istek özelliklerini ayarlayarak JSON formatında InterSystems IRIS'e geri dönün:

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

Sonuçları Visual Trace'de görebiliriz:

InterSystems IRIS'te Python Ağ Geçidi

Ve eğer BP'de bu değere ihtiyacımız varsa, bunu şu şekilde elde edebiliriz: callresponse.Variables.GetAt("corrmat").

Veri aktarımı

Şimdi InterSystems IRIS'ten Python'a veri aktarımından bahsedelim; tüm veri aktarımı istekleri arayüzü uygular isc.py.msg.DataRequestaşağıdaki özellikleri sağlar:

  • Variable — içine verilerin yazıldığı bir Python değişkeni.
  • Type — değişken türü: dataframe (pandaların veri çerçevesi) veya list.
  • Namespace — veri aldığımız alan. Naylon poşet isc.py bu alanda mevcut olmalıdır. Bu ürün desteği olmayan bir alan olabilir.

Bu arayüze dayanarak 4 sınıf istek uygulanır:

  • isc.py.msg.QueryRequest - özelliği ayarlayın Query SQL sorgusu göndermek için.
  • isc.py.msg.ClassRequest - özelliği ayarlayın Class sınıf verilerini iletmek için.
  • isc.py.msg.TableRequest - özelliği ayarla Table Tablo verilerini aktarmak için.
  • isc.py.msg.GlobalRequest - özelliği ayarla Global küresel veri aktarımı için.

Test sürecinde etkinliğe bakın RAWNerede isc.py.msg.QueryRequest eylem halinde gösterilmiştir.

InterSystems IRIS'te Python Ağ Geçidi

Python Bağlamını Kaydetme/Geri Yükleme

Son olarak Python içeriğini InterSystems IRIS'e kaydedebiliriz, bunu yapmak için isc.py.msg.SaveRequest argümanlarla:

  • Mask — Yalnızca maskeyle eşleşen değişkenler kaydedilir. Destekleniyor * и ?. Örnek: "Data*, Figure?"... Varsayılan *.
  • MaxLength — Saklanan değişkenin maksimum uzunluğu. Bir değişkenin serileştirilmesi daha uzunsa göz ardı edilecektir. Herhangi bir uzunluktaki değişkenleri elde etmek için 0'a ayarlayın. Varsayılan $$$MaxStringLength.
  • Name — Bağlam adı (isteğe bağlı).
  • Description — Bağlamın açıklaması (isteğe bağlı).

İadeler Ens.StringResponse с Id bağlam kaydedildi. Test sürecinde etkinliğe bakın Save Context.

İlgili istek isc.py.msg.RestoreRequest InterSystems IRIS'ten Python'a içerik yükler:

  • ContextId — bağlam tanımlayıcı.
  • Clear — geri yüklemeden önce bağlamı temizleyin.

Jupyter Not Defteri

Jupyter Not Defteri kod, görselleştirmeler ve metin içeren not defterleri oluşturmanıza ve yayınlamanıza olanak tanıyan açık kaynaklı bir web uygulamasıdır. Python Gateway, BPL işlemlerini Jupyter Notebook biçiminde görüntülemenize ve düzenlemenize olanak tanır. Lütfen şu anda normal Python 3 uygulayıcısının kullanıldığını unutmayın.

Bu uzantı, ek açıklamaların Python kodu içerdiğini varsayar ve etkinlik adlarını önceki başlıklar olarak kullanır. Jupyter Notebook'ta PythonGateway iş süreçlerini geliştirmek artık mümkün. İşte mümkün olanlar:

  • Yeni iş süreçleri yaratın
  • İş süreçlerini silin
  • Yeni aktiviteler oluşturun
  • Faaliyetleri değiştir
  • Etkinlikleri sil

Burada tanıtım videosu. Ve birkaç ekran görüntüsü:

Süreç araştırmacısı

InterSystems IRIS'te Python Ağ Geçidi

Süreç editörü

InterSystems IRIS'te Python Ağ Geçidi

Montaj

  1. InterSystems IRIS 2019.2+ sürümüne ihtiyacınız olacak.
  2. PythonGateway v0.8+'ı yükleyin (yalnızca gerekli isc.py.util.Jupyter, isc.py.util.JupyterCheckpoints и isc.py.ens.ProcessUtils).
  3. ObjectScript kodunu depodan güncelleyin.
  4. Yürüt do ##class(isc.py.util.Jupyter).Install() ve talimatları izleyin.

Belgeleme.

Bulgular

MLToolkit, oluşturulan modellerin doğrudan iş süreçlerinizde kolayca kullanılabilmesi için modelleri ve işlem ortamını birleştirmeyi amaçlayan bir araç setidir. Python Gateway, MLToolkit'in bir parçasıdır ve Python diliyle entegrasyon sağlayarak Python'da (birçok Veri Bilimcisi için ana ortam) oluşturulan herhangi bir makine öğrenimi algoritmasını düzenlemenize, uyarlanabilir, robotik analitik AI /'yi hızlı bir şekilde oluşturmak için çok sayıda hazır kitaplığı kullanmanıza olanak tanır. InterSystems platformu IRIS'te makine öğrenimi çözümleri.

referanslar

MLToolkit

MLToolkit kullanıcı grubu, InterSystems kurumsal GitHub organizasyonunun bir parçası olarak oluşturulan özel bir GitHub deposudur. Python Gateway de dahil olmak üzere MLToolkit bileşenlerini yükleyen, öğrenen veya halihazırda kullanan harici kullanıcılara yöneliktir. Grubun pazarlama, üretim, tıp ve diğer birçok endüstri alanında (kaynak kodu ve test verileriyle birlikte) çok sayıda uygulanmış vakası vardır. ML Araç Seti Kullanıcı Grubuna katılmak için lütfen aşağıdaki adrese kısa bir e-posta gönderin: [e-posta korumalı] ve mektubunuza aşağıdaki bilgileri ekleyin:

  • GitHub kullanıcı adı
  • Organizasyon (çalışıyor veya okuyorsunuz)
  • Pozisyon (kuruluşunuzdaki gerçek pozisyonunuz, "Öğrenci" veya "Bağımsız").
  • ülke

Makaleyi okuyan ve yapay zeka ve makine öğrenimi motorlarını geliştirmeye veya barındırmaya yönelik bir platform olarak InterSystems IRIS'in yetenekleriyle ilgilenenler için, sizi kuruluşunuzun ilgisini çeken olası senaryoları tartışmaya davet ediyoruz. Firmanızın ihtiyaçlarını analiz edip ortak bir aksiyon planı belirlemekten mutluluk duyacağız; AI/ML uzman ekibimizin iletişim e-posta adresi – [e-posta korumalı].

Kaynak: habr.com

Yorum ekle