対象読者
- SQLの基本は理解しているが、より実践的な分析に取り組みたい方
サンプルの動作確認環境
- PostgreSQL 9.6
- CentOS 6.7
分析のためのSQLの特徴
データ解析関連の話題でSQLを耳にすることが多くなっています。理由はデータを活用しようとした際、データがデータベースに格納されている場合が多く、SQLが必要となるからです。
SQLは枯れた技術・古い技術といった印象がありますが、データ活用の面では汎用性が高い標準技術です。ビジネスの現場でも、経営判断や定期レポートなどのデータを可視化するために利用されるBIツールでSQLをサポートするものが多くなっています。
本連載では特にデータ解析の現場で必要となるSQLに関する技術について、解説を進めていきます。
環境準備
本稿ではDBMSにPostgreSQLを用い、バージョン9.6で動作確認しています。導入方法は割愛するので、必要な場合はPostgreSQLのオフィシャルサイトを参考にしてください。
本稿で用いるサンプルデータとして、以下のテーブルを準備しました。購買履歴の場合、通常は商品名や商品カテゴリを持たせずに商品詳細の別テーブルを商品IDで参照することが望ましいですが、ここではシンプルにするため商品名などをそのまま記載しています。
サンプルデータを作成するためのSQLは以下の通りです。
create table customer( user_id char(008), (ユーザーコード) age int, (年代) sex char(008), (性別) place char(016) (地域) );
insert into customer(user_id,age,sex,place) values ('UID0001',45,'M','Osaka'), ('UID0002',30,'M','Fukuoka'), ('UID0003',20,'M','Tokyo'), ('UID0004',25,'W','Tokyo'), ('UID0005',35,'W','Tokyo'), ('UID0006',40,'W','Osaka'), ('UID0007',30,'M','Osaka'), ('UID0008',25,'W','Tokyo'), ('UID0009',30,'M','Tokyo'), ('UID0010',25,'W','Fukuoka'), ('UID0011',20,'W','Tokyo'), ('UID0012',30,'W','Fukuoka') ;
create table sales_history( item_name char(16), (商品名) item_category char(16), (商品カテゴリ) date date, (購買日) place char(8), (購買地域・場所) user_id char(8), (ユーザーコード) price int (料金) );
insert into sales_history values ('zakka','zakka','2017/3/22','EC','UID0004','980'), ('zakka','zakka','2017/3/22','EC','UID0003','780'), ('zakka','zakka','2017/3/22','EC','UID0009','980'), ('zakka','zakka','2017/3/22','EC','UID0002','780'), ('food','food','2017/3/22','EC','UID0007','250'), ('food','food','2017/3/22','EC','UID0008','250'), ('food','food','2017/3/30','EC','UID0010','200'), ('food','food','2017/3/30','EC','UID0011','350'), ('food','food','2017/4/1','EC','UID0012','250'), ('food','food','2017/4/1','EC','UID0005','250'), ('food','food','2017/4/1','EC','UID0006','250'), ('food','food','2017/4/1','EC','UID0004','250'), ('food','food','2017/4/1','EC','UID0001','250'), ('food','food','2017/4/1','EC','UID0002','250'), ('zakka','zakka','2017/4/10','EC','UID0003','980'), ('zakka','zakka','2017/4/10','EC','UID0004','780') ;
データベースの準備ができたので、ここからはデータ解析におけるSQL実行例を見ていきます。