redash

redashでデータを「見える化」したい。(2/3)<データ用意編>

はじめに

前回の環境構築編では、VagrantでたてたVM上にredashを導入しました。
業務で利用するのであればすでににデータが有ると思いますが、今回は業務を利用する代わりにダミーデータを使用したいので用意していきます。

本稿のゴール

業務で使うデータを想定して、「顧客データ」、「商品データ」、「注文データ」を作成します。
作成したデータをredashから参照できるようにDBに登録するところまでを本稿のゴールとします。

ダミーデータの作成

顧客データ

GimeiというGemを利用してデータを作成します。
https://github.com/willnet/gimei

# インストール
$ gem install gimei
# 「顧客ID, 年齢, 性別, 都道府県, 市町村」のダミーデータを100件作成する。
$ ruby -rgimei -e '100.times { |i| g = Gimei.new; puts "#{i+1},\"#{g.name}\",#{rand(100)},\"#{g.male? ? "male" : "female";}\",\"#{g.prefecture}\",\"#{g.city}\",\"#{g.town}\"" }' > users.csv

結果。

1,"山岸 想羅",97,"female","北海道","吉野郡野迫川村","花勝山"
2,"長野 正人",6,"male","高知県","秋田市","高山"
3,"奥山 公明",17,"male","新潟県","池田市","富浦町豊岡"
:

商品データ

matsuya-generator-rubyというGemを利用してデータを作成します。
https://github.com/toshia/matsuya-generator-ruby

# 「商品ID, 商品名, 価格」のダミーデータを50件作成する。
$ ruby -rmatsuya -e '50.times { puts Matsuya.order }'| sort | uniq | head -30 | nl | awk '{print $1",\""$2"\","length($2)*90}' > items.csv

結果。

1,"ミニカレー",450
2,"きつねうどん",540
3,"オリジナルカレギュウ",900
:

注文履歴データ

顧客データと商品データから注文履歴を作成します。
注文履歴には「いつ注文が入ったか」を表す日時データが必要なので、先に作成しておきます。

# 2017/01/01 ~ 2017/12/31の範囲でランダムに1000件の日付を取得する。
ruby -rdate -e '
1000.times do |i|
  s1 = Date.parse("2017/01/01")
  s2 = Date.parse("2017/12/31")
  s = Random.rand(s1 .. s2)
  puts s
end
' | sort > date

もととなるデータの用意ができたので、作成したデータから注文履歴データを作成します。

# 「注文ID, 顧客ID, 商品ID, 注文日付」
$ seq 1 1000 | while read n; do
user=$(cut -d',' -f 1 user.csv | shuf -n 1)
item=$(cut -d',' -f 1 item.csv | shuf -n 1)
day=$(shuf date | head -1)
echo "$n,$user,$item,\"$day\""
done > orders.csv

結果。

1,62,23,"2017-10-31"
2,48,5,"2017-08-05"
3,1,26,"2017-12-07"
:

DBへつっこむ

DBにデータを入れていきます。
前回redashのインストールを行った際に、postgresがインストールしてあるのでpostgresを利用します。

## postgresユーザーの準備
$ sudo passwd postgres
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully

$ su - postgres
Password:

$ psql
psql (9.5.10)
Type "help" for help.

postgres=#

## DB・テーブルの準備

postgres=# create database dummy;
postgres=# \c dummy

dummy=# create table users (id int, name varchar(255), age int, sex varchar(255), prefecture varchar(255), city varchar(255), town varchar(255));
dummy=# create table items (id int, name varchar(255), price int);
dummy=# create table orders (id int, user_id int, item_id int, ordered_at date);

## データのコピー
dummy=# COPY users FROM '/path/to/users.csv' WITH CSV;
dummy=# COPY items FROM '/path/to/items.csv' WITH CSV;
dummy=# COPY users FROM '/path/to/orders.csv' WITH CSV;

無事、データをCOPYできればデータの準備は完了です。

まとめ

今回、ダミーデータの作成が完了し、環境とデータの両方が出揃ったのでredashをいじれるようになりました。
(ワンライナーでダミーデータを作成するやり方の解説となってしまいましたが。)
次回からは実際にredashでデータを表示していきます。