目次
目的
今まで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つありますので好きな方法で送ってください。
- Management Consoleからデータを送る
- CLIからコマンドを叩いてデータを送る
- 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のエディタから操作する方法で解説します。
- Redshiftのエディタから操作
- postgreSQL環境から操作
S3のデータを移動させる工程は、
- テーブルを作成
- 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までのデータ処理完了となります。
本当はこれからデータの自動処理だったり、そもそも前処理ちゃんとしないといけないとか、複雑にやんないといけないんでしょうけど、初心者なのでまずはここからということで。。。
お疲れさまでした。