Googleのアナリティクスで検索エンジン等からのサイト流入キーワードが見れるけど
キーワードが一塊になっているので例えば

キーワード 訪問数
macbook 10
macbook air 5
macbook air ノートパソコン 3
mac ノート 5
mac pro 1
windows8 pc 5
windows8 ノートpc 10
windows ノートパソコン 5

みたいな感じになってたとして「mac」とか「ノート」みたいな単語の出現数も
取りたいと思ってmecabとgoogle analytics apiを使って試してみました。
処理はrubyで書いてます。
もしかしたらGAで普通に出来るのかもしれない、
けどmecab使ってなんかやりたかったのでよしとします。

手順

  • MacにMecabをインストールする

    ここから以下のファイルをダウンロードする

    • mecab-0.996.tar.gz (mecab本体)
    • mecab-ipadic-2.7.0-20070801.tar.gz(IPA辞書:200Mぐらいある)
    • mecab-ruby-0.996.tar.gz

    DLしたファイルを任意のディレクトリに移動して以下のようにしてインストール

    # mecab本体のインストール
    tar xvzf mecab-0.996.tar.gz
    cd mecab-0.996
    ./configure
    make
    make install
    
    # 辞書のインストール
    tar xvzf mecab-ipadic-2.7.0-20070801.tar
    cd mecab-ipadic-2.7.0-20070801
    ./configure --with-charset=utf8
    make
    make install
    
  • mecabの実行

    mecab <textfile>
    

    もしくは以下のようにコマンドのみ入力し、その後にテキストを入力してもOK

    mecab
    

    分かち書きで出力(品詞の情報とか出さないで形態素で分割した結果のみ出力)

    mecab -O wakati <textfile>
    

    とりあえず動作確認できたので先ほどのキーワードリストをテキストファイルにして
    mecabに読み込ませてみました。

    $ mecab -O wakati sample.txt 
    macbook 
    macbook air 
    macbook air ノート パソコン 
    mac ノート 
    mac pro 
    windows 8 pc 
    windows 8 ノート pc 
    windows ノート パソコン 
    morikubonaoki-no-MacBook-Air:mecab_work morikubonaoki$ mecab sample.txt 
    macbook 名詞,固有名詞,組織,*,*,*,*
    EOS
    macbook 名詞,固有名詞,組織,*,*,*,*
    air 名詞,一般,*,*,*,*,*
    EOS
    macbook 名詞,固有名詞,組織,*,*,*,*
    air 名詞,一般,*,*,*,*,*
    ノート 名詞,一般,*,*,*,*,ノート,ノート,ノート
    パソコン  名詞,一般,*,*,*,*,パソコン,パソコン,パソコン
    EOS
    mac 名詞,固有名詞,組織,*,*,*,*
    ノート 名詞,一般,*,*,*,*,ノート,ノート,ノート
    EOS
    mac 名詞,固有名詞,組織,*,*,*,*
    pro 名詞,一般,*,*,*,*,*
    EOS
    windows 名詞,一般,*,*,*,*,*
    8 名詞,数,*,*,*,*,*
    pc  名詞,固有名詞,組織,*,*,*,*
    EOS
    windows 名詞,一般,*,*,*,*,*
    8 名詞,数,*,*,*,*,*
    ノート 名詞,一般,*,*,*,*,ノート,ノート,ノート
    pc  名詞,固有名詞,組織,*,*,*,*
    EOS
    windows 名詞,固有名詞,組織,*,*,*,*
    ノート 名詞,一般,*,*,*,*,ノート,ノート,ノート
    パソコン  名詞,一般,*,*,*,*,パソコン,パソコン,パソコン
    EOS
    

    分かち書きで出力するとこうなる

    $ mecab -O wakati sample.txt 
    macbook 
    macbook air 
    macbook air ノート パソコン 
    mac ノート 
    mac pro 
    windows 8 pc 
    windows 8 ノート pc 
    windows ノート パソコン 
    

    それぞれの出現数をソートして出力してみる

    mecab sample.txt  | cut -f 1 | sort | uniq -c | sort -r -n
    
    8 EOS
    4 ノート
    3 windows
    3 macbook
    2 パソコン
    2 pc
    2 mac
    2 air
    2 8
    1 pro
    

    とりあえず、ソレらしい感じで結果が取れそう。

  • Google Analytics API使用準備

    OAuthの設定等必要なのでGoogle APIs Consoleで設定を行う

    • ログインして、プロジェクトが未作成の場合はプロジェクトを作成
    • APIs&authタブの中のAPIsを選択、analytics APIをONにする

    • APIsの下のCredentialsで[CREATE NEW CLIENT ID]を選択、必要な項目を入れていく

      • Application type : 今回はrubyから叩くだけなので[installed application]を選択
      • Installed application typeは[Other]のままでOK
      • [Download JSON]からIDとsecretのjsonをダウンロードしておく
  • Google Analytics APIをrubyから使う

    gemをインストールする

    gem install google-api-client
    
  • mecab-rubyを導入する

    上の方でDLした[mecab-ruby-0.996.tar.gz]を解凍してインストールする

    tar xvzf mecab-ruby-0.996.tar.gz
    cd mecab-ruby-0.996
    ruby extconf.rb
    make
    make install
    

    インストールが出来たので同じディレクトリ内にあるtest.rbを実行してみる

    ruby test.rb
    

    エラーが出た

    dyld: lazy symbol binding failed: Symbol ....
    xxxxx
    Expected in: flat namespace
    

    extconf.rbを以下のように修正

    $CFLAGS += ' ' + `#{mecab_config} --cflags`.chomp
    $LDFLAGS = '-L/usr/local/lib'                       # この行を追加
    

    再インストール

    make clean
    ruby extconf.rb
    make
    make install
    

    もう一度test.rbしたら成功した

    公式のサンプルを参考に、こんな感じで流入キーワードを取得、
    結果をmecabで形態素解析して出力

    # coding: utf-8
    
    require 'google/api_client'
    require 'google/api_client/client_secrets'
    require 'google/api_client/auth/installed_app'
    require 'json'
    require 'MeCab'
    
    # 適当に名前とバージョン入れる(未設定だとエラーになる)
    client = Google::APIClient.new(
      :application_name    => 'test',
      :application_version => '0.01'
    )
    
    # ダウンロードした認証jsonファイルを[client_secrets.json]にリネームしておく(この関数で読み込まれる)
    client_secrets = Google::APIClient::ClientSecrets.load
    
    # ref https://developers.google.com/analytics/devguides/config/mgmt/v3/mgmtAuthorization?hl=ja
    flow = Google::APIClient::InstalledAppFlow.new(
      :client_id     => client_secrets.client_id,
      :client_secret => client_secrets.client_secret,
      :scope         => 'https://www.googleapis.com/auth/analytics.readonly'
    )
    
    client.authorization = flow.authorize
    analytics = client.discovered_api('analytics', 'v3')
    
    # 流入キーワードと各キーワードの流入数を取得する
    # ref https://developers.google.com/apis-explorer/#s/analytics/v3/analytics.data.ga.get
    result = client.execute(
      :api_method => analytics.data.ga.get,
      :parameters => {
        'ids'        => 'ga:xxxx',    
        'start-date' => '2013-01-01',    # 分析したい開始年月日を指定
        'end-date'   => '2012-01-31',      # 分析したい開始年月日を指定
        'metrics'    => 'ga:visits',
        'dimensions' => 'ga:keyword',
        'sort'       => '-ga:visits'
      }
    )
    
    # analytics apiの結果をjsonパース
    body = JSON.parse(result.response.body)
    
    opt  = "-O wakati"
    data = body['rows'].map{ |r| r[0] }.join(" ")
    
    # mecabで形態素解析
    c = MeCab::Tagger.new(opt)
    keywords = c.parse(data).split(/\s/).group_by{ |e| e }
    
    # 形態素解析の結果を{文字列:カウント}のハッシュにしてソートして出力
    word_counts = keywords.inject({}){|a,(k, v)| a[k] = v.count; a}
    word_counts.sort{|(k1, v1), (k2, v2)| v2 <=> v1}.each do |r|
      p "#{r[0]} : #{r[1]}"
    end
    

    他の値を取りたい場合はディメンションとメトリクスを変える必要があるので
    その場合はこちらを参考に

まとめ

正直、今回の結果だけだとそんなに目新しい発見は無かったけど、
色々使いどころはありそうなのでもうちょっと別の素材でも試してみたい。