【超簡単～】10分間でPython＋FineReportで地震ヒートマップを作成


前回は[Excelでハリケーンの進路を可視化](https://qiita.com/keisuuuuke/items/1f614484ac27fbc3faae)でアメリカ2017年の超大型ハリケーン「イルマ」の進路を、Excelで描きました。Excelは簡単なグラフの作成がいいですが、複雑なタイプとなると手順の数が多いです。

今回はPythonでWebスクレイピングして、抽出した地震データをFineReportでヒートマップに作成します。10分間ぐらいかかって、超簡単だと思います。

（[FineReport](http://www.finereport.com/jp/?utm_source=Qiita&utm_medium=media&utm_campaign=heatmap&utm_term=fr_top1)は[【2019年】データ分析・可視化に本気でおすすめのツール30選（ノーコード型ツール含め）](https://qiita.com/keisuuuuke/items/e7b5cc6a5db04f2c8d5c)に紹介したものです。）


では、はじめます。


##Pythonでスクレイピング
###1.環境構築
ここは[Anaconda](https://www.anaconda.com/)でPythonの環境を構築しました。具体的なインストール方法は調べるといろいろありますので、ここは省きします。

(Qiitaの記事[Anaconda で Python 環境をインストールする](https://qiita.com/t2y/items/2a3eb58103e85d8064b6)をご参考にしてもいいです。)

AnacondaでPython をインストールした場合、Jupyter Notebook が Python と同時にインストールされています。コマンドプロンプトでJupyter Notebook を起動します。
![0401.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/322606/269a69a9-c146-0585-ac42-7bb052fe9b61.png)


###2.ライブラリ導入
Jupyter Notebookのホームページで「New」ボタン ⇒「Python3」を選択し、ノートブックを作成します。
![0402.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/322606/b0ed5264-55f5-dc77-1636-af77b6365baa.png)

requests、Beautifulsoap4、pandasをインポートします。
![0403.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/322606/53532ec2-8722-9bdb-683e-d7852935be21.png)

__requests__：HTTPリクエストを作成する
__BeautifulSoup__：htmlファイルから目的のデータを抽出する
__pandas__：データ操作によく用いられるパッケージ。ここでは抽出したデータをCSVへのエクスポートのために使う

###3.Webスクレイピング

下記のURLから、USGS（アメリカ地質調査所）の提供した世界中の地震データ（1999～2019年）をスクレイピングします。アメリカ地質調査所はアメリカ内に重点を置くので、アメリカ以外の国の場合、規模が大きな地震のみを含みます。

[http://ditu.92cha.com/dizhen.php?page=1&dizhen_ly=usa&dizhen_zjs=1&dizhen_zje=10&dizhen_riqis=1999-07-11&dizhen_riqie=2019-07-11](http://ditu.92cha.com/dizhen.php?page=1&dizhen_ly=usa&dizhen_zjs=1&dizhen_zje=10&dizhen_riqis=1999-07-11&dizhen_riqie=2019-07-11)

BeautifulSoupを使い地震データを抽出します。

```python

#htmlからページ1～3のデータを抽出する
for i in range(1,3):
url = 'http://ditu.92cha.com/dizhen.php?page={}&dizhen_ly=usa&dizhen_zjs=1&dizhen_zje=10&dizhen_riqis=1999-07-11&dizhen_riqie=2019-07-11'.format(i)  
page = requests.get(url)
soup = BeautifulSoap(page.content,'lxml')
tb = soup.find_all('td',class_='text-center')
for i in tb:
b.append(i.string)
```

データを区切って列名を指定し、Excelファイルに出力します。

```python

i in range(0,len(b),5):
   sj.append(b(i))

dataframe = pd.DataFrame({'time':sj,'magnitude':zj,'longitude':jd,'latitude':wd,'depth':sd})

dataframe.to _excel("test.xls",index=False,sep!=',')


```
出力したデータは以下の通り：
![0405.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/322606/cde5b9a6-46fb-b996-b3ff-e63253dea086.png)


##FineReportで地震ヒートマップを作成

###1.Excelデータをインポート
FineReportを[公式サイト](http://www.finereport.com/jp/?utm_source=Qiita&utm_medium=media&utm_campaign=heatmap&utm_term=site_top1)からダウンロードし、インストールします。（個人体験版の試用期限が無制限。インストール方法が申し込み後のダウンロード画面にあるので、ここでは省きます。）
![0406.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/322606/00cae36a-11f8-0027-857f-338f6caa89d3.png)

ExcelファイルをFineReportのインストール先__C:\FineReport_10.0\webapps\webroot\WEB-INF\reportlets__に置きます。

FineReportデザイナを開くと、左上のテンプレート一覧に先のExcelファイルがあります。
![0407.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/322606/74cf21c1-ccae-3150-4967-f89b68309595.png)

これからデータセットを作ります。
データセットパネルで「ファイルデータセット」を選択します。

![0408.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/322606/4020f41d-0fd5-b890-969c-65272a9522eb.png)

以下に示すように、Excelファイルからデータセットを作成します。

![0416.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/322606/357de1aa-49d3-2f60-0089-0ab93fe9ca81.png)


プレビューして、データセットは以下の通り：
![0409.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/322606/8f2e7346-f32b-0225-c603-3e47a477ae11.png)

###2.ヒートマップを作成
ダッシュボードを新規作成し、ツールバーからヒートマップを追加します。
![0410.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/322606/0ce6eefe-f9da-366c-a06b-5bf7293b3fa1.png)

「編集」ボタンをクリックし、右側に地図のポイントとGISレイヤを設定します。
![0411.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/322606/cee78340-bf6f-ff1e-6726-825ccac1f717.png)


「データ」で地図のデータを設定します。
データソースは上記のデータセットを選択し、経度、緯度、エリア名、系列を以下のように設定します。
![0412.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/322606/5bfda9a3-e02f-e86b-34af-78a0ac6209b0.png)

ここまでヒートマップの作成がほぼ終わりましたが、見た目をきれいにするために、スタイルも調整します。

凡例は既定でグラデーションとなりますが、場合によって最大値、最小値などを変更できます。
![0413.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/322606/9dd277db-2ccf-8ed8-e3c3-2bf6f7293555.png)

では、完了したヒートマップを以下に示します。
![0414.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/322606/f3c06d91-829d-37bc-5f2a-ab05bb3df89e.png)


また、拡張グラフの地球を選択し、上記のように設定すれば、以下の効果が出できます。かっこいいじゃないか？
![0415.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/322606/c58e041f-bc3a-4366-6b50-898d701ae39d.gif)
![图片.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/322606/b7c100e4-656d-68d3-ddcb-5016774d9782.png)


以上です。

ぜひやってみてください！



[【2019年】データ分析・可視化に本気でおすすめのツール30選（ノーコード型ツール含め）](https://qiita.com/keisuuuuke/items/e7b5cc6a5db04f2c8d5c)で紹介したほかのツールも使いやすいですし、必要によって利用してみてください！