クリアフィルター
記事
Megumi Kakechi · 2020年12月13日
これはInterSystems FAQ サイトの記事です
%ZSTARTルーチンを インスタンス開始時に起動しないように構成設定用ファイルを手動で変更します。
【注意】インスタンスの起動環境の変更は、通常管理ポータルで行うものなので、以下に説明する方法は、%ZSTART の SYSTEM ラベルの動作を無効化する方法以外では利用しないようにしてください(別のパラメータを誤って修正してしまった場合、起動できなくなる可能性がありますのでご注意ください)。
1. インスタンス のインストールディレクトリ以下にある構成設定用ファイル(cache.cpf/iris.cpf)をテキストエディタで開きます。 ※構成ファイルは、事前にバックアップ(コピー)していただくことを推奨します。
2. [Startup]セクションにあるSystemStartの値を0に変更し、保存します。
3. ファイル変更後、一旦 インスタンスを通常の方法で停止し、再度開始してください。
SystemStart パラメータの詳細については、下記ドキュメントについてもご参照ください。パラメータ・ファイル・リファレンス_SystemStart【IRIS】
記事
Mihoko Iijima · 2021年4月22日
これは InterSystems FAQ サイトの記事です。
ユーザ定義エラーとして使用したいエラーコードと対応するメッセージを記述したXMLを用意します。
なお、エラーコードは負の整数で設定してください。
<?xml version="1.0" encoding="UTF-8" ?>
<MsgFile Language="ja">
<MsgDomain Domain="UserErrors">
<Message Id="-111" Name="MyError">エラーが発生しました</Message>
<Message Id="-222" Name="MyError2">エラーが発生しました2</Message>
</MsgDomain>
</MsgFile>
XML ファイルが作成できたら使用したいネームスペースにロードします。
set x=##class(%MessageDictionary).Import("error.xml")
ロード完了後、次のようなコマンドでユーザ定義エラーを取得、表示することができます。
USER>set error=$system.Status.Error(-111) // エラーコード -111 を指定してエラーを作成
USER>write $system.Status.GetErrorText(error) // エラーからエラーメッセージを出力
エラー <UserErrors>-111: エラーが発生しました
USER>do $system.Status.DecomposeStatus(error,.val) // エラーの情報を配列変数にセット
USER>zwrite val
val=1
val(1)="エラー <UserErrors>-111: エラーが発生しました"
val(1,"caller")="zError+1^%SYSTEM.Status.1"
val(1,"code")=-111
val(1,"dcode")=-111
val(1,"domain")="UserErrors"
val(1,"namespace")="TEST"
val(1,"param")=0
val(1,"stack")=$lb("e^zError+1^%SYSTEM.Status.1^1","e^^^0")
記事
Hiroshi Sato · 2021年9月23日
これは InterSystems FAQ サイトの記事です。レコード・マップは、区切り文字付きのレコードや固定幅のレコードを含むファイルをInteroperability機能で使用するメッセージクラスへマッピングしたり、Interoperability機能のメッセージクラスからテキストファイルへマッピングする作業を効率的に行うための機能です。
レコードマップのマッピング定義は管理ポータルで作成でき、CSVファイルを読み込ませながら定義するCSVレコードウィザードも提供しています。
プロダクションでレコードマップを利用する場合は、レコードマップ用ビジネス・サービス、またはビジネス・オペレーションを追加し、作成したレコードマップ定義クラスを指定すれば完成です。
使用例は、以下から取得できます。
レコードマップサンプル
レコードマップの詳細な説明は、以下のドキュメントをご参照ください。
レコード・マッパーの使用法について【IRIS】Ensemble レコード・マッパーの使用法について
記事
Hiroshi Sato · 2021年12月28日
これは InterSystems FAQ サイトの記事です。
コンパイル時のフラグや修飾子の記号と意味については、以下ドキュメントをご参照ください。
コンパイルフラグについて【IRIS】
コンパイルフラグについて
なお、開発環境のスタジオやVisual Studio Codeでは、開発環境の設定画面でフラグを変更できます。
スタジオは、[ツール] > [オプション] > [コンパイラ] > [フラグと最適化]
VSCodeは、[View] > [Command Palette...]
ターミナルでコンパイルを実行するときは $system.OBJ.CompileAll() などのシステムユーティリティが利用できます。コンパイルフラグを引数に指定しない場合、デフォルトのコンパイルフラグが利用されます。デフォルトのフラグは $system.OBJ.ShowFlags() で確認できます。
USER>do $system.OBJ.ShowFlags() b - Include sub classes. c - Compile. Compile the class definition(s) after loading. <省略>Default flags for this namespace =dilYou may change the default flags with the SetFlags(flags,system) classmethod.
デフォルトのコンパイルフラグを変更するには、$system.OBJ.SetFlags() メソッドを使用します。引数にデフォルトフラグに指定したいフラグを文字列として指定します。戻り値に設定後のフラグが文字列で返ります。
USER>write $system.OBJ.SetFlags("ck")=cdikl
記事
Hiroshi Sato · 2021年9月2日
これは InterSystems FAQ サイトの記事です。
$ZF(-100) のコマンドは、以下のフォーマットで使用します。
$ZF(-100, フラグ, コマンド名, コマンドの引数)
OSコマンドを実行する場合は、「/shell」フラグが必要です。例えば mkdir であれば、次のように使用します。
// mkdir C:\temp\newdir Write $ZF(-100, "/shell", "mkdir", "C:\temp\newdir")
コマンドの引数が複数ある場合は、以下の例のように引数の数だけ二重引用符で括ってカンマ区切りで指定します。
// move C:\temp\a.txt C:\temp\a2.txt Write $ZF(-100, "/shell", "move", "C:\temp\a.txt", "C:\temp\a2.txt") // net use Z: \\filesrv\public /user:user password Write $ZF(-100, "/shell", "net", "use", "Z:", "\\filesrv\public", "/user:user", "password")
また、同期・非同期実行は以下のように使用します。
// call BATPATH バッチファイルを呼び出します set BATPATH="C:\temp\test.bat" set status = $ZF(-100, "/shell", "call", BATPATH) // 同期 set status = $ZF(-100, "/shell /async", "call", BATPATH) // 非同期
詳細は以下のドキュメントをご覧ください。$ZF(-100) の使用方法について【IRIS】
$ZF(-100) の使用方法について
尚、$ZF(-100) コマンドが使用可能なバージョンは、January 2018 SV の脆弱性に対応している以下のバージョンになります(2019年1月現在)。
* Caché / Ensemble * 2013.1.7.974.6 2014.1.5.851.3 2015.1.4.803.6 2015.2.5.953.3 2016.1.4.104.2 2016.2.3.903.4 2017.1.3.317.0 2017.2.1.801.3 2017.2.2.865.0
2018.1以降の全てのバージョン
記事
Hiroshi Sato · 2021年8月30日
これは InterSystems FAQ サイトの記事です。
何らかの理由でサーバー移行が必要になった際に、移行前の環境から移行後の環境に設定情報をコピーすることで設定作業を軽減できます。
以下の設定情報を移行できます。
iris.cpf
SQLゲートウェイ設定
Webゲートウェイ設定 *注1
IRISSYSデータベースに保存しているユーザー作成ルーチンなど *注2
セキュリティ設定
タスク設定
注1 パスワードを設定している場合には、パスワードのみ手動で再設定が必要です。注2 ^%ZSTART, ^ZMIRRORルーチンなど 優先接続サーバー設定に関しても、物理的には移行可能ですが、Windowsのレジストリー情報をコピーする必要があります。
レジストリー情報をコピーして他システムに移行する方法は通常推奨される方法ではありません。
各設定のエクスポート/インポート方法は、添付ファイルの内容をご確認ください。
また、現在は英語ドキュメントのみの公開となっておりますが、以下のドキュメントもあわせてご覧ください。
Server Migration Guide
記事
Megumi Kakechi · 2021年8月26日
これは InterSystems FAQ サイトの記事です。
こちらは、コンパイル時に既にそのクラスのインスタンスを開いている場合に起こるエラーです。
対処方としては以下の2つの方法があります。
インスタンスを開いているプロセスまたはアプリケーションを終了する
スタジオのビルドメニュのコンパイルオプション:コンパイルフラグ “使用中のクラスをコンパイル” をチェックしコンパイルを行う
インスタンス化しているプロセスを特定したい場合は、以下のサンプルルーチンをお試しください。
/// Test.mac
search(classname) public {
Set pid=""
Set pid=$order(^$Job(pid))
While pid'="" {
Do checkVars(pid,classname)
Set pid=$Order(^$Job(pid))
}
} checkVars(pid,string) {
Set $ztrap="err"
Set var=""
For {
Set var=$zu(88,1,pid,var) q:var=""
Set val=$zu(88,2,pid,var)
If val[string {
Write !,pid,":",var," = ",val,!
}
}
Quit
err
Set $ztrap=""
Quit
}
こちらのサンプルルーチンは、ユーザプロセスのローカル変数を検索して指定したクラスを使用しているか確認します。
≪実行例≫
USER>do search^Test("Test.Person") 2352:p1 = 1@Test.Person6324:p2 = 2@Test.Person
※この場合は、Pid=2352 と Pid=6324 のプロセスが Test.Person を使用しています。
お知らせ
Mihoko Iijima · 2022年5月22日
開発者のみなさん、こんにちは!
2022年3月9日開催「InterSystems Japan Virtual Summit 2022」のセッション「オープンソースだけで IRIS on Kubernetes を動かそう」のアーカイブを YouTube に公開いたしました。
(プレイリストはこちら)
Docker は使いこなせるようになってきたけど、Kubernetes はなかなか手を出すチャンスがないな、という方々を対象に手持ちの Windows/PC 上に K8s 環境を構築して色々試すことを最終目標としたセッションです。
開発者コミュニティの記事「microk8sでKubernetesをお手軽に試す」との紙面連動です。
ぜひご参照ください。
【目次】
01:43 Kubernetes について 参考動画:KubernetesでのIRISの運用とそれを支える仕組み
05:48 Microk8S 利用の動機付け
09:50 デモ 記事:microk8sでKubernetesをお手軽に試す の内容に沿ってデモを動かしています。
14:00 デモ - IRIS起動の確認
15:35 デモ - MicroK8S 環境をクラスタ構成にする
17:32 デモ - Longhorn をデプロイする
19:28 デモ - Longhorn を Persistent Volume としてIRISが使用するように構成する
20:58 デモ - ノード障害発生時の動作を確認
23:15 まとめ ↓参考となるオンラインラーニング(英語)↓ https://learning.intersystems.com/course/view.php?name=KubernetesExercise
記事
Hiroshi Sato · 2022年8月8日
これは InterSystems FAQ サイトの記事です。
TCP アダプタを使用するビジネスホストの [接続中を維持(StayConnected)]と[プールサイズ(PoolSize)]のデフォルト設定値は以下の通りです。
StayConnected = -1(常時接続タイムアウト無し)PoolSize = 1
ネットワークの問題でビジネスホストへの接続が切断された場合に、プロダクション側では切断されたことを検知できないため新しい接続を受け付けません。
またこの状況の時、イベントログにも記録されません。
StayConnected が デフォルト値(-1)の場合、接続がタイムアウトしないため新しい接続を受け付けるためには、ビジネスホストを再起動する必要があります。
このような状況を回避するためには、StayConnected を 0 以上の値に設定することを推奨します。
例えば300(秒)に設定した場合、TCP ビジネスホストは 300 秒以上新たなメッセージを受信しなかった場合に、自動的に接続を切断して再接続できます。
処理量の多いシステムの場合には、通常 StayConnected の値をさらに小さな値、例えば 5(秒)に設定します。
お知らせ
Seisuke Nakahashi · 2020年8月21日
日本語ドキュメント公開
このたび、InterSystems IRIS 2020.1 の日本語ドキュメントが完成しました。それぞれ以下のWEBサイトで公開をしています。
IRIS 2020.1
IRIS for Health 2020.1
Health Connect 2020.1
ページ内の「すべてのドキュメント」アイコンをクリックすることで、各技術コンテンツを参照いただけます。
キューブから日本語ドキュメントを参照する
IRIS for Windows では、以下の設定を行うことで、キューブの[ドキュメント]をクリックしたときに、上記の日本語ドキュメントページを表示させることが可能となります。
<IRIS installdir>\httpd\conf\httpd-doc.conf をエディタで開き、Redirect先のURL(右側)を、日本語ドキュメントのもに書き換える。 具体的には、URLの最後 docbook を docbookj に変更する
IRISを再起動する
たとえば、IRIS 2020.1 の場合、以下のように httpd-doc.conf を編集することで、
キューブの[ドキュメント]をクリックすると、日本語ドキュメントページが表示されるようになります。
ぜひ日本語ドキュメントをご活用いただき、IRIS製品をお使いくださいませ!
記事
Tomoko Furuzono · 2025年3月25日
これは、InterSystems FAQサイトの記事です。
SQLでクエリ実行時、ORDER BYで並べ替えをする場合、各RDBMSによって、照合順が異なることがあります。
たとえば、NULLと空文字の混じった文字列のカラムを並べ替える場合、
IRIS SQLでは、既定の照合順は下記のようになりますが、
NULL, 空文字, 0, 00, 01, 1, 10, 100, 11, A, a, B, b
Oracleでは、下記のような照合順になります。
空文字, 0, 00, 01, 1, 10, 100, 11, A, B, a, b, NULL
複数のDB由来のデータを取り扱う際には、このような照合順の違いを合わせたい場合があります。
IRISの場合、既定の文字列照合はSQLUPPERですが、照合タイプを変更することによって、照合順を変えることが出来ます。ドキュメント:照合
上記のIRIS SQLとOracleの違いを合わせるためには、照合タイプを「SQLSTRING」に設定し、インデックスを作成します。
Property TestColumn As %String(COLLATION = "SQLSTRING");
Index IdxTest On TestColumn;
但し、Nullについてはこの方法では対応できないため、Nullの照合順を合わせたい場合には、ORDER BY句を下記のようにします。
ORDER BY IFNULL(TestColumn, 1, 0), TestColumn
記事
Tomoko Furuzono · 2025年4月7日
これはInterSystems FAQサイトの記事です。
指定した文字列式のうち指定したフィールド幅(半角での文字数)に収まる文字数を取得する関数:$ZPOSITIONと、部分文字列を返す関数:$EXTRACTを組み合わせることによって、全角/半角混在文字列から、指定された幅の文字列を取得することが出来ます。※$Extractは文字単位で処理を行いますので、全角/半角を区別した取り扱いはできません。
構文:
$ZPOSITION(<文字列式>, <フィールド幅>, <全角文字に使用するピッチ値(デフォルトは2)>)
$EXTRACT(<文字列>, <開始位置>, <終了位置>)
例:
//指定した文字列(str)のうち、全角=2/半角=1 の幅として、フィールド幅10(半角10文字分)に含まれる文字数を取得
USER>set str="あい1234うえお"
USER>write $ZPOSITION(str,10,2)
7
//指定した文字列(str)のうち、全角=2/半角=1 の幅として、フィールド幅10(半角10文字分)に含まれる文字列を取得
USER>write $extract(str,1,$zposition(str,10,2))
あい1234う
$ZPOSITION、$EXTRACTの詳細については、下記各ドキュメントページをご確認ください。
ドキュメント:$ZPOSITION(ObjectScript)
ドキュメント:$EXTRACT(ObjectScript)
お知らせ
Toshihiko Minamoto · 2022年2月9日
インターシステムズは、2018年からInterSystems IRISで2ストリームのリリースサイクルを採用しています(開始時のお知らせをご覧ください)。
Continuous delivery (CD) リリース —このリリースは、新機能を迅速に提供し、継続的に更新され、新機能を直ちに利用するアプリケーションの開発、およびデプロイに最適です。
Extended maintenance (EM) リリース — このリリースは、CDリリースよりも頻度は低いですが、メンテナンス・リリースの安定性を提供します。新機能をいち早く利用することよりも、メンテナンスリリースでの修正が容易であることが重要な大規模エンタープライズアプリケーションに最適です。
このアプローチについては非常に好意的なフィードバックをいただいており、人々は「鈍行列車(slow train)」と「快速列車(fast train)」という言葉を使うようになりました。 EMリリースは、大規模なオンプレミスの顧客基盤をs持つお客様やパートナーに好まれる「鈍行列車」です。 CDリリースは、最新かつ最高の機能を求めるお客様やパートナーに好まれる「快速列車」です。
他の多くのソフトウェアベンダーは、この2つのアプローチを採用しており、通常、「鈍行列車」をLTS(Long Term Support)と呼んでいます。 インターシステムズのサポートに対するアプローチは、非常に顧客中心であり、お客様がどのリリースを使用しているかに関わらず、サポートを行います。 そのため、当社ではEM(Extended Maintenance)という用語を使用しています。
当社のリリースサイクルは、当社の成長とともに進化してきました。 当初、EMのリリースはキット形式で、CDのリリースはコンテナ形式でした。 2020年には、コンテナの普及に伴い、EMリリースにキットとコンテナの両方を含めるようになりました。 その結果、EMのリリースは毎年「.1」、CDのリリースは「.2」、「.3」などとなっています。
今回の2021.2のリリースでは、その流れをもう少し進化させました。
CDリリースは、コンテナだけでなく、キット形式でも提供されるようになりました。
InterSystems IRISとInterSystems IRIS for Healthに加えて、HealthShare Health Connectをこれらのリリース・トレインに追加しました
これは、お客様からの要望によるものです。 70%以上の開発者がInterSystems IRISをコンテナで使用しているにもかかわらず、MacOSやWindows上で直接開発している開発者は、快速列車へのアクセスを望んでいました。 CDリリースでのプロダクション展開も一般的になってきていますが、プロダクションでコンテナを使って実行することにあまり慣れていない顧客もいます。 Health Connectのお客様は、頻繁に出る新機能へのアクセスを望んでいました。
CDリリースの制限
CDリリースをキット形式で提供するようになったとはいえ、EMリリースとは異なります。 CDリリースは「快速列車」であり、お客様が迅速かつ容易に最新かつ最高のものに移行することを目的としています。 CDリリースにはいくつかの制限があります。
CDリリースには、メンテナンスアップデートやSVアップデートはありません。 CDリリースには、アドホック機能はありません。その代わり、次のCDリリースに移行すると、そのリリースにはすべての不具合修正とセキュリティアップデートが含まれます。
Caché または Ensemble から CD リリースへのインプレースコンバージョンはサポートされていません。 代わりに、最新の EM リリースに移行できます。当社の前世代製品であるCachéやEnsembleでアプリケーションを構築されたお客様やパートナーの皆様には、慣れ親しんだリズムに合っている「鈍行列車」をご利用いただくのがベストです。
CDリリースからのアップグレードは以下の方法に限定されています。
次のCDリリース(例:2020.2→2020.3)
次のメジャーEMリリースまたはその年のメンテナンスバージョン (2020.2→2021.1, 2020.3→2022.1, 2020.3->2021.1.1)
これらの制限は新しいものではありませんが、過去にCDリリースを使用していたお客様は単にコンテナを交換していただけでした。お客様が他のものを必要とする状況に遭遇しなかっただけです。Virtual Summit 2020でインターシステムズ社の製品ライフサイクルについてのセッションを行いましたが、2ストリームアプローチはうまく機能しており、CDリリースの制限は自然なことだというフィードバックを受けました。
今回、キット形式のCDリリースを導入したことで、CDリリースとEMリリースの仕組みを皆さんに思い出していただきたいと思います。 2021.2のキット版をお使いの方は、2022.1へのアップグレードを期待してください。 そこからは、"快速列車 "に乗り続けることも、"鈍行列車 "に乗り換えることも、余計な手間をかけずにできるでしょう。
記事
Megumi Kakechi · 2022年12月1日
これは InterSystems FAQ サイトの記事です。
複数インスタンスでライセンスを共有する場合、ライセンスを統合管理するライセンスサーバの設定が必要です。
1. ライセンスサーバの構成
1) ライセンスキーの配置
ライセンスキー(IRIS.key/cache.key)は、すべての インスタンスの <インストールディレクトリ>/mgr に配置してください。
ただし、IRIS 2021.1 以降のバージョンをお使いの場合は KeyDirectory を指定することで全てのインスタンスへのライセンスキーの配置は必要なくなります。
KeyDirectory を指定して各インスタンスにライセンスキーをロードする場合、LicenseID の設定が必要になります。各インスタンスの開始時にローカルの iris.key ファイルが検出されない場合、LicenseID を使用してライセンスサーバにライセンスキーを要求します。LicenseID は、管理ポータルの以下のメニューで設定します。
管理ポータル: [システム管理] > [構成] > [追加設定] > [開始]:LicenseID
2) ライセンスサーバの設定
ライセンスサーバの設定は、全ての構成で同一のライセンスサーバを使用するように定義します(全ての構成で設定します)。ライセンスサーバは、管理ポータルの以下のメニューで設定します。
管理ポータル: [システム管理] > [ライセンス] > [ライセンスサーバ]
既定のLOCAL を更新、または削除(+新規作成)して登録します。
【注意】リモート・ライセンス・サーバがファイアウォールで保護されている場合、UDP トラフィックのためにライセンス・サーバ・ポートが開かれている必要があります。
設定項目詳細については、ドキュメントをご参照ください。ライセンスサーバの構成について【IRIS】ライセンスサーバの構成について
3) 全ての構成の再起動
ライセンスキーの配布と、ライセンスサーバの設定が完了したら、一旦全ての構成を停止します。その後、ライセンスサーバを設定した構成から開始し、正しいライセンスサーバに接続していることを確認した後で、ライセンスサーバ以外の構成を開始します。
確認には、%SYSTEM.License クラスの ShowServer()メソッドを使用します。実行例は以下の通りです。
USER>do $system.License.ShowServer()
アクティブなライセンス・サーバアドレス = XXX.XXX.XXX.XXX ポート = XXXX
このほかにも、ライセンス・サーバが管理しているライセンスの使用状況を確認するためのユーティリティが、%SYSTEM.License クラスにあります。
詳細はクラスリファレンスか、以下ドキュメントをご参照ください。ライセンス使用状況を確認するユーティリティについて【IRIS】ライセンス使用状況を確認するユーティリティについて
また、ライセンスサーバのフェールオーバを行う目的で、複数のライセンスサーバを設定することもできます。
詳細は、添付資料をご参照ください。
2. ライセンスの監視
ライセンスサーバの設定を行ったインスタンスのうち、任意の1つインスタンスで以下のコマンドを発行します。
USER>do $system.License.DumpKeys()
License server Client data (1 key[s]) dumped to: c:\intersystems\iris\mgr\dumpkeys.txt at XXX
出力ファイル dumpservers.txt はライセンスサーバが稼働するインスタンスの mgr ディレクトリに生成されます。
内容は以下のようになります(ライセンスサーバが稼働するインスタンスで確認してください)。
USER>!type c:\intersystems\iris\mgr\dumpkeys.txt
例:
Dump of clients using the following key:
LicenseCapacity=InterSystems IRIS 2022.1, Enterprise:...
CustomerName=XXX
OrderNumber=XXX
ExpirationDate=XXX
AuthorizationKey=XXX
MachineID=
LicenseID=
:
Client LU Connections Server Instance
192.29.xx.xxx 1 2 127.0.0.1 IRIS
192.29.xx.xxx 1 5 192.29.xx.xxx IRIS
Total connections = 7, License units consumed = 2
USER>
3. ライセンスの更新
IRIS 2021.1 以降のバージョンで各インスタンスのライセンスキーを更新する場合、ライセンスサーバの KeyDirectory 内のキーファイルを置き換えて有効化したあと、ReloadKeys^%SYS.LICENSE を実行します。
%SYS>d ReloadKeys^%SYS.LICENSE
1 key file(s) uploaded to license server.
各インスタンスのライセンスモニタ (^LMFMON) が、構成されている LicenseID に対して異なるキーがあるかどうかを 30 分おきに確認し、ある場合はアップグレードを実行しようとします。アップグレードされると、message.log には以下のように記録され、ライセンスが更新されます。
11/21/22-14:46:18:721 (12928) 0 [Utility.Event] LMF Info: New license key for ID ***** downloaded and activated.11/21/22-14:46:24:745 (12928) 0 [Utility.Event] LMF Info: Connected to license server 172.18.101.2,4002
【注意】場合よっては、インスタンスの再起動が必要な時があります。その場合、ライセンスモニタは以下のようなログを記録します。再起動を行うことで、新しいラインセンスキーがロードされます。
11/21/22-13:40:30:002 (10448) 0 [Utility.Event] ライセンスアップグレードエラー:Conversion from Core Capacity to Concurrent User インスタンスの再起動が必要です。11/21/22-13:40:30:004 (10448) 1 [Utility.Event] LMF Warning: New license key for ID ***** downloaded but could not activate.
【関連】ライセンスサーバでライセンスを一元管理する方法
記事
Minoru Horita · 2020年6月26日
アイリスデータセットのK平均クラスタリング
みなさん、こんにちは。 今回はアイリスデータセットでk平均アルゴリズムを使用します。
注意:Ubuntu 18.04、Apache Zeppelin 0.8.0、python 3.6.5で以下を実行しました。
概要
K平均法は、クラスタリングの問題を解決する最も単純な教師なし学習アルゴリズムの1つです。 このアルゴリズムは、同じグループ内のオブジェクト(グループはクラスターです)が他のグループ内のオブジェクトよりも(意味的に)互いに類似するようにすべてのオブジェクトをグループ化します。 例えば、緑の芝生に赤いボールのある画像があるとします。 K平均法はすべてのピクセルを2つのクラスターに分割します。 1番目のクラスターにはボールのピクセルが含まれ、2番目のクラスターには芝生のピクセルが含まれます。
アイリスデータセットは、3種のアイリスの花の特徴をいくつか含むテーブルです。 種には「Iris-setosa」、「Iris-versicolor」、「Iris-virginica」があります。 それぞれの花には5つの特徴(花びらの長さ、花びらの幅、がく片の長さ、がく片の幅、種 )があります。
要件の確認
まず、すべての要件を確認しましょう。 次のように、ターミナルに「which python3」貼り付けてください。
Python 3がインストールされている場合は、最初のパスが表示されます。 空の場合(「which python42」の出力のように表示される場合)、ターミナルに以下を貼り付けてください。
sudo apt-get update
sudo apt-get -y upgrade
sudo apt install python3
sudo apt-get install -y python3-pip
次に、pysparkをインストールします。
pip3 install pyspark
Spark インタープリターの設定で、zeppelin.pyspark.python を「which python3」で出力されたパスに変更してください。
最後にSparkインタープリターで新しいメモを作成し、以下を新しい段落に貼り付けて実行してください。
%pyspark
import sys
print(sys.version)
何も問題なければ、Pythonのバージョンが表示されます。
クラスタリング
InterSystems IRISをセットアップし、ZeppelinおよびSparkと連携できるようにします。 例えば、 以前のInterSystems IRIS、Apache Zeppelin、Apache Spark接続に関する記事を参照してください。
まず、次のようにアイリスデータセットをロードします。
Speciesの内容を確認するには、以下を新しい段落に貼り付けて実行してください。
%pyspark
dataFrame.select("Species").show(150)
先に進む前に、データの内容を検討することをお勧めします。 新しい段落を追加し、以下を貼り付けて実行してください。
%pyspark
z.show(dataFrame)
以下のように、テーブルには5つの特徴であるPetalLength(花びらの長さ)、PetalWidth(花びらの幅)、SepalLength(がく片の長さ)、SepalWidth(がく片の幅)、Species(種)があります。
Scatter Chart(散布図)を選択してください。 ここでは、以下の画像でクラスターを確認できます(4次元ベクトルのため、完全な画像は確認できません)。 別の視点からクラスターを確認する場合は、xAxisおよびyAxisパラメータを変更してください。
そして、私たちの目的は特徴を使用して花の種類を予測することです。 新しい段落を追加し、そこに以下を貼り付けて実行してください。
%pyspark
from pyspark.ml.linalg import Vectors
from pyspark.ml.feature import VectorAssembler
assembler = VectorAssembler(inputCols = ["PetalLength", "PetalWidth", "SepalLength", "SepalWidth"], outputCol="features") // inputColsで指定された4つのパラメータをでベクトルを作成し、outputColで名前を指定しています。
irisFeatures = assembler.transform(dataFrame) // これはベクトルを含む outputCol 列をテーブルに追加します。
irisFeatures.show(5)
次に、以下を新しい段落に貼り付けて実行します。
%pyspark
from pyspark.ml.clustering import KMeans
(trainingData, testData) = irisFeatures.randomSplit([0.7, 0.3]) // データをランダムに2つの部分に分割します
]kmeans = KMeans().setK(3).setSeed(101010) // 3つのクラスターを持つK平均モデルです。setSeedは再現可能な結果を作成します。
model = kmeans.fit(trainingData) // KMeansモデルをトレーニングします。
transformed = model.transform(trainingData) // 予測結果を含む新しい列をテーブルに追加します。
transformed.show(150)
次のように、testDataでモデルを使用します。
%pyspark
predictions = model.transform(testData)
predictions.show(151)
そして、モデルの精度を計算します。
%pyspark
SpeciesAndPreds = predictions.select("Species", "prediction").collect()
def getCluster(specie):
if specie == "Iris-setosa":
return 0
elif specie == "Iris-versicolor":
return 1
else:
return 2
def getAccuracy(flowers):
counter = 0;
for flower in flowers:
if getCluster(flower[0]) == flower[1]:
counter += 1
return counter / len(flowers)
accuracy = getAccuracy(SpeciesAndPreds)
print("accuracy is " + str(accuracy))
// 私の結果は0.9090909090909091です
各クラスターにある花の数を確認するには、「z.show(predictions)」を使用してBar Chart(棒グラフ)を選択します。
まとめ
ここでは、InterSystems IRISでアイリスの花の種をかなり正確に予測するモデルを作成しました(0.9超の精度)。 また、「Iris-setosa」は分離可能であり、「Iris-virginica」と「Iris-versicolor」はK平均アルゴリズムでは分離できないことが分かりました。 そのため、精度を高めるためには別の方法を使用することをお勧めします。
リンク
Apache Spark + Apache Zeppelin + InterSystems IRISを起動する方法
Spark SQL、データフレームおよびデータセットガイド
機械学習ライブラリガイド
K平均法
クラスタリング(ただし、このAPIはRDD用であるため、アルゴリズムに関する関連情報を参照するだけにしてください)
アイリス花データセット