SPSS Clementine の issubstring 活用法 [データサイエンス、統計モデル]
あるURLなどの文字列があった時、その文字列を含むかどうかは、issubstring 関数を使えば簡単に集計できる。
しかし、ワイルドカードを含む文字列を含むかどうかの判定ってどうすれば良いのだろうか?
例
abcdefghijklmn という文字列の中に『bcd*lmn』という文字列を含むかどうか?
* はワイルドカードで bcd と lmn の間に適当に文字が入っていても良い。
答えは、『含む』である。
確かに、abcdefghijklmn は『bcd*lmn』という文字列が含まれている。
これをクレメンタインのCLEM式(issubstring 関数)を使って書けば、
issubstring("hij", issubstring("bcd", URL) + 1, URL)
となる。
これは、2種類の issubstring 関数
・ issubstring("bcd", URL)
・ issubstring("hij", N, URL)
を組み合わせて使っている。
ストリームで書くとこうなる。
しかし、いちいちCLEM式の中に埋め込むのは面倒だし、複数の文字列をバッチで判定させたい場合も対応できない。
そこで、文字列(URL)と判定させる文字列を入力ファイルで与え、判定させるにはどうすれば良いのか?
ストリームで書くとこうなる。
今、
URLを
で与え、
判定文字列を
で与える。
結果を先に書くと、『bcd*lmn』 という文字列は、3レコード存在し、『abc*lmn3』という文字列は、1レコードだけ存在する。
次にノードの中身を見ていくと、
Step1: レコード結合
完全外部結合で結合する。
Step2: 判定
issubstring(tmp2, issubstring(tmp1, URL), URL)
Step3: 判定 > 0
Step4: レコード集計
最終結果
ポイントは、判定する文字列を tmp1 と tmp2 で与えているので、外部の入力ファイルから与えることができるのが大きい。
日時で変わる場合や、判定レコード数が多い場合は、今回の方法も有益だろう。
しかし、ワイルドカードを含む文字列を含むかどうかの判定ってどうすれば良いのだろうか?
例
abcdefghijklmn という文字列の中に『bcd*lmn』という文字列を含むかどうか?
* はワイルドカードで bcd と lmn の間に適当に文字が入っていても良い。
答えは、『含む』である。
確かに、abcdefghijklmn は『bcd*lmn』という文字列が含まれている。
これをクレメンタインのCLEM式(issubstring 関数)を使って書けば、
issubstring("hij", issubstring("bcd", URL) + 1, URL)
となる。
これは、2種類の issubstring 関数
・ issubstring("bcd", URL)
・ issubstring("hij", N, URL)
を組み合わせて使っている。
ストリームで書くとこうなる。
しかし、いちいちCLEM式の中に埋め込むのは面倒だし、複数の文字列をバッチで判定させたい場合も対応できない。
そこで、文字列(URL)と判定させる文字列を入力ファイルで与え、判定させるにはどうすれば良いのか?
ストリームで書くとこうなる。
今、
URLを
で与え、
判定文字列を
で与える。
結果を先に書くと、『bcd*lmn』 という文字列は、3レコード存在し、『abc*lmn3』という文字列は、1レコードだけ存在する。
次にノードの中身を見ていくと、
Step1: レコード結合
完全外部結合で結合する。
Step2: 判定
issubstring(tmp2, issubstring(tmp1, URL), URL)
Step3: 判定 > 0
Step4: レコード集計
最終結果
ポイントは、判定する文字列を tmp1 と tmp2 で与えているので、外部の入力ファイルから与えることができるのが大きい。
日時で変わる場合や、判定レコード数が多い場合は、今回の方法も有益だろう。