KeiSuuuuke

データエンジニアとして、データビジュアライゼーションの実践と普及に関する活動に熱中している。

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

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

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

では、はじめます。

 

Pythonスクレイピング

1.環境構築

ここはAnacondaPythonの環境を構築しました。具体的なインストール方法は調べるといろいろありますので、ここは省きします。

(Qiitaの記事Anaconda で Python 環境をインストールするをご参考にしてもいいです。)

AnacondaでPython をインストールした場合、Jupyter Notebook が Python と同時にインストールされています。コマンドプロンプトでJupyter Notebook を起動します。


0401.png

2.ライブラリ導入

Jupyter Notebookのホームページで「New」ボタン ⇒「Python3」を選択し、ノートブックを作成します。

0402.png

requests、Beautifulsoap4、pandasをインポートします。

Python


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

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!=',') ||<

 

出力したデータは以下の通り:

 

 

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

1.Excelデータをインポート

FineReportを公式サイトからダウンロードし、インストールします。(個人体験版の試用期限が無制限。インストール方法が申し込み後のダウンロード画面にあるので、ここでは省きます。)

FineReportダウンロード

 

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

FineReportデザイナを開くと、左上のテンプレート一覧に先のExcelファイルがあります。

FineReportデザイナ

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

 

FineReportファイルデータセット

 

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

プレビューして、データセットは以下の通り:

FineReportデータセット

 

2.ヒートマップを作成

ダッシュボードを新規作成し、ツールバーからヒートマップを追加します。

 

FineReportダッシュボードモード

 

「編集」ボタンをクリックし、右側に地図のポイントとGISレイヤを設定します。

 

FineReport地図



「データ」で地図のデータを設定します。


データソースは上記のデータセットを選択し、経度、緯度、エリア名、系列を以下のように設定します。

FineReportグラフ設定




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

凡例は既定でグラデーションとなりますが、場合によって最大値、最小値などを変更できます。

FineReportグラフ作成

 

では、完了したヒートマップを以下に示します。

 

FineReportヒートマップ

 

また、拡張グラフの地球を選択し、上記のように設定すれば、以下の効果が出できます。かっこいいじゃないか?

FineReport拡張グラフ




FineReport拡張地図



 

以上です。

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

 

本記事はQiitaにも掲載されました!

qiita.com

 

Excelでハリケーンの進路を可視化

 
この前、人気記事にExcelで路線図を描く - なまずのねどこが出て、Excelがこんな用途に使われるかに驚いた方は多いのではないでしょうか。実際、Excelは想像以上に豊富な機能を持っています。
 
今回はアメリカ2017年の超大型ハリケーン「イルマ」の進路を、Excelで描いて可視化します。

f:id:KeisukeYoshino:20190618215333g:plain

ハリケーン「イルマ」

以下は具体的な手順を説明します。

 

1.データや背景画像の準備

アメリカ-大西洋の地図

アメリカの国立ハリケーンセンターからNHC Blank Tracking Chartsをダウンロード。経度と緯度付きの地図を使わなければいけません。ハリケーンの移動は緯度と経度の列を地理上の点に変換して表すものだから。

f:id:KeisukeYoshino:20190618215450p:plain

アメリカ-大西洋の地図
 
②Hurricane and Tropical Cyclones からハリケーン「アイマ」の経路データをダウンロード。
その中、日時、経度、緯度、風速、気圧などを含めます。

f:id:KeisukeYoshino:20190618215944p:plain

2.データの前処理

①経度、緯度、風速、気圧の単位を削除し、そして日時をExcelで処理しやすいフォーマットに変換します。
 
②「アイマ」の経路データでは、最初は6時間ごとにデータを記録し、それから3時間になります。ここは6時間ごとのデータを利用します。
 
f:id:KeisukeYoshino:20190618215711p:plain

3.バブルチャートを描く

アメリカ-大西洋の地図をExcelで挿入し、それを背景にバブルチャートを描きます。経度、緯度をX軸、Y軸とし、バブルの大きさを風速で表示します。
 
②実際のデータにより、X軸、Y軸の最大値を設定します。地図の経度と緯度の単位は5度なので、バブルチャートのX軸、Y軸の単位を5度にします。
 
アメリカ-大西洋の地図の座標軸と重ねるように、バブルチャートの位置と大きさを調整します。それから、バブルチャートの座標軸を隠します。
 

4.視覚効果

 
ハリケーンの進路を動的に表現するために、コントロール【スライドバー】を用いて、経過時間を制御できます。スライドするたびに6時間が増えていきます。スライドバーとリンクするセルがグラフの左側の表にデータを渡し、対応する緯度、経度と風速、気圧のデータを、時刻のクエリによって取得します。
 
時刻を基づき、グラフの2つのデータソースを生成し、スライドバーによるグラフの制御を実現します。
 
さらに、スライドバーの自動制御、つまりグラフを自動再生させるために、VBAコードを書きます。

f:id:KeisukeYoshino:20190618220249p:plain

 
具体的な手順は以下の通り:
 
VBAで開始と停止を制御する二つのマクロを書きます。
 
②開始、停止、繰り返す、スライドバーを指すコントロールを配置し、以上のマクロを指定します。
 
③スライドバーのコントロールの書式設定で、リンクするセルを左側のセルを指定します。左側のセルは時間の経過に伴いデータを表示します。
 
④データソースを生成する
 
動的な視覚効果を得るには、バブルチャートで2つのデータソースを準備する必要があります。1つは、現在の時刻の前にハリケーンが移動してきたパスを示し、もう1つは、現在の時刻のハリケーンの位置をマークします。
 
LOOKUP関数を使います。
 
現在の時刻の前に、ハリケーンが移動してきたパスのデータ:
=IF($A9<=LOOKUP(map!$C$3,$A$2:$A$55),data!D9,NA())
 

f:id:KeisukeYoshino:20190618220400p:plain



現在の時刻のハリケーンの位置のデータ:
=IF(A9=LOOKUP(map!$C$3,$A$2:$A$55),data!D9,NA())

f:id:KeisukeYoshino:20190618220434p:plain

⑤バブルチャートのデータを選択する
 

f:id:KeisukeYoshino:20190618220532p:plain

 

f:id:KeisukeYoshino:20190618220535p:plain



チャート内のテキストボックスは、セルとリンクすることでポイントのデータを取得します。
 
そのほか、ここで風速を表示する縦棒グラフを挿入しました。データの紐づけはバブルチャートと同じです。

 

これで終わりです。一回Excelデータの可視化をやってみませんか?

f:id:KeisukeYoshino:20190618220634g:plain

 

これから、Qiitaにもデータ可視化についてどんどん書いていこうと思います。目を通してもらえたら嬉しいです

qiita.com