3
0

素数を判定する(SPSS Modeler データ加工逆引き3-25)

Last updated at Posted at 2023-11-01

素数を判定する

スクリーンショット 2023-10-27 14.03.29.png

この記事は2023年秋のSPSSユーザーイベントで扱われたModeler詰将棋①を題材にしています

1.想定される利用目的

・上方レコードを参照して該当するものが存在するのか、存在すると何レコード上にあるかを求める
・マーケティング領域では解約・休眠予測の特徴量作成
・製造業の領域では故障予測・異常検知の特徴量作成

2.サンプルストリームのダウンロード

3.サンプルストリームの説明

スクリーンショット 2023-10-27 14.09.18.png

a.入力するデータは以下の通りです。1から1万までのレコードです。
スクリーンショット 2023-10-27 14.12.57.png

上方レコードを参照する関数による求め方

b.[フィールド作成]ノードを編集します。@￰SCINCEを使って該当レコード@￰THISから順番に上のレコードを参照して余りが0になる(約数)を探し、IDとの差が1だと素数と判定します。
スクリーンショット 2023-10-27 14.16.21.png

サンプルストリームには存在しませんが、以下の設定で説明します。
スクリーンショット 2023-10-27 14.18.09.png

上記のフィールド作成の結果得られるテーブルは以下の通りです。THIS=5の場合、5割る4、5割る3、5割る2、5割る1、まで連続して実行して余りが0になるレコードが何行上にあるかを表示します。5や7は最初のレコードまでそれを見つけることができない=自分と1でしか割り切れない数になるため素数だと判定されます。6は3行上に約数を見つけるため素数ではないと判定されます。

スクリーンショット 2023-10-27 14.18.34.png

あらためてbを[プレビュー]します。
スクリーンショット 2023-10-27 14.19.12.png

c.[レコード集計]ノードを[プレビュー]します。1万までの間に素数が1229レコード含まれることがわかります。
スクリーンショット 2023-10-27 14.19.28.png

SQLプッシュバックが有効になる求め方

d.[条件抽出]ノードを編集します。後続で1万から順番に割り算をするのですが全てを分母にする必要がなく、計算分子の平方根以下までで判定できます。そこで今回は1万の平方根である100を上限にしています。
スクリーンショット 2023-10-27 14.19.41.png

e.[フィルター]ノードを編集します。フィールド名を変更します。
スクリーンショット 2023-10-27 14.19.54.png

f.[レコード結合]ノードを編集します。[キー]によるレコード結合ですが[キー]をブランクにして総当たりで結合します。

スクリーンショット 2023-10-27 16.19.49.png

[プレビュー]します。1から1万を分子に2から100までを分母にした総当たり計算の準備ができました。
スクリーンショット 2023-10-27 14.21.23.png

g.[フィールド作成]ノードを編集します。分子と分母が不一致で割り切れない場合にフラグを立てます。

スクリーンショット 2023-10-27 14.21.45.png

h.[レコード集計]ノードを編集します。1万までの全てに2から100までを割り算し一度も割り切れなかったら素数になる勘定です。
スクリーンショット 2023-10-27 14.22.01.png

[プレビュー]します。
スクリーンショット 2023-10-27 14.19.12.png

注意点

素数を効率よく判定する方法は以下の記事で紹介されています。

4. 参考情報

@￰SCINCEを使ったTips

SPSS Modeler ノードリファレンス目次

SPSS Modeler 逆引きストリーム集(データ加工)

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0