データ分析を行うには、まず始めに有益なデータを取得し、そのデータを分析しやすくしたり、第三者に説明したりするために、グラフにして視覚化することが必要となります。
ここでは、プログラミング未経験者でも比較的簡単にデータの取得から視覚化を行うことができるPythonを使って、気象データを取得して取得したデータをグラフにする実例を示します。
気象データを使ったデータ分析は、商品の売上予測、再生エネルギーの電力予測、農作物の収穫高予測などで様々な分野で行われています。
Pythonを使うには
Anacondaを使うとPython本体だけでなくデータ分析に必要なライブラリーもインストールできます。Anacondaのダウンロード方法は、機械学習を用いた画像分類の記事内で説明しています。をご覧ください。Anaconda公式ページはこちらです。
気象データの取得
ここでは、Pythonライブラリのrequestsを使って簡単に気象データを入手できるPlanet OSを紹介します。
Planet OS
Planet OSは世界各地の気象データが集積されており、RESTful APIが提供されています。
Planet OSからデータを取得するには、アカウントの設定が必要です。名前とE-mailアドレスを入力するだけでアカウントの設定ができます。
アカウントを設定すると、データの取得に必要なAPIキーが割り当てられます。以下の制限において無料でデータを入手できます。
- 1日に100回までのAPIコール
- 1ヶ月に5GBまでのデータ転送
Pythonで以下のコードを実行すると、東京付近の気温の予測データを取得できます。
import requests # “noaa_gfs_global_sflux_0.12d”は気象データのID url = "http://api.planetos.com/v1/datasets/noaa_gfs_global_sflux_0.12d/point" querystring = { "lat":"35.70", # 緯度 "lon":"139.80" # 経度, "var":"Temperature_surface", # 温度 "count":"500", # データ取得数 "apikey":"xxxx" # xxxxはアカウント設定で取得したAPIキー } response = requests.request( “GET”, url, params=querystring )
以下のJSON形式のデータが取得できます。
{ "stats": { "offset": 0, "count": 500, "timeMin": "2017-12-23T12:00:00", "timeMax": "2018-01-08T12:00:00" }, "entries": [{ "context": "reftime_time_lat_lon", "classifiers": { "reference_time": "2017-12-23T12:00:00.000Z" }, "axes": { "reftime": "2017-12-23T12:00:00", "time": "2017-12-23T12:00:00", "latitude": 35.67197799682617, "longitude": 139.8046875 }, "data": { "Temperature_surface": 282.5 } }, { ・・・
データの視覚化
上記で取得した気象データをPythonのpandasライブラリのプロット機能を使ってグラフにします。
最初にデータをpandasで扱えるようDataFrame形式に変換します。
1. JSON形式のデータをPythonで扱いやすくするために辞書型に変換します。
Import json data = json.loads( response.text )
2. 階層化されているJSON形式のデータを正規化(階層化されていない状態に)します。
from pandas.io.json import json_normalize entry_data = json_normalize( data['entries'] )
正規化を行うと以下のように階層化されていない平坦なデータとなり、pandasのDataFrameに変換できます。
axes.latitude | axes.longitude | axes.time | ・・・ | data.Temperature_surface |
35.67197799682617 | 139.8046875 | 2017-12-23T12:00:00 | ・・・ | 282.5 |
・・・ | ・・・ | ・・・ | ・・・ | ・・・ |
3. pandasのDataFrame形式に変換します。
import pandas as pd df = pd.DataFrame( entry_data )
DataFrame形式にしたデータはpandasのプロット機能を使って簡単にグラフ化できます。
横軸を時間、縦軸を気温のグラフを作成します。
1. データ取得時の時間データをdatetime64形式に変換します。
df['axes.time'] = pd.to_datetime(df['axes.time'])
2. 気温データを絶対温度から摂氏に変換します。
i = 0 for temp in df['data.Temperature_surface']: temp = temp - 273.15 df.loc[i, ['data.Temperature_surface']] = temp i = i + 1
3. DataFrame形式のデータをグラフにプロットして画像ファイル「weather.png」に保存します。
df.plot( x='axes.time', y='data.Temperature_surface', figsize=(16,4) ) plt.savefig( “weather.png” )
【参考文献】
・Planet OS(https://planetos.com/)の「Product Guide」
・「PythonとJavaScriptではじめるデータビジュアライゼーション」Kyran Dale著
あなたも、Avintonでこのような最先端技術を習得し活用してみませんか?
社員の成長を導きながら、AIやビッグデータなどの最先端技術をプロジェクトに活用していくことが私たちのビジョンです。Avintonの充実した技術研修でスキルアップを図り、あなたのキャリア目標を一緒に達成しませんか?