＼タピ活に必要／2019年最新の【タピオカマップ】を作った

#はじめに
タピオカが昨年からブームとなっている中、タピオカ店が今年急速に増えて、夏がピークと感じています。都心のどこでも行列が長いタピオカ店が見かけて、Qiitaでタピオカをめぐっていろいろな面白い記事が出てきます。

タピオカが大好きなので、東京におけるタピオカ店の分布と人気店舗が一目でわかるダッシュボード「タピオカマップ」を作ってみました。

手順は
①[Octoparse](https://www.octoparse.jp/?tapioca)で【Rettyグルメ】から東京のタピオカ店のデータ情報を抽出する
②Excelでデータを加工する
③[FineReport](http://www.finereport.com/jp/?utm_source=Qiita&utm_medium=media&utm_campaign=tapioca&utm_term=fr_top2)でダッシュボードを作成する

ことになります。
出来上がったダッシュボードは以下に示します。
![東京タピオカマップ.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266670/899b8543-d30c-70a0-9a10-a98212c3e44b.gif)

#準備
①Octoparseに登録（無料版あり）：[コチラ](https://www.octoparse.jp/Pricing?tapioca)
②FineReportのダウンロード（無料版あり）：[コチラ](http://www.finereport.com/jp/?utm_source=Qiita&utm_medium=media&utm_campaign=tapioca&utm_term=fr_top2)
③ダッシュボード作成の素材：[Googleドライブ-ダッシュボードの素材](https://drive.google.com/file/d/19gpFAXPLA0FtiJnF1hfOLE8MMe1I84vQ/view)
（ソフトのインストールやアカウント登録などの事前準備はここでは省きますが、公式サイトの説明をご参照ください。）

#タピオカ店のデータを取得
今回のデータ収集には、コードを書かなくても簡単にスクレイピングできるツールOctoparseを使ってみました。クリックとドラッグでワークフローを作成し、エクスポート条件を設定し簡単にタピオカ店舗のデータを抽出できます。
##ステップ1.　対象のWeb ページを設定する
Octoparseを起動して、ホーム画面の「カスタマイズモード」に表示されている「+ タスク」ボタンをクリックします。
「Webサイト」にRettyのURLを入力し、「URLを保存する」ボタンをクリックします。
下記のURLを使います。
Https://retty.me/restaurant-search/search-result/?free_word_area=東京都&prefecture_code=13&free_word_category=タピオカ&category_type=372
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266670/d49f4d8d-e488-8708-e486-63e4fa4a12e5.png" width=50% alt="データスクレイピング1">

##ステップ2.　取得する項目を設定する
今回は店名、住所、最寄駅、行きたい数、オススメ人数、予算を抽出します。
 
検索結果の一番目の店舗名をクリックすると、緑色に変わり、選択されたことを示します。 残りの店舗名は赤色に変わり、類似した要素として識別されたことを示します。すべての店舗名を選択するには、「操作ヒント」で「すべて選択」をクリックします。選択すると、すべての店舗名が緑色で強調表示されます。

各詳細ページからデータを取得するため、「操作ヒント」で「各要素をループクリップする」をクリックします。そうすると、Octoparseは一番目の詳細ページを開きます。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266670/cc388228-5c22-f2a5-4fde-5b43fbf214c2.png" width=50% alt="データスクレイピング2">

店名をクリックし、「選択した要素のテキストを抽出する」を選択します。同じ手順を繰り返して、このページから住所、最寄駅、予算などの情報を抽出します。 
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266670/d346f0a1-fa53-6b60-0fba-4975f1ad93d8.png" width=50% alt="データスクレイピング3">

##ステップ3.　ページネーションを処理する

もちろん、最初のページだけではなく、すべてのページをスクレイピングしたいのです。すべてのページを抽出するには、ページネーションループを作る必要があります。

Rettyのページネーションには「次へ」ボタンがなく、ページ番号だけがあります。この場合、ページネーションのXPathを変更する必要があります。
 
ワークフローの「Webページに移動」をクリックして、検索結果ページに戻ります。ページ番号「1」をクリックし、「操作ヒント」から「選択したリンクをループクリップする」を選択します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266670/90300f75-5220-bb28-c7da-a12b62dc9ecb.png" width=60% alt="データスクレイピング4">

ページネーションの「ループアイテム」が作成され、ページ1のXPathも自動作成されました。

**//LI[@class='pager__item pager__item--current']/A[1]**
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266670/6c3a5296-4751-f8c9-c2b9-a2e5bdfe6aa6.png" width=60% alt="データスクレイピング5">

ページ番号「2」をクリックしてページ2に、次にページ3に移動させたいので、正しいXPathは次のようになります。新しいXPathに置き換えると、ループアイテムのところに「1」から「2」に変わります。

**//LI[@class="pager__item pager__item--current"]/following-sibling::LI[1]/A**
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266670/a95b0a3d-db51-1fed-dee6-8de70d645927.png" width=60% alt="データスクレイピング6">


これで、スクレイピングのワークフローが完成しました。「抽出の開始」をクリックし、無料アカウントなので、「ローカル抽出」を選択します。データエクスポートの形式はさまざまなタイプが選べますので、好きなものを選択し任意のフォルダにファイルをエクスポートします。
![7データスクレイピング.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266670/7ae1c83b-dc30-e594-5a10-6819d9ed2d69.png)


#元データの加工
ダッシュボード作成のために、先ほどスクレイピングしたデータを加工し、ほしいフォーマットに変換する必要があります。例えば、重複する値の削除、ヌル値の処理、特定のカラムの選択、新たに計算した値の導出など。ここは、店舗名、エリア、最寄駅、行きたい数、おすすめ数をダッシュボードのデータにしたいので、まずこれらのカラムを選定しましょう。

それから、Excelの**【重複の削除】**機能で重複する店舗の行を削除します。

関数**【LEFT,RIGHT,FIND】**を使って「住所」と「最寄駅」のカラムからエリア名と駅名を取り出します。
処理済みのデータは以下に示します。
![データ加工.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266670/d0e9dbc2-ee9b-bdb2-d2bd-6bc1b63183d4.png)


#タピオカマップ作成

**ダッシュボード作成の際に注意すべきポイントについて、前の記事[ダッシュボードを作ってみたらそんなに難しくない](https://qiita.com/Hailee/items/2a8e22b78effe147de0d)をご確認ください。**

今回は[FineReport](http://www.finereport.com/jp/?utm_source=Qiita&utm_medium=media&utm_campaign=tapioca&utm_term=fr_top2)によるタピオカ店の分布状況のダッシュボードの作り方を詳しく説明します。ExcelのUIに似た画面で、シンプルなドラッグ操作でダッシュボードを設計できます。

**タピオカマップから知りたいこと：**
各エリアの店舗数
店舗数が一番多いエリア(10個)
各エリアに一番人気の店（5選）
店舗数が一番多い駅（10個）

**実現したい効果：**
地図でエリアをクリックすると、そのエリアの一番人気の店（5選）を表示します。


##ステップ1．データ接続
Excelファイルを任意のデータベースに導入し（ここはMySQL）、FineReportで「データ接続定義」⇒「JDBC」を選択し、必要な情報を入力し、データベースに接続します。

（店舗数が一番多いエリア、各エリアに一番人気の店などのデータはSQL文によって抽出したいので、Excelファイルをデータソースとして接続するのではなく、データベースにインポートし、FineReportで接続してから操作するのほうが効率的です。）
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266670/efdf4594-8d02-e30d-8e3c-d4bb0cf31b2d.png" width=60% alt="データ接続1">


「＋」⇒「データベースクエリ」を選び、SQL文によってグラフと地図に必要なデータセットを作ります。

（**SQLの学習方法について知りたい方はぜひ[初心者が押さえておくべきSQLガイド](https://qiita.com/Hailee/items/136439b53a1c4a8265b3)もご覧ください**）
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266670/6fc36d84-d554-5a77-e08b-f0286cac8b13.png" width=50% alt="データ接続1">

##ステップ2．グラフと地図作成

「ファイル」⇒「ダッシュボード新規作成」をクリックし、空白のダッシュボードが表示されます。レイアウト方法として、絶対レイアウトと自動調整がありますが、ここは**絶対レイアウト**を選択します。

帳票ブロック、グラフと地図をツールバーからダッシュボードにドラッグし、サイズと位置をすこし調整します。FineReportに様々なグラフや地図が用意されるので、必要に合わせて選択できます。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266670/2bea8fe5-e315-fb0d-d782-3c2f6198b69b.png" width=65% alt="ダッシュボード作成1">

東京のタピオカ店舗数を地図で可視化するために、下記のように地図のデータを設定します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266670/d316df82-c7b8-fd30-ffb7-f6a55f018769.jpeg" width=50% alt="ダッシュボード作成2">
横棒グラフ（行きたい数トップ5の店舗、おすすめ数トップ5の店舗）、バブルチャート（店舗数トップ10のエリア）、帳票ブロック（店舗数トップ10の駅）のデータをそれぞれに設定します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266670/8244a6a9-87eb-196d-a5b1-85694b2ed619.jpeg" width=90% alt="ダッシュボード作成3">

パレメータの追加によって、地図と二つの横棒グラフを連動させます。つまり、地図上のエリアをクリックすると、そのエリアの行きたい数トップ5の店舗とおすすめ数トップ5の店舗を表示するということです。

##ステップ3．スタイル設定と動的効果
ここまでダッシュボードは大体完成しましたが、しかし、ほしい情報を表すだけでは不十分です。人の興味をそそるダッシュボードデザインには適切な配色とビジュアル効果がかかせません。

ここで、ダッシュボード全体の背景を暗い色、グラフをやや明るい色、テキストを白色に設定します。最初の素材を利用します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266670/f4051c28-3f3f-d782-68a5-89c431a52f33.png" width=65% alt="ダッシュボード作成4">

見出しと各コンポーネントをはっきりさせるために、飾りをつけましょう。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266670/9b27e7f2-3088-13f8-78c1-5bfcd7dfff02.png" width=50% alt="ダッシュボード作成5">
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266670/ebfb86c5-a5a1-613a-f417-ed7a621b74d1.png" width=30% alt="ダッシュボード作成6">

FineReportはビジュアル効果にカスタマイズ性が高いので、私はダッシュボードに生き生きさせるために、【店舗数トップ10の駅】にスクロール効果を追加します。

コードは以下の通り：

```javascript
setTimeout(function() {
$("div[widgetname=REPORT2]").find("#frozen-center").css('overflow-x', 'hidden'); 
$("div[widgetname=REPORT2]").find("#frozen-center").css('overflow-y', 'hidden');
$("div[widgetname=REPORT2]").find("#frozen-north").css('overflow-x', 'hidden');
$("div[widgetname=REPORT2]").find("#frozen-north").css('overflow-y', 'hidden');
$("div[widgetname=REPORT2]").find(".reportContent").css('overflow-y', 'hidden');
$("div[widgetname=REPORT2]").find(".reportContent").css('overflow-x', 'hidden');
}, 100);
window.flag = true;
setTimeout(function() {
$("#frozen-center").mouseover(function() {
window.flag = false;
})
$("#frozen-center").mouseleave(function() {
window.flag = true;
})
var old = -1;
var interval = setInterval(function() {
if (window.flag) {
currentpos = $("div[widgetname=REPORT2]").find("#frozen-center")[0].scrollTop;
if (currentpos == old) {
$("div[widgetname=REPORT2]").find("#frozen-center")[0].scrollTop = 0;
} else {
old = currentpos;
$("div[widgetname=REPORT2]").find("#frozen-center")[0].scrollTop = currentpos + 1.5;
}
}
}, 25);
//
}, 1000)
setTimeout(function() {
    //帳票ブロックの幅を取得する
    var wid = ($("div[widgetname='REPORT2']").width() - 17) + 'px';
    //帳票ブロックの幅をリセット
    $("div[widgetname='REPORT2']").css('width', wid);
    //帳票ブロックの高さを取得する
    var height = ($("div[widgetname='REPORT2']").height() - 16) + 'px';
    //帳票ブロックの高さをリセット
    $("div[widgetname='REPORT2']").css('height', height);
}, 1000);

```
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266670/8678a3a2-e6f6-348d-6361-e03d506e9373.gif" width=40% alt="ダッシュボード作成8" >

注意を引くためのもう一つの方法は、コンポーネントが十分に息ができるスペースを作ることです。最後に各コンポーネントのサイズと位置を適切に調整しましょう。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266670/9a087b79-4da2-3118-44e1-12e86c5f13f1.png" width=60% alt="ダッシュボード作成7" >

#まとめ
ダッシュボードから見ると、タピオカ店舗は大部のエリアに展開しますが、主に都心、特に渋谷区と新宿区に分布します。明治神宮前、池袋、渋谷、新宿駅の周りに、たくさんのタピオカ店が見つかります。

東京全体と各エリアの人気店には、台湾カフェ**『春水堂』**、**『The Alley』**、**『ゴンチャ』**や**『彩茶房』**などは高く評価されます。一方、日本生まれのタピオカ店は人気度に弱いことが分かりました。（ちなみに、私の一番好きなのは『The Alley』:yum:）

**もっとデータ分析と可視化の実例は↓↓↓**

ECサイト：[業務知識すら知らないとデータ分析をやれないでしょう【連載-1】](https://qiita.com/Hailee/items/d200ec744a18e46f4603)

小売業：[データ分析をやっても無駄？実例から見る本当のデータ分析～【連載-1】](https://qiita.com/Hailee/items/f6c40ee0cb789e12f36a)

*    *    *

ツイッターでデータ分析・可視化、仕事のスキルについての面白い情報をシェアしています。よかたっら覗いてください！:sparkles:
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">【チートシート】データ可視化のコア原則(レポート・報告書作成でも同じ！)｜Kanakana <a href="https://twitter.com/HaileeKana?ref_src=twsrc%5Etfw">@HaileeKana</a> <a href="https://twitter.com/hashtag/note?src=hash&amp;ref_src=twsrc%5Etfw">#note</a> <a href="https://twitter.com/hashtag/%E3%81%93%E3%82%8C%E3%81%8B%E3%82%89%E3%81%AE%E4%BB%95%E4%BA%8B%E8%A1%93?src=hash&amp;ref_src=twsrc%5Etfw">#これからの仕事術</a> <a href="https://t.co/KJDAAAEbIq">https://t.co/KJDAAAEbIq</a></p>&mdash; HaileeKana (@HaileeKana) <a href="https://twitter.com/HaileeKana/status/1281396812700479488?ref_src=twsrc%5Etfw">July 10, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>