こんにちは。データサイエンティストを目指している五所です。
今回は、マーケター向けの情報発信をします。
やりたいこと
弊社では、デジタル広告を自社で運用しています。
効果測定のツールとしてエクセルを利用しているのですが、重すぎて処理に時間がかかるという問題が発生しています。
また、エクセルでは自動化に限界があります。 サーバー・クライアントの概念が無いので、DBみたいに外部から接続してデータを追加する使い方ができません。
そこで、先行研究としてElasticsearchに広告レポートのデータを突っ込み、Kibanaで可視化するというのをやってみました。
使ったのはPython3で、CSVファイルを扱うためPandasを使っています。
今回作ったソースコード一式はこちらに置いておきました。
動作環境
- 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 pattern
にad_reports
を設定Time-field name
が自動で設定されるので、Createボタンを押す
ここから先はKibana自体の説明になるので省略しますが、Visualize
とDashboard
をごにょごにょ設定して、下記のような管理画面を作りました。
私はWEBマーケティングの知識が無いので、何が必要な指標なのか分かっていないのですが、とりあえず可視化自体はできそうな雰囲気を感じました。
またデータをCSVでダウンロードできるので、より細かく分析したい時はCSVからエクセルに落としてもらうこともできますね。
今後やってみたいこと
今回は何もしていませんが、Pandasならカラムを指定した列演算も超簡単にできるので、何か別の指標を出したい時もさくっとできそうです。例えば、コストとコンバージョンからCPCを出すとか。
機械学習を絡め、予めデータに標準化・正規化・白色化等の前処理をしておいて、より分析しやすい形にするとか。これもPythonならscikit-learn等のライブラリでさくっとできますね。
いやそもそも機械学習を絡めるなら、最初から分析された状態で出力させることもできそう。決定木とか、キーワードのクラスタリングとか。
夢ばかりが広がりますね。
参考
初心者のためのKibanaの詳しい使い方(ダッシュボード・パネル・クエリ・フィルタの作成方法) - Qiita
最後に
弊社では、Elasticsearchをもっと活用していこうと思っております。ご興味のある方は、ぜひご覧ください。