その他
    ホーム 技術発信 DoRuby Googleデータポータルの計算フィールドが役立つ!REGEXP_MATCH関数編
    Googleデータポータルの計算フィールドが役立つ!REGEXP_MATCH関数編
     

    Googleデータポータルの計算フィールドが役立つ!REGEXP_MATCH関数編

    この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

    Googleデータポータルの計算フィールドでは正規表現を使った記述が可能です。一致条件の正規表現に使えるのがREGEXP_MATCH関数。特定のルールに一致するデータをフィルタリングすることができ、CASE関数などと組み合わせると実用の幅が広がります。REGEXP_MATCH関数の使い方について、実例を踏まえてご紹介いたします。

    この記事でまとめられていること

    こんにちは。株式会社アピリッツでアナリストをしているssekiです。
    以前、Googleデータポータルの計算フィールドでCASE関数の使い方について記事を書きました。
    CASE関数は置換・統合を行う際にとても役立つということで実例を踏まえてご紹介しました。
    CASE関数があるからマイレポートの代わりにデータポータルを使ってみよう、という方も多いのではないでしょうか。
    ただし、アナリティクスとデータポータルでは仕様や記述方法が違う部分も多々あり、難しく感じることもあるでしょう。

    今回紹介するREGEXP_MATCH関数はCASE関数と一緒に使って、データの抽出条件を正規表現で記述することができる関数です。
    REGEXP_MATCH関数が使えるようになると、Googleアナリティクスの「計算指標」の代わりに計算フィールド上で正規表現が使えるようになります。

    ※計算指標は1ビューあたり5個までしか作成できませんが、計算フィールドは無制限に作れます。そのため、多数の計算指標を作成したいとの悩みを抱えているならば、Googleデータポータルの計算フィールドがおすすめです。

    今回は、Googleデータポータルの計算フィールドで正規表現を使う方法、第一弾として一致条件ができる「REGEXP_MATCH関数」についてご紹介します。

    正規表現とは

    まず簡単に正規表現についておさらいしておきましょう。
    正規表現とは、「いろんな文字列を一つの文字列で表現するための記述方法」です。
    例えば、こんな例を考えてみましょう。
    以下のようなページURLがあるとします。

    20170701.php
    20170702.php
    20170703.php
    ...
    20170731.php
    

    ブログなどでは、このように投稿日をページURLにしている例がよく見られますね。
    このうち、2017年7月1日~2017年7月7日までの1週間に書いたブログ記事のPV数を計測したいとします。
    まず、Googleアナリティクスの正規表現にしたがって対象のブログ記事を抽出するよう記述してみます。

    (20170701|20170702|20170703|20170704|20170705|20170706|20170707)\.php
    

    ここでは、3つの正規表現記号が使われています。
    ()と|と\ですね。それぞれ丸カッコとパイプとバックスラッシュと呼びます。
    まず、丸カッコは「他の正規表現をグループ化」する記号です。丸カッコで囲われている正規表現はカッコ内でしか効果を発揮しません。
    次に、パイプは「OR条件」を意味します。
    最後に、バックスラッシュは「次の正規表現記号を打ち消し」、普通の文字として解釈します。
    実は、「.」(ドット)も正規表現記号として使うことができるため、その効果を打ち消すために使っています。
    つまり、先ほどの正規表現を日本語に直すと、

    「20170701か20170702か20170703か20170704か20170705か20170706か20170707」と「.php」がついている文字列
    

    となります。
    でも、この書き方だと選択する数が増えたとき大変です。今回1週間分を例にしましたが、1か月分だと最大31個も入れなきゃいけないですよね。
    この他にもいろいろな正規表現記号があり、今回の例をもっと楽に書くこともできます。
    例えば、こんな感じに。

    2017070[1-7]\.php
    

    新たな正規表現記号として[]と-を使いました。読み方は角カッコとハイフンです。
    まず、角カッコは「囲まれた文字が任意の順序で文字列に含まれる場合」を表す記号です。
    そして、ハイフンは「角カッコ内の文字範囲」を表します。
    この二つは合わせて使うことが多く、先の[1-7]は「1から7までの範囲の数字を含む」を表すようになります。
    先ほどの正規表現を日本語に直すと、

    「2017070」の次に「1から7までの範囲の数字を含み」、その後「.php」がついている文字列
    

    となるので、今回の条件では最初の例と同じ文字列と一致することがわかりますね。

    説明が長くなりましたが、Googleアナリティクスではこのような正規表現記号を使うことができ、データから必要な分だけを抽出することを助けています。
    その他の正規表現を知りたい人は公式のヘルプページを見てみてください。

    計算フィールドでの正規表現の使い方

    さて、ここまでGoogleアナリティクス上での正規表現記法についてご紹介いたしました。
    実はGoogleデータポータルの表やグラフで用いるフィルタ機能では、アナリティクスと同じ正規表現をそのまま使います。
    ただし、計算フィールドだけは特殊で、アナリティクスの正規表現をさらに高機能にしたもの(使える正規表現記号が多くなったもの)を用いることができます。
    その方法の一つが今回紹介するREGEXP_MATCH関数です。
    REGEXP_MATCH関数は「Google RE2」という正規表現を使ってフィールドの式と一致するものを抽出する関数です。
    先ほどと同じ例を考えてみましょう。

    20170701.php
    20170702.php
    20170703.php
    ...
    20170731.php
    

    このうち、2017年7月1日~2017年7月7日までの1週間に書いたブログ記事を抽出するには次のように記述します。

    CASE WHEN REGEXP_MATCH(ページ,"2017070[1-7]\.php") THEN "2017年7月1日~2017年7月7日" END
    

    REGEXP_MATCH関数ですが、CASE関数との相性がとてもよい関数です。
    ちなみに、CASE関数は置換するのに使った関数でしたね。詳しくは「Googleデータポータルの計算フィールドが役立つ!CASE関数編」の記事を参照していただければと思います。

    REGEXP_MATCHはカッコ内に2つの変数をとります。
    REGEXP_MATCH(X,Y)と置くと、Xに当たるのが「抽出元となるディメンションあるいは指標」です。
    そして、Yが「一致条件の条件式」に相当します。
    この例ではXに「ページ」、Yに「先ほどの正規表現」を設定することで、THENの後に記述された「2017年7月1日~2017年7月7日」という文字列に条件に一致したページ群がまとめられます。

    あとは、お好きな表やスコアカードでページビュー数を指標にセットしていただければ、2017年7月1日~2017年7月7日までの1週間に書いたブログ記事のPV数を計測することができますね。