前回利用した構成図を参考に、今回解説を行う範囲を紹介します。分析を行うためのデータがある状態で、Amazon Redshiftを介して可視化ツールでそのデータにアクセスできるまでの『レール』を1本通す様なイメージと言えば良いでしょうか。
- データの入手、整形
- Amazon S3へのデータのアップロード
- Amazon Redshift:テーブルの作成
- Amazon Redshift:データの投入
- Amazon Redshift:SQLによるバッチ処理(ETL)
- BIツールからの接続確認
また、利用するBIツールはTableau社が提供している『Tableau Desktop』というデスクトップツールを利用したいと思います。文中『Tableau』という言葉が出て来た際はこの『Tableau Desktop』のことを示しているとご理解ください。
データの入手・整形
では分析を行いたいデータを準備するところから見ていきましょう。Tableau社では各種デモで用いることができるようなサンプルデータを公開していますが、今回はそのサンプルデータを利用したいと思います。
以下のリンクで公開されているものは、架空の店舗別・地域別売り上げデータサンプルです。日本語で公開されており、複数テーブル(Excelなのでシートで分かれていますが)で構成されています。メインとなるテーブルの件数は8000件少々なので『ビッグデータ』とは言えませんが、デモ実演用に用いるものだけあってデータの内容は良い感じにまとまっていますので、これを例に手順を進めていきたいと思います。
データをダウンロードし、構成内容を見てみましょう。全部でシートは5つあります。
- Orders:注文データ。今回メインで利用することになるシート。
- Inventory:製品内容に関する在庫目録的な情報。
- Customer:顧客情報。収入や在職期間に関する情報が含まれている。
- Prefecture:都道府県データ。人口や面積に関する情報が含まれている。
- Targets:商品のカテゴリ・サブカテゴリごとの目標売上額を定めたもの。
テーブルに投入することになるデータの内容確認、および整形作業を行います。Excelシートの内容をざっと見る限りだと、それぞれ以下のように吟味・編集する箇所がありそうです。
- Orders:『製品名』『製品説明』に、取り込み時にエラーを引き起こす可能性がある文字列(『,』『"』『®』『©』など)が含まれているため、CSV生成時点で除去しておく。売り上げや宣伝費などの数値項目にカンマが含まれているため、除去する(列フォーマット指定で調整)。ヘッダー部分は日本語表記になっているが、作成するテーブル名は英字表記とする。
- Inventory:『Product Name』にOrdersテーブル同様の文字列が含まれているのでCSV作成時点で除去しておく。
- Prefecture:『Prefecture』以下、地域情報に関する部分がすべてローマ字表記となっているので日本語表記に変換。また、ISO(都道府県コード)は数字2桁の値に整形。
- Targets:『Sales Target』がドル表記になっているが、これはテーブル投入後に円換算する方向で進める。
今回はデータ件数も少なく、手作業で対処できるボリュームなので以下のような操作手順でCSVファイルをそれぞれ作成しました。
- Excelのメニューから『編集』→『置換』で所定の文字列を置換。不要な文字列の除去は対象文字列を『』(空文字)に置換する形で取り除きます。
- その他変換作業も同様に実施。Excelを扱うプログラミング言語を利用できるのであればそれらを用いるのも良いでしょう。
- 内容をCSVファイルとして出力。カンマ区切りのデータとして扱います。
- 出力したファイルはエンコーディングが『Shift_JIS』となっていますが、Amazon Redshiftで利用可能なエンコーディングは『utf-8』一択です。nkfというソフトを用いて別途utf-8のファイルを出力・保存しましょう。データのロードにはutf-8エンコーディングのファイルを利用します。
$ nkf -g codezine_orders.csv Shift_JIS 【←Excelから出力したファイルのエンコーディング:Shift_JIS】 $ nkf -Lw codezine_orders.csv > codezine_orders-utf8.csv 【←変換コマンド実施、結果は別ファイルに出力】 $ nkf -g codezine_orders-utf8.csv UTF-8 【←別途生成したファイルのエンコーディング:utf-8】
上記仕様に基づいて作成を行ったファイルは以下です。すべてカンマ区切りのCSV、ファイルのエンコーディングはutf-8です。記事に添付していますので、必要に応じてダウンロードしてください。
- codezine-orders-utf8.csv.gz
- codezine-inventory-utf8.csv.gz
- codezine-customer-utf8.csv.gz
- codezine-prefecture-utf8.csv.gz
- codezine-targets-utf8.csv.gz