🐕

データサイエンス100本ノックSQL(データの準備・環境構築まで)

2021/11/30に公開

はじめに

SQLの教材として薦められたデータサイエンス100本ノックに取り組んだので、記事にします。
今回は最初なので問題を解くための環境を作るところを記載します。


下準備

・Docker Desktopをローカル環境にインストールしてgithubから教材をダウンロード
・PostgreSQL13もインストール

PostgreSQLは簡単にインストールできたが、Dockerはインストールするのも結構難しい。
自分も最初はDocker上で取り組んでいたが、何回か繰り返すうちにパソコンの動きがものすごく重くなったので、データを取れたらローカル環境で実行したほうが良い。
(Dockerで動かしているとメモリを物凄い使うことが原因らしい、この時にzoomを繋いでいたが画面はほぼ動かず声もほぼ聞こえなかった)

後はpostgreSQLについてるpgAdmin4を起動してデータを移す。
インストールの手順とかはここでは省く。(自分が説明するよりネット上にある他の人が書いた記事の方が分かりやすいと思うので...)


SQLでcsv読み込む(先にテーブルを作り、csvのデータを流すイメージ)

・copy文のfromでcsvがあるファイルの場所を指定する。
パスの部分は人によって違うので、都度変更する必要がある。

--customer
create table customer(customer_id text,
                      customer_name text not null,
                      gender_cd int,
                      gender text,
                      birth_day date,
                      age int,
                      postal_cd text,
                      address text,
                      application_store_cd text,
                      application_date text,
                      status_cd text);

copy customer from '\\...\\...\\customer.csv' with csv header;

drop table if exists customer;

--category
create table category(category_major_cd text,
                      category_major_name text,
                      category_medium_cd text,
                      category_medium_name text,
                      category_small_cd text,
                      category_small_name text);

copy category from '\\...\\...\\category.csv' with csv header;

drop table if exists category;

--geocode
create table geocode(postal_cd text,
                     prefecture text,
                     city text,
                     town text,
                     street text,
                     address text,
                     full_address text,
                     longitude float,
                     latitude float);

copy geocode from '\\.\\.\\geocode.csv' with csv header;

drop table if exists geocode;

--product
create table product(product_cd text,
                     category_major_cd text,
                     category_medium_cd text,
                     category_small_cd text,
                     unit_price int,
                     unit_cost int);

copy product from '\\.\\.\\\product.csv' with csv header;

drop table if exists product;

--receipt
create table receipt(sales_ymd int,
                     sales_epoch int,
                     store_cd text,
                     receipt_no int,
                     receipt_sub_no int,
                     customer_id text,
                     product_cd text,
                     quantity int,
                     amount int);

copy receipt from '\\.\\.\\receipt.csv' with csv header;

drop table if exists receipt;

--store
create table store(store_cd text,
                   store_name text,
                   prefecture_cd int,
                   prefecture text,
                   address text,
                   address_kana text,
                   tel_no text,
                   longitude float,
                   latitude float,
                   floor_area float);

copy store from '\\.\\.\\.\\store.csv' with csv header;

drop table if exists store;

上手くいっていれば6個テーブルが出来るはずなので、それが出来たらOK
drop文はテーブルを削除するためのものなので読み込むときは書かなくてよい。
いらなくなったらdrop文を使ってテーブルを消す。

Discussion