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 可変長の値を行に展開する

 JSON,XML形式データへの対応

10章 アクセスログのセッション分析をする

10.1 アクセスログとセッション

 累積和でセッションIDをつくる

10.2 セッションに対するパターンマッチ

第2部は省略 

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演算子

表を連結できる

将棋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を作っている関数