10年戦えるデータ分析入門
8章 遅れて来た分析SQL最強の武器 -ウインドウ関数
8.1 サブクエリで複雑なSELECT文を組み立てる
かなり複雑なことをやらせられるようになった。FORM句
のあとにSELECT文をかける。またin句のあとにもかける。
8.2 ウインドウ関数でグループ全体を対象にした計算をする
主要なウインドウ関数(postgreSQL)
count
sum
avg
rank グループ内をソートして順位付けする(重複あり)
row_numer グループ内をソートして順位付けする(重複なし)
lag グループ内をソートして前の行の値をとる
lead グループ内をソートして後ろの行の値をとる
通常の集約関数もウインドウ関数になる
構文は
ウインドウ関数 OVER (PARTITION BY col
ORDER BY col [DESC or ASC]
(PARTITION BYは必須ではない)
実行される順番
ジョイン処理
WHERE句での絞り込み
GROUP BY句によるグルーピング
SELECT句による計算と集約
HAVING句による絞り込み
ウインドウ関数 ここで実行される
ORDER BY句によりソート
LIMIT句による制限
8.3 履歴テーブルから最新行を取る
row_number関数を使う
8.4 対全体比
sum関数を使って累積和を求める。
8.5 デシル分析をする
ntile関数を使う
8.6 時系列データの処理
9章 縦と横は難しい
9.1 横持テーブルと縦持テーブル
9.2 横持から縦持ちへの変換
CASE * WHEN ENDで変換する
unnest関数を使うと(postgreSQL固有)を使うともっと簡単にできる
9.3 縦持ちから横持への変換
横->縦と同じようにCASE句を使う
array_agg関数を使うと(postgreSQL固有)を使うと簡単にできる
9.4 可変長の値を行に展開する
10章 アクセスログのセッション分析をする
10.1 アクセスログとセッション
累積和でセッションIDをつくる
10.2 セッションに対するパターンマッチ
第2部は省略
10年戦えるデータ分析入門
7章 ジョインを制する者はRDBMSを制す 応用編
7.3 一歩進んだjoin
セルフジョイン 1年前の売り上げと比較するなどに使用される
7.4 組み合わせを生成するジョインでバスケット分析
かなり複雑
10年戦えるデータ分析入門
6章 ジョインを制する者はRDBMSを制す 基礎編
6.2 joinでテーブルを連結する
基本構文
SELECT
*
FROM
assess_log as a
join customers as c
on a.customer_id = c.customer_id
;
joinにはインナー結合とアウター結合がある
実行順
ジョイン処理
WHERE句による行絞り込み
GROUP BY句によるグルーピング
SELECT句による計算と集約
HAVING句による絞り込み
ORDER句による並び替え
LIMIT句による制限
6.5 テーブルを作成する
外部からデータを取り入れるときは
COPY table name FROM 'csvファイルのフルパス', WITH FORMAT csv;
10年戦えるデータ分析入門
5章 関数で自由自在に新しいカラムを作り出す
5.1 数値の演算
演算は列全体に影響する、特定の行指定するのであればCASE句を使用する
型のキャストはCAST(col)
5.2 文字列の演算
関数には集約関数とスカラー関数がある
集約関数は列全体に対して演算するが、スカラー関数は
列のなかの1つ1つに対して演算する
よく使用される文字列処理の演算子と関数
a || b 文字列連結
char_length(str)
substring(str,begin,end) 文字列の切り出し
trim(str) トリム
split_oart(str,delim,nth) スプリット
5.3 日付と時刻の演算
時刻のリテラル
date '2018-6-16'
timestamp '2018-6-16 12:23:00'
主な演算子と関数
current_date
current_timestamp
date + n n日後の日付
date - n n日前の日付
date1 - date2 差(日数)
extract(year from date '2016-6-16') 日付や時刻の特定の部分を取り出す
date_trunc('month' date '2016-6-16') 日付や時刻を特定の部分まで切り詰める
interval型
interval '1 year'
interval '11 month'
interval '11 week'
interval '00:00:15' 15秒
5.4 計算した値を使って集計する
as句
列に名前をつける、計算したできた新しい列に名前をつけるなど
10年戦えるデータ分析入門
4章 すべての分析は集計から始まる
集約関数は便利
- count(col) or count(distinct col)
- sum(col)
- avg(col)
- min(col)
- max(col)
- var_pop(col) 母分散
- var_samp(col) 標本分散
- stddev_pop(col) 母標準偏差
- stddev_samp(col) 標本標準偏差
GROUP BY句
月ごととかユーザーごとに分ける
SELECT文で記入する順番
SELECT
FROM
WHERE
GROUP BY
HAVING
ORDER BY
LIMIT
SELECT文で実行される順番
FROM
WHERE
GROUP BY
SELECT + 集約関数
HAVING
ORDER BY
LIMIT
集約表はできるが面倒他のツールとの併用を推奨
UNION演算子
表を連結できる
10年戦えるデータ分析入門
1章 10年戦えるデータ分析の技術
飛ばす
2章 さわってみようRDBMS
飛ばす
3章 簡単 select文でデータ探索
セレクト文での句の並べ方
SELECT
FROM
WHERE
ORDER BY
LIMIT
将棋AIで学ぶディープラーニングを読む
7.6 共通処理の実装
7.7.1 棋譜の読み込み
read_kifu(kifu_list_file)はtrain_pollicy_value.pyなどから棋譜ファイルパスを渡されCSA形式のファイルをパースして初期局面から着手リストから局面を構築してそのpositionを返す
7.7.2 局面から入力特徴を作成
make_input_features(piece_bb,occupied,piece_in_hand)は make_featuresかmake_input_features_from_boardから呼び出され駒の座標をnp.array(9,9)に変換して返している。 持ち駒は同様にしている。page90の図7.2,図7.3を作っている関数