【BigQuery】 商品データを分析・可視化

![12d696d6167652d73746f72652e73332e616d617a6f6e6177732e636f6d2f302f3132303839382f30313366663136332d333730642d373335382d376363612d38393466373932.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120898/62ce7992-1af6-7106-006f-fb29affeb8fa.png)

#概要

ECサイトの商品データ約30,000件を**BigQueryで集計、Googleデータポータルで可視化・分析**し、データの特徴や傾向把握を試みます

#対象データ

今回対象とするのは、[「Amazonにおけるインナーウェア製品データ」](https://www.kaggle.com/PromptCloudHQ/innerwear-data-from-victorias-secret-and-others)です

![i01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120898/f9794e97-293e-00ab-95c8-45fdc971fc5d.png)

![スクリーンショット 2019-05-05 18.01.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120898/d9e20957-b742-f5fb-2b47-b3f32598a732.png)

上記のように、「商品名／価格（ドル）／ブランド名／レビュー件数..」等のデータが**約30,000件**入っています
Kaggleにて公開されているので、CSVファイルとしてダウンロードしてきます

※実際のデータでは実在のブランド名が使われていますが、この記事内では全て仮名に置き換えています

#▼ BigQueryで集計

##データの用意

まずはBigQueryにデータを入れていきます

###データセット作成

「データセットを作成」クリック

![i02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120898/4452ce5c-bdce-cf56-ed5c-1a3f8d18b1e4.png)

データセットIDを入力

![i03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120898/053e39be-e70a-b04b-977d-8382bf90674b.png)

![i04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120898/da394eb5-f842-7af5-8603-17cd449b0745.png)

プロジェクトに、空のデータセットが作成されました

###テーブル作成

「テーブルを作成」をクリック。データソースとしてCSVファイルをアップロード

![i05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120898/be456f8a-9f8e-e81e-6919-2ca1eb158ead.png)


![i06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120898/aa461313-7010-79e1-4f85-c360a5c9bb1d.png)

CSVファイルが読み込まれ、テーブルが作成されました

##SQL

現時点でデータは約30,000行

ただ、数が多いのは分析対象であるインナーウェアの「色ごと／サイズごと」で行が分けられているためで、Amazonでは色／サイズが違っても「1商品扱い（ひとまとめにレビューされる）」で設定されている場合が多くあります


今回のインナーウェアも、**商品によっては30バリエーション以上ある商品もありますが、それも「1商品扱い」**となります


今回「1商品扱い」となる条件は以下と設定します


- ブランド名が同一
- 商品名が同一
- レビュー：評価が同一
- レビュー：件数が同一


以上を踏まえ、**SQLで商品情報の重複（同じ商品のバリエーション違い）をグルーピング**します


```sql
SELECT
  brand_name,
  product_name,
  rating,
  review_count,
  TRUNC (AVG (price)) price_avg
FROM
  `practice-01-234805.amazon_products.az_innerwear`
GROUP BY
  brand_name,
  product_name,
  rating,
  review_count
ORDER BY
  brand_name,
  product_name,
  review_count
  DESC
;
```

「1商品扱い」でも、価格が違う場合があるので（とてもややこしいですが…）、価格に関してはグルーピングした「平均」を着地とし、TRUNC関数で小数点以下を切り捨てています

![i07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120898/e0d0c263-d81d-d61e-1641-b7b92bcfecca.png)

「色／サイズ違い」をひとまとめにした結果、**約30,000行**あったデータが**約400行**にまとまり、各商品の平均価格が算出できました

#▼ Googleデータポータルで可視化

BigQueryで集計したデータを、Googleデータポータルで可視化し、分析していきます
「データポータルで調べる」をクリック

![i08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120898/5581fba5-e9c2-3914-992d-4cde56a5cdc8.png)

Googleデータポータルにデータが引き継がれます

![i09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120898/f1bb2d1b-8f1a-1116-f72b-ef1a43e233b7.png)

##グラフ選択

分析に適したグラフを選択

![i10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120898/2fb82e9e-8a73-4044-1c54-06134ceb639e.png)

##ディメンション／指標設定

分析したいディメンションと指標を設定

![i11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120898/c37d7346-fc35-0107-10c8-d19897adf38f.png)

##可視化 結果

今回は各ブランドごとのレビュー数の比較や、価格帯ごとの商品数やレビュー数の比較等を行います

###ブランド割合／レビュー投稿数の割合

![egt57rst8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120898/46e24fc0-b2c4-fe64-fb5c-c3132ca95e94.png)

左の円グラフ「ブランド割合」で見ると、**商品全体の半数以上を「wc」というブランド**が占めており、次に「ck」というブランドが続きます

さらに、右の円グラフ「レビュー投稿数の割合」では「wc」が7割以上を占めており、このブランドは**レビューの獲得にとくに成功している**と言えます



###ブランド毎の平均価格とレビュー評価

![スクリーンショット 2019-05-03 18.39.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120898/9155cc3c-fd52-6d4e-43c5-b661375130c2.png)

上記は、ブランド毎の以下の値を棒グラフにしたものです

- ブルー棒｜平均価格
- レッド棒｜平均レビュー評価

「cc」というブランドが**高価格でありながら**、他のブランドに比べレビューの**評価が「3.7」と低め**です
高価格であることによるユーザーの期待に、十分に応えられていない可能性がありそうです



###価格毎の レビュー投稿数と 商品数

![53684368763854.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120898/2a89fd06-74b8-7408-1e1c-3ea4e39aeb87.png)

上記グラフは

- 左が低価格商品。右に行くほど高価格商品
- ブルー棒｜レビューの平均投稿数
- オレンジ線｜各価格帯の商品数

となっており、**高価格商品**になるにつれ（グラフ右に行くにつれ）、**レビュー投稿数が多い**ことが分かります

またグラフ左右を比べると、グラフ左側（低価格帯）は、商品数（オレンジの線）に対し、レビューの平均投稿数（ブルーの棒）が少なめになっています。つまり「**高価格**の商品ほどレビューが**投稿されやすく**、**低価格**の商品はレビューが**投稿されずらい**」と言えます

高価格の商品の方が低価格商品より熱を持って購入され、**レビューに対するモチベーションも高くなる**のではないか、と考えることができそうです



#総括

約30,000件の商品データを、BigQueryで集計、Googleデータポータルで可視化・分析し、

- wcというブランドがレビューの獲得にとくに成功している
- ccというブランドが、高価格であることの期待に応えられていない可能性がある
- 高価格の商品ほどレビューが投稿されやすい


など、**特徴・傾向を把握**することができました。それをもって、

- ccブランドの満足度向上に取り組む
- 低価格商品のレビュー獲得手段を検討する

など、**次の施策検討に活かす**ことができるかと考えます