- 2-2 インデックスを間接的に利用したデータ行の抽出
- SQL
- インデックスが効いているデータを条件式の最初に加えることで、条件式内でインデックスを効かす。(インデックスが効いている列と抽出対象列に関係がないとできない)
- 2-3 サンプリング
- SQL
- WHERE RANDOM() <= 0.5 # 計算コスト低い
- Python
- reserve_tb.sample(frac=0.5) # sample関数の利用
- 2-4 集約IDに基づくサンプリング
- SQL
WITH reserve_tb_random AS(
SELECT
*,
-- customer_id に対して一意の値となる乱数生成
-- 生成した乱数をcustomer_id ごとにまとめて、1番目の値を取り出す
FIRST_VALUE(RANDOM()) OVER (PARTITION BY customer_id) AS random_num
FROM
reserve_tb
)
SELECT *
FROM reserve_tb_random
-- 50%サンプリング、customer_idごとに設定された乱数が0.5以下の場合に抽出
WHERE random_num <= 0.5;- Python
# sample関数を利用するためにpandas.Series()に変換
# sample関数によって、顧客IDをサンプリング
target = pd.Series(reserve_tb['customer_id'].unique()).sample(frac=0.5)
# isin関数により、customer_idがサンプリングした顧客IDのいずれかに一致した行を抽出
reserve_tb[reserve_tb['customer_id'].isin(target)]
0コメント