今日の学び@2020/2/27

SQL&BigQuery(BQ)


  • ビッグデータ分析レシピ(参考元)
    • 3章
      • 3-2-5 日時データ
      • 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をやりたいので、改善していこう

数学

  • ふたたびの高校(参照元)
    • 代数学
      • 高次方程式(数Ⅱ)

      懐かしく、そして、腑に落ちる
      ふたたびシリーズは、微積、確率、統計はやる予定
      物理数学は買って即積読になっているw
      やるかどうかは、知識が付いてから決めよう

改善点


少しずつ、早寝早起きにしているものの、朝のペースに改善余地あり

数学から始めるのは、鉄板になってきた
頭のエンジンを温めるのに、本当にいい

PythonやJsにもっと時間を使いたいが、業務上、SQLが最優先
Pythonだけでも確保出来る様、工夫したい

朝、数学 ⇒ SQLPythonが理想かな

さぁ、明日の朝も楽しもう