株式会社クイックのWebサービス開発blog

HAPPYなエンジニア&デザイナーのブログです

リスティング広告の分析基盤をKibana + Python3 + Pandas で構築する

こんにちは。データサイエンティストを目指している五所です。

今回は、マーケター向けの情報発信をします。

やりたいこと

弊社では、デジタル広告を自社で運用しています。

効果測定のツールとしてエクセルを利用しているのですが、重すぎて処理に時間がかかるという問題が発生しています。

また、エクセルでは自動化に限界があります。 サーバー・クライアントの概念が無いので、DBみたいに外部から接続してデータを追加する使い方ができません。

そこで、先行研究としてElasticsearchに広告レポートのデータを突っ込み、Kibanaで可視化するというのをやってみました。

使ったのはPython3で、CSVファイルを扱うためPandasを使っています。

今回作ったソースコード一式はこちらに置いておきました。

github.com

動作環境

  • Ubuntu 14.04
  • Python 3.4.3
  • Elasticsearch 2.3.1
  • Kibana 4.5.0
  • Asus Chromebook C300MA
    • Cerelon 2840N Dual core
    • RAM 4GB
    • Crouton in USB3

環境構築

下記の要領でさくっとインストールしておきます。

# For python3
sudo apt-get install python3 python3-pip python3-dev
pip3 install pandas elasticsearch

# For Elasticsearch
sudo apt-get install openjdk-7-jdk
wget https://download.elastic.co/elasticsearch/release/org/elasticsearch/distribution/deb/elasticsearch/2.3.1/elasticsearch-2.3.1.deb
sudo dpkg -i elasticsearch-2.3.1.deb
sudo /etc/init.d/elasticsearch start

# For Kibana
wget https://download.elastic.co/kibana/kibana/kibana_4.5.0_amd64.deb
sudo dpkg -i kibana_4.5.0_amd64.deb
sudo /etc/init.d/kibana start

レポートを取得する

Google Adwords APIなどを使い、レポートを取得しておきます。

取得方法は下記の記事が参考になるかと思います。我田引水ですいません。

Google Adwords APIで広告レポートの取得を自動化する - Hello World! /* Geekへの道 */

Elasticsearchにデータを突っ込む

pandas.read_csv('FILEPATH')が便利すぎて震えます。

CSVファイルについて

  • ヘッダーがあることを前提としています。
  • ここではデータの全てを突っ込んでいますが、データの一部だけテストで突っ込みたい時は下記のように変更すると先頭100行のみ読み込むことができます。

df = pd.read_csv('FILEPATH')[:100]

"""
Import csv data and create index to elasticsearch.
*This code is prototype*
"""

import pandas as pd
from elasticsearch import Elasticsearch

# Initialize Elasticsearch
es = Elasticsearch('localhost:9200')
try:
    es.indices.delete('ad_reports')
except:
    pass

# Open csv file
df = pd.read_csv('sample_data.csv')
fields = df.columns

# Import data
for _, row in df.iterrows():
    data_dict = {}
    for f in fields:
        data_dict[f] = row[f]
    es.index(index='ad_reports', doc_type='test', body=data_dict) 

試しに50000行のデータを突っ込んでみたところ、約9分でインデックス登録できました。

データを可視化する

これでElasticsearchのad_reportsインデックスにKibanaにデータが突っ込まれているはずなので、Kibanaで可視化します。

localhost:5601にアクセスすると、Kibanaの初期設定画面に行くと思いますので、下記のように設定します。

  • Index contains time-based events にチェックが入っていることを確認
  • Index name or patternad_reportsを設定
  • Time-field nameが自動で設定されるので、Createボタンを押す

ここから先はKibana自体の説明になるので省略しますが、VisualizeDashboardをごにょごにょ設定して、下記のような管理画面を作りました。

f:id:aimstogeek:20160423012906p:plain

私はWEBマーケティングの知識が無いので、何が必要な指標なのか分かっていないのですが、とりあえず可視化自体はできそうな雰囲気を感じました。

またデータをCSVでダウンロードできるので、より細かく分析したい時はCSVからエクセルに落としてもらうこともできますね。

今後やってみたいこと

今回は何もしていませんが、Pandasならカラムを指定した列演算も超簡単にできるので、何か別の指標を出したい時もさくっとできそうです。例えば、コストとコンバージョンからCPCを出すとか。

機械学習を絡め、予めデータに標準化・正規化・白色化等の前処理をしておいて、より分析しやすい形にするとか。これもPythonならscikit-learn等のライブラリでさくっとできますね。

いやそもそも機械学習を絡めるなら、最初から分析された状態で出力させることもできそう。決定木とか、キーワードのクラスタリングとか。

夢ばかりが広がりますね。

参考

初心者のためのKibanaの詳しい使い方(ダッシュボード・パネル・クエリ・フィルタの作成方法) - Qiita

elasticsearch-py

最後に

弊社では、Elasticsearchをもっと活用していこうと思っております。ご興味のある方は、ぜひご覧ください。

https://www.green-japan.com/job/27758