【一日で構築】AWS全くの初心者がS3→Redshift→Tableauでダッシュボード作成までやってみた!

目的

今までAWSを全く触ってこなく、GCPだけで生きてきました。世の中の基盤周りを見ていると、GCPよりAWSを使っている会社さんのほうがやはり、まだ多い。というかAWSを使っていないという会社さんがあまりいない。。。
ということで、AWSしっかり勉強しようと思い、まずはちょっと触ってみようと思った次第です。

なので、目的としては、
AWSでデータ処理をやってみる(超初心者編)
としてやっていきましょう!!!

なお、今回はS3の構造やRedshiftの構造等細かい内容については、触れません。あくまで実装してみた!なので!

データの流れ

今回構築するデータ処理の流れは以下のようにしようかと思います。

S3とRedshiftは初見です。名前だけ知ってるみたいな。。

Tableauもこの間初めて触った程度なので、触ったことない方も問題ないです。

AWSについて

簡単にAWSってなに、って方のためにどんなものなのか一言で説明します。

AWSとは、Amazonが提供しているクラウドサービスの総称で、

「早く、安く、リソースを使わず、サーバーを構築できるシステム」

です。

より詳しく知りたい方は参照サイトへどうぞ。

https://aws.amazon.com/jp/aws-ten-reasons/

S3について

S3とは、AWSサービスの一つのオブジェクトストレージのことで一言でいうと

「いろんな形式のデータを保存できる場所」

です。

より詳しく知りたい方は参照サイトへどうぞ。

https://stra.co.jp/aws/2019/06/26/109/

Redshiftについて

Redshiftは、AWSサービスの一つのDWHで一言でいうと、

「データの倉庫として使える場所」

です。

より詳しく知りたい方は以下の資料をご確認ください。

実施タスク

ではやっていきましょう。

Kaggleからデータを選定

今回はKaggleからデータをとってこようかと思います。

面白そうだなーと思ったのが以下4つです。

【2009年から2019年】Amazon本ベストセラートップ50

https://www.kaggle.com/sootersaalu/amazon-top-50-bestselling-books-2009-2019

Coursera コース別評価データ

https://www.kaggle.com/siddharthm1698/coursera-course-dataset

Sample Superstore 売上データ

https://www.kaggle.com/bravehart101/sample-supermarket-dataset

科目別 学生の点数データ

https://www.kaggle.com/spscientist/students-performance-in-exams

以下からご説明させていただくのは、「【2009年から2019年】Amazon本ベストセラートップ50」を使って解説させていただきます。一緒にやっていただける方は、こちらのデータをダウンロードしてください!

AWS S3へデータを送る

KaggleからCSVデータをダウンロード頂いたら、早速S3にデータをいれていきます。

送る方法としては、3つありますので好きな方法で送ってください。

  1. Management Consoleからデータを送る
  2. CLIからコマンドを叩いてデータを送る
  3. PythonからAPIを叩いてデータを送る

エンジニアではない方は1を選択いただくといいかと思います。少しエンジニアの知識をかじっている方は2。Python書ける方は3が効率的かなと思います。

一つずつやり方を説明していきます。

※AWSへの登録は済んである前提で解説致します。

まだ登録されていない方は、以下を参考に登録してください。

https://www.cloudsolution.tokai-com.co.jp/white-paper/2021/0604-238.html

1.Management Consoleからデータを送る

まず、AWSにログインしていただき、S3に入ります。

S3に入ったら、バケットを作成しましょう。

バケットの作成が完了したら、そのバケットの中に先程ダウンロードしたKaggleのデータをアップロードします。

以上でS3にKaggleのデータをいれることができました。

2.CLIからコマンドを叩いてデータを送る

まずは、AWS CLIをローカルPCにインストールします。

※Macの操作方法を解説します。Windowsの方は以下記事を参照ください。

https://dev.classmethod.jp/articles/install-aws-cli-to-windows-server/

Macの方

pipは事前にインストールをお願いいたします。まだの方は以下より。

https://qiita.com/suzuki_y/items/3261ffa9b67410803443

以下、コマンドでAWS CLIをインストールしてください。

pip install awscli 

インストールすると、以下のような表示になります。

Successfully installed awscli botocore bcdoc six colorama docutils rsa jmespath python-dateutil pyasn1 
Cleaning up...

インストールされたことを確認しましょう。

which aws
aws --v

続いて、AWS CLIの設定に入っていきます。こちらの設定は、1で実装した方も対象となりますので、ご注意ください。

アクセスキーとシークレットキーの作成を行っていきます。

AWSのIAMに入っていただき、

対象ユーザーの選択→認証情報のタブをクリック→アクセスキーの作成をクリック→生成完了

ここで作成したキーはよく使います。且つ重要なファイルです。厳重に保管してください。

※1で実装したかたはここまででOKです。以降の処理は不要です。

続いて、以下コマンドを実行します。

aws configure 

すると、キーやリージョンを入力してくださいと出るので、先程ダウンロードしたキーを参照して、入力していきます。

なお、Default region nameは「ap-northeast-1」、Default output formatは「text」を推奨します。

コマンドが無事完了したら、configファイルがあるか確認しましょう。あったら設定完了です。

ls -la ~/.aws

それでは、AWSに接続できるか確認してみましょう。

以下のコマンドを実行して、バケットの作成して、詳細を確認してみます。

aws s3 mb s3://bucket-name
aws s3 ls

問題なさそうであれば、KaggleのファイルをS3で送りましょう。

まず、アップロードしたいディレクトリに移動します

cd ~/tmp/

移動できたら、cpコマンドでs3に送ります。ファイル名とバケット名は自分のものに変更して送ってください。

aws s3 cp ./amazontop50_bestselling_books.csv s3://backet/ 

また、フォルダをまるごとアップロードしたいときは、「–recursive」を後ろにつけます。

aws s3 cp ./dir s3://backet/ --recursive

以上でS3にKaggleのデータをいれることができました。

3.PythonからAPIを叩いてデータを送る

pythonからS3にデータを送る際は「boto3」というのをインストールします。

pip install boto3 

あとは、以下のようにpythonファイルを書いて、実行すれば完了です。

# -*- coding: utf-8 -*-

import boto3

s3 = boto3.resource('s3')
bucket = s3.Bucket('backetname')
bucket.create()
bucket.upload_file(‘amazontop50_bestselling_books.csv', 'amazontop50_bestselling_books.csv')
print (bucket.name)

以上でS3にKaggleのデータをいれることができました。

S3からRedshiftへデータを送り、データを抽出する

続いて、Redshiftに触れていきます。

まずRedshiftに入っていきましょう。

このような画面になります。Redshiftを使うときは「クラスタ」というものを作成する必要があります。PostgerSQLを使ったことがある方は馴染み深いかもしれませんが、RedshiftはPostgreSQL互換性のツールです。なので、考え方が同じなんですね。

クラスタって何?って方はそこまで深く考える必要はありません。一言でいうと「データベースがたくさん集まっている場所」というイメージで大丈夫です。

私はちょうどOSS-DB Silverの試験をこの前受けたのでスッと入ってきました(笑)

クラスタの作成方法は以下です。

Redshiftを初めて使う場合は、2ヶ月間の無料トライアルがあるので、お金をかけずに実装することができます。

クラスタを作成をクリックしたら、完了まで5分ほどかかるので、完了するまで待ちます。

クラスタが作成されると、以下のように状態がavailableになりますので、作成したクラスタをクリックします。

その後Redshiftに入れるようになるので、左のエディタをクリックしてデータベースに接続します。

これで接続は完了です。続いてS3のデータをRedshiftに移動していきます。

方法は以下2つあるのですが、今回は①Redshiftのエディタから操作する方法で解説します。

  1. Redshiftのエディタから操作
  2. postgreSQL環境から操作

S3のデータを移動させる工程は、

  1. テーブルを作成
  2. S3からCOPYコマンドでデータをコピーする

の2つだけです。非常に簡単ですので、臆せず行きましょう。

テーブルを作成します。

以下のコマンドをRedshiftのエディタに打ち込んで、テーブルを作成しましょう。

create table amazontop50_bestselling_books
(
	name varchar(max),
	author varchar(max),
	genre varchar(20),
	user_rating float,
	reviews integer,
	price integer,
	year integer
);

すると左のタブにテーブルが作成されます。スキーマを表示をクリックすると今作成した情報をみることができます。

これでテーブルの作成は完了です。続いてS3のデータを今作成したテーブルにコピーしてみましょう。

以下コマンドをRedshiftのエディタに打ち込んで、データをコピーしてみましょう。

copy amazontop50_bestselling_books from 's3://dataset/amazontop50_bestselling_books.csv'
credentials 'aws_access_key_id=xxxxxxxxxxxxxxxxxxx;aws_secret_access_key=xxxxxxxxxxxxxxxxxxx'
CSV
IGNOREHEADER 1
delimiter ','
NULL AS '\000';

コマンドの説明を少しすると、

copy 〇〇の〇〇はテーブル名 from以降がs3のパスになります。

credentialsの箇所は、以前作成したアクセスキーとシークレットキーをいれてください。

CSVは、今回対象にしているファイル形式を教えてあげてます。CSV以外にもjsonやtar等も使用できます。

IGNOREHEADER 1はヘッダーのスキップです。これをしないとヘッダーもデータとして入ってしまうので、必ずいれるように心がけましょう。

delimiter ‘,’はカンマ区切りのデータだよと教えてあげてます。

NULL AS ‘\000’は、NULLはデータなしという意味だよと教えてあげてます。これをしないとNULLを文字列として認識してしまうみたいです。。。。

上のコマンドを実行すると、先程作ったテーブルにデータが入ります。

テーブルの「データをプレビュー」からデータが入っているか見てみましょう。

データが上記のようにはいっていたら、完了です!

Tabluauと連携し、ダッシュボードを一つ作成する

いよいよ最後の工程です。

最後にTableauにRedshiftを連携して、ダッシュボードを作ってみましょう。

今回はTableau desktopを使って実装してます。インストールから2週間無料だったので、インストールしてお使いください!

https://www.tableau.com/ja-jp/products/desktop/download

Tableauを開いたら、以下のような画面になるので、接続から「Redshift」を選択します。

すると、サインインの画面になるので、必要な情報を入力していきます。

サーバーの箇所には、Redshiftのクラスター画面のエンドポイントを入力します。

データベースやユーザー名、パスワードは作成した情報を入力してください。

サインインに成功すると接続情報の画面になります。

あとは好きなようにダッシュボードを作成するだけです。

私は以下のように簡単なものしか作ってないですが、、、(笑)

https://public.tableau.com/app/profile/takuma.kouno4998/viz/amazontop50_bestselling_books/1

まとめ

以上でS3→Redshift→Tableauまでのデータ処理完了となります。

本当はこれからデータの自動処理だったり、そもそも前処理ちゃんとしないといけないとか、複雑にやんないといけないんでしょうけど、初心者なのでまずはここからということで。。。

お疲れさまでした。