Google Analytics > Pandas dataframe > sqlite と
Googel Analytics から、
[TOC]
前提
以下の
OS
ProductName: Mac OS X ProductVersion: 10.13.4 BuildVersion: 17E199
Python の
version Python 3.6.5
Djangoの
version Django 1.11.11
Superset の
version superset 0.25.2
作業の 流れ
以下の
- Google Analytics の
データを、 pandas を 使って、 RDB に 登録する。 - Apache の
アクセスログを、 RDB に 登録する。 - Superset で、
1.
、2.
のデータを 使い、 グラフを 描画する。
1. Google Analytics の データを、 pandas を 使って、 RDB に 登録する。
取得する データセットに ついて
以下の、
GoogleアナリティクスAPIリファレンス 日本語対応表 スプレッドシートの
データセットには、
これは、
地域名称データセット
- ディメンション
日本語名称 英語名称 GAディメンション名 クライアントID clientID ga:dimension8 タイムスタンプ timestamp ga:dimension10 大陸 Continent ga:continent 亜大陸 Sub Continent ga:subContinent 国/地域 Country ga:country 地域 Region ga:region 大都市圏 Metro ga:metro 市区町村 City ga:city - メトリクス
日本語名称 英語名称 GA メトリクス名 ユーザー数 Users ga:users 直帰率 Bounce Rate ga:bounceRate 緯度、
経度データセット - ディメンション
日本語名称 英語名称 GAディメンション名 クライアントID clientID ga:dimension8 タイムスタンプ timestamp ga:dimension10 緯度 Latitude ga:latitude 経度 Longitude ga:longitude - メトリクス
日本語名称 英語名称 GA メトリクス名 ユーザー数 Users ga:users 直帰率 Bounce Rate ga:bounceRate ネットワーク関連データセット
- ディメンション
日本語名称 英語名称 GAディメンション名 クライアントID clientID ga:dimension8 タイムスタンプ timestamp ga:dimension10 ネットワーク ドメイン Network Domain ga:networkDomain サービス プロバイダ Service Provider ga:networkLocation - メトリクス
日本語名称 英語名称 GA メトリクス名 ユーザー数 Users ga:users 直帰率 Bounce Rate ga:bounceRate 地域コードデータセット
- ディメンション
日本語名称 英語名称 GA ディメンション名 クライアントID clientID ga:dimension8 タイムスタンプ timestamp ga:dimension10 市区町村 ID City ID ga:cityId 大陸 ID Continent ID ga:continentId ISO 国コード Country ISO Code ga:countryIsoCode 大都市圏 ID Metro Id ga:metroId 地域 ID Region ID ga:regionId 地域 ISO コード Region ISO Code ga:regionIsoCode 亜大陸コード Sub Continent Code ga:subContinentCode - メトリクス
日本語名称 英語名称 GA メトリクス名 ユーザー数 Users ga:users 直帰率 Bounce Rate ga:bounceRate
作成した スクリプト
Django コマンド を
Google Analytics の
2. Apache の アクセスログを、 RDB に 登録する。
- に続いて、
Apache の アクセスログを、 RDB に 登録します。
取得する データセットに ついて
取得する
アクセスログの
フォーマット
以下フォーマットで定義しています。 "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" \"%{track}C\" \"%{_ga}C\""
取得項目
取得カラムindex | 日本語名称 | カラム名 |
---|---|---|
0 | IPアドレス | ip |
3 | タイムスタンプ | timestamp |
4 | タイムゾーン | timezone |
5 | リクエスト情報 | request |
6 | ステータス | status |
7 | 送信バイト数 | size |
8 | リファラー | referer |
9 | ユーザーエージェント | user_agent |
10 | usertrack の tracking id | user_id |
11 | Google Analytics の clientid | clientid |
作成した スクリプト
Django コマンド を
Apache アクセスログを、
3. Superset で、1.
、2.
の データを 使い、 グラフを 描画する。
1
、2
で
前提で、
Superset に データベース、 テーブルの 作成を 作成する
データベースの
作成 SQLAlchemy URI
にローカルの sqlite の パスを 設定します。
Cache Timeout はなんとなく 30 に 設定しました。 テーブルの
作成
データベースの作成に 続き、 テーブル作成を 実施します。
データベース名を選択、 テーブル名を 入力し、 保存します。
この設定せずに、 Chart を 編集し 始めたせいで、 Group By 項目が 選択できず 悩んでしまいました。
Group BY に使用する 項目は、 グルプ分け 可能に、 チェックを 入れる 必要が あります。
Google Analytics のディメンションに 該当する 項目には、 基本的に チェックが 必要かと 思います。
List Columns の編集は、 一度 テーブルを 保存してから、 編集しないと 設定が できませんでした。
Charts の 作成
テーブルの
各 Charts の
Apache の
アクセスログ / Calender Heatmap
Apache のアクセスログ を 元に、 時系列の アクセス数を Calender Heatmap で 描画しました。
スクリーンショットはなんだかよくわからない 感じになっていますが、 Calender Heatmap の 設定 Style から、 Color や、 Heatmap の 大きさ、 値の 表示、 非表示等の コントロールが 可能です。 緯度、
経度データセット / Deck.gl Screen grid
経度、緯度データセット を 元に、 Deck.gl Screen grid を 使って、 時系列での アクセスユーザの 地域の 移り変わりを 描画できます。
再生のループ設定や、 描画する 期間等も コントロールが 可能です。
Superset は、Mapbox を 使った 地図が 多く 描画できますが、 経度、 緯度データセットを 用いる 地図が 一番多いので、 経度、 緯度情報に なんらかの 指標を 組み合わせて 描画する ことが 多くなるかと 思いました。 地域名称データセット / TreeMap
地域名称データセットを元に、 TreeMap を 描画しました。
Group BY 項目を3項目設定できるのですが、 この ブログは、 日本からの アクセスが ほとんどで、 3項目設定しても、 TreeMap の 項目を 選択した 際に、 詳細が 表示されませんでした。
大分類、中分類、 小分類 的に、 分かれる データセットだと、 いい 感じに 可視化されそうに 思いました。 ネットワーク関連データセット/ Directed Force Layout
ネットワーク関連データセットを元に、 力指向アルゴリズムに よる グラフを 描画しました。
描画結果が、どういう 意味なのかわからず、 Table View で、 件数カウントを 取って やっと グラフの 意味が 理解できました。
これは個人的に 良い 感じで 可視化できたのかと 思います。
設定可能な、Group By 項目は 2つです。
参考
以下、
* EU司法裁判所が
panalysis/Google2Pandas: Query Google Analytics and get the results as a pandas.DataFrame
[力学モデル (グラフ描画アルゴリズム) - Wikipedia](https://ja.wikipedia.org/wiki/%E5%8A%9B%E5%AD%A6%E3%83%A2%E3%83%87%E3%83%AB_(%E3%82%B0%E3%83%A9%E3%83%95%E6%8F%8F%E7%94%BB%E3%82%A2%E3%83%AB%E3%82%B4%E3%83%AA%E3%82%BA%E3%83%A0)
まとめ
以下、
SUM を
すると エラーに なる グラフが ある。
COUNT(*)
の結果ではなく、 ユーザー数の 合計を 指標と したい 場合が あったのですが、 unhashable type: 'dict'
という エラーが 発生し、 グラフが 描画できませんでした。 覚える
ための 学習コストは それなりにかかる。
Charts ごとに、設定できる 項目が 異なり、 それぞれ 制約が あります。
テーブル側の設定含めて、 それなりに 学習コストは かかるかと 思いました。 データ変換用ツールと
して、 pandasは 便利
使い方として、邪道なのかもしれませんが、 テキストファイルや、 WebAPI から、 RDB への データ変換ツールと して、 pandas が 非常に 便利に 使えます。
ただ、Upsert が できないため、 基本的に Replace となり、 データ量が 膨大に なると 登録が できない 等の 問題が 起こりそうに 思いました。
以下、ライブラリが あったのですが、 試しに 使ってみては いません。
ryanbaumann/Pandas-to_sql-upsert: Extend pandas to_sql function to perform multi-threaded, concurrent “insert or update” command in memory
pandas でTable 作成後に、 django の inspectdb コマンド で Model を 生成して、 upsert 処理を 自前実装とかするかもしれません。 グラフリテラシーは
どうやって 身に つける ?
個人的に、手段と 目的が 逆に なってしまっている 感が あるのですが、 Chartsごとの 制約、 可視化する データの 向き不向き 等を 理解して おくと、 グラフ描画ツールは 学習が 早くなるのかと 思うのですが、 近道となる 学習方法や、 書籍が 思い浮かばず、 どなたか 教えてくださいと いう 思いが あります。
統計関連の書籍とかに それっぽい ことは 記載が あったりするので、 そういった 書籍を 読んでいこうかなと 思います。
以上です。
コメント