今日の学び@2020/2/27
SQL&BigQuery(BQ)
- ビッグデータ分析レシピ(参考元)
- 3章
- 3-2-5 日時データ
- 3-3 ウインドウ関数
- 3章
SELECT user_id, -- TIMESTAMP関数:型変換(string ⇒ timestamp) TIMESTAMP(regi_timestamp) AS regist_day, TIMESTAMP_ADD(TIMESTAMP(regi_timestamp),INTERVAL 1 HOUR) AS after_1_hour , TIMESTAMP_SUB(TIMESTAMP(regi_timestamp),INTERVAL 30 MIUTE) AS before_30_min, -- BQでは、TIMESTAMP ⇒ DATEの直接変換が不可 -- DATE(TIMESTAMP(timestamp))で二重変換 DATE(TIMESTAMP(timestamp)):型変換(string ⇒ timestamp) DATE(TIMESTAMP(regi_timestamp)) AS regster_date, DATE_ADD(DATE(TIMESTAMP(regi_timestamp)),INTERVAL 1 DAY) AS after_1day, DATE_SUB(DATE(TIMESTAMP(regi_timestamp)),INTERVAL 1 MONTH) AS before_1month DATE_DIFF(CURRENT_DATE,DATE(TIMESTAMP(register_stamp)),day) AS diff_days -- BQの年齢計算は、連番で数値変換後、差分計算して10000で割る -- かなり面倒なのでUDF作るw FLOOR( (CAST(REPLACE(SUBSTR(regi_stamp , 1,10), '-', '') as INT64) - CAST(REPLACE(birth_date , '-', '') as INT64) ) / 10000 ) as regi_age FROM `users_with_birthday`
SELECT user_id, product_id, scores, -- 全体の平均 AVG(scores) OVER() AS avg_scores, -- セグメント別平均 AVG(scores) OVER(PARTITION BY user_id) AS user_avg_scores, -- 全体平均とセグメント別平均の差 scores - AVG(scores) OVER(PARTITION BY user_id) AS diff_avg_scores FROM `review`
3-2-6 IPアドレスは、今の所、不要なのでパス
分析活用で、ウインドウ関数の便利さを感じてはいた
あれから知識と経験を得て、レシピのウインドウ関数
めちゃ便利やんこれw
使い倒そう
そして、面倒な基本と思っていた3章が、想像より重要と分かった
コアと言うか根本
4章以降の実践編でも、時折振り返る事になりそう
BigQueryに転送されたGoogle Analyticsログデータの確認
1つ1つクエリをかけ、GAの解説を確認
結果、大体は頭の中にマッピング出来た
GAデータがとっつきにくい原因は、特殊なSTRUCT型が原因
特に、hitsはSTRUCT型のネストが深く、検証して用途を把握した
JSONと同じですねw
と言うか、内部でJSONで送られてきてるのかもここら辺は、近々、GA側のデベロッパーヘルプを確認する
Python
残念ながらタイムアウトでやれず(2日目)
早くPandasをやりたいので、改善していこう
数学
- ふたたびの高校(参照元)
改善点
少しずつ、早寝早起きにしているものの、朝のペースに改善余地あり
数学から始めるのは、鉄板になってきた
頭のエンジンを温めるのに、本当にいい
PythonやJsにもっと時間を使いたいが、業務上、SQLが最優先
Pythonだけでも確保出来る様、工夫したい
さぁ、明日の朝も楽しもう