3
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

csv データをIoT Analyticsに入れてQuickSightで可視化 (東京の天気)

Last updated at Posted at 2019-05-28

やりたいこと

IoT Analyticsでは、AWS IoT Coreで取得したデータ以外に、BatchPutMessage を使って、データを取り込むことができます。
「実運用ではIoT Coreからのデータを解析したいが、すでにある過去のCSVデータを取り込んで、どういった可視化や解析が可能かを試してみたい」といったときに使えます。
今回、気象庁から東京の天気をCSVで取得して、それをQuickSightで可視化することを試します。
https://docs.aws.amazon.com/iotanalytics/latest/APIReference/API_BatchPutMessage.html

元データを入手

今回は、気象庁の過去の気象データを取得
https://www.data.jma.go.jp/gmd/risk/obsdl/
Screenshot 2019-05-27 23.06.12.png
東京にチェックを入れる
image.png
日別の平均気温
image.png
30年分ゲット

image.png
CSVをダウンロード。

image.png

sjisのようです。
image.png

IoT Analyticsにデータを送る

Channel、Pipeline、Data Storeを作る

今回は入力データをそのまま使うので、Pipelineでは特に処理を行わない。
image.png

image.png
Channel ID: tokyo_temperature

image.png
Create Channel を押す

image.png

チャネルからパイプラインを作成。
image.png

image.png

Attribute をセットする。次のアクティビティはそのまま。

image.png

tokyo_temperature_store というData store nameにして、Create。

データのPost

手元のPCで以下を実行します。

import csv
import json
import datetime
import boto3

channelName = "tokyo_temperature"
with open('data.csv', encoding='shift_jis') as csvfile:
    reader = csv.reader(csvfile)
    messages = []
    for row in reader:
        if len(row) > 3:
            format_str = '%Y/%m/%d'
            try:
                date = datetime.datetime.strptime(row[0], format_str)
                temperature = row[1]
                blob = {
                        "date": date.isoformat(),
                        "temperature": float(row[1])
                    }
                obj = {
                    "messageId": date.strftime("%Y-%m-%d"),
                    "payload": json.dumps(blob).encode()
                }
                messages.append(obj)
            except:
                continue

    client = boto3.client('iotanalytics', region_name='us-east-1')
    i = 0
    while i < len(messages):
        client.batch_put_message(
            channelName=channelName,
            messages=messages[i:i+99]
        )
        i += 100


payloadのサイズ上限があるため、100個ずつ分割して送っています。
また、region_name は適宜変更が必要です。

image.png

IoT AnalyticsのChannelを見ると、メッセージが受信出来ていることが分かります。

データの可視化

image.png

Create a data set を押す。

image.png
データストアからデータセットを作ります。今回はすべてのデータを使ってデータ・セットを作ります。

image.png
IDは、tokyo_temperature_dataset という名前にしました。
source は、先程作ったものを選びます。

image.png

すべてを取得するので、クエリはそのまま。残りの項目はすべてデフォルトのままで、Data setを作ります。

image.png

出来たデータ・セットを選択し、Action⇨Run nowを押します。
image.png
しばらく待ってからContentを押すと、作成されたデータセットがプレビューできます。

データを可視化する

作成したデータ・セットをQuickSightにそのままインポートします。
image.png

サービスからQuickSightを選択。
image.png

image.png

Standardを選択。

image.png
任意のアカウント名、メアドを入力し、AWS IoT AnalyticsにチェックをいれてFinish。

QuickSightにて、New Analysis⇨New data set⇨IoT Analyticsを選択。

image.png

作成済みのData source nameを選んで、Visualize.

image.png

date, temperature を選択するとグラフが表示されました。

image.png

Visual typesから、棒グラフを選んで、X axisに date(YEAR)をセット、ValueにTemperature(Average)をセットし、30年間の年平均を出してみました。大きな気温変化は無いですね。。

3
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?