pandas操作⑥:横持ち変換
縦持ち(レコード形式)から横持ち(表形式)への変換をするとき、スマートではないのはわかっていたけどSQLで横持ち変換したい値に応じたcase文をシコシコ書いていた。値が増えたりしたときにまた書き換える必要あるのでこれはクソなコードである。
pythonに横持ち変換用にpivot_table関数というのがあることを知ったのでどうやるのか試してみる。
import pandas as pd from preprocess.load_data.data_loader import load_hotel_reserve customer_tb, hotel_tb, reserve_tb = load_hotel_reserve() # pivot_table関数で、横持ち変換と集約処理を同時実行 # aggfuncに予約数をカウントする関数を指定 pd.pivot_table(reserve_tb, index='customer_id', columns='people_num', values='reserve_id', aggfunc=lambda x: len(x), fill_value=0)
https://github.com/ghmagazine/awesomebook/blob/master/preprocess/007_spread/01/python_awesome.py
『前処理大全』の上記githubから引用。
SQLだとpeople_numの人数毎にcase文書いていたけどこれなら一発でできるよ、ということらしい。でもredshiftのテーブルからデータを引っ張って来ている場合はこの関数では直接テーブルみれないのでredshiftのテーブルをDataFrameにする必要があるので、結局SQLは書くことになる。
仮に直接redshiftのテーブル見れたとしても、そのまま使うことってないから(他のテーブルと結合したり、何らかの抽出条件加えたりする)、やはりpivot_table関数の前にread_sql_query関数が必要になる。
まずは下記の記事で書いたredshiftに接続する方法でデータ持ってくるわけです。
exotic-manifold.hatenablog.com
いつも上記の方法でredshiftにあるテーブルにアクセスしていたけど、『前処理大全』にもっと簡単な接続方法書いてるかもしれないから次はこれを調べる。
前処理大全[データ分析のためのSQL/R/Python実践テクニック]
- 作者: 本橋智光
- 出版社/メーカー: 技術評論社
- 発売日: 2018/04/13
- メディア: 大型本
- この商品を含むブログ (1件) を見る