AI開発にPISystem上のデータを活用

時系列データ用のデータベースをAI開発に利用

PI Systemはデータベースなどのソフトウェアの集まりであり, 電力などの時系列データを様々なソースから高い信頼性の元で収集、分析、可視化、共有することが可能です。

PI Systemによって収集したデータは分析、可視化、共有といったことが可能になります。

このチュートリアルでは、PI Systemに収集されているデータをどのようにしてpythonプログラム上に呼び出せるか、そしてReNomにより分析した予測結果をどのようにしてPI Systemデータベースに挿入するかを説明します。

環境構築

PI Systemが利用可能な環境を下記urlに従って構築してください。

https://pisquare.osisoft.com/community/all-things-pi/japanese/japanpidevelopersclubkaihatsu

加えて、以下の設定も行なってください。

  1. PI Systemに関して

    • 予測データを挿入するために、未来のデータを挿入可能なPI POINTを作成してください。

    https://www.youtube.com/watch?v=yb-78aKiNm4

    • CSRF対策のためにHTTPアクセスを拒否しないようPI Web APIサーバを設定してください。
    • PI Web APIサーバがHTTP POSTリクエストを受け付けるように設定してください。
    • データ挿入予定の属性には更新可能な権限を割り当ててください。
  2. WindowsServerに関して

    • 外部からのHTTPアクセスを許可するようにポートを解放します。
    • Basic認証のために、windowsアカウントが必要になります。

接続設定

必要なライブラリをインポートします。

In [ ]:
import numpy as np
import pandas as pd
import renom as rm
from pi_interface.interface import PIInterface

PI Web APIサーバのIPアドレスとBasic認証のための認証情報を設定します。

In [ ]:
host = 'https://path-to-server.com/piwebapi'
username = 'username'
password = 'password'
In [ ]:
client = PIInterface(host, username, password) # create instance for connection

データ取得

データを取得したい属性のパス情報を設定します。この例では、7日前から現在までのデータを取得します。

In [ ]:
get_params = {
    "assetserver": "assetserver",
    "database":  'database',
    "elements": ["element", "child_element"],
    "attributes": ["attribute", "child_attribute"],
    "start": "*-7d",
    "end": "*"
}

パラメータの意味は以下のようになります。

  • assetserver: アセットサーバ名
  • database: データベース名
  • elements: 要素名。もし、親子関係が存在する場合には、親の属性から記載してください。
  • attributes: 属性名。もし、親子関係が存在する場合には、親の属性から記載してください。
  • start: データの取得開始日時
  • end: データの取得終了日時

属性の値を取得すします。

In [ ]:
get_df = client.get_values(**get_params)
In [14]:
get_df.head()
Out[14]:
Value
Timestamp
2018-05-15T02:52:15Z {'IsSystem': True, 'Name': 'No Data', 'Value':...
2018-05-15T02:42:55Z 99.4454
2018-05-15T01:36:25Z 87.2786
2018-05-14T15:59:17Z {'IsSystem': True, 'Name': 'Shutdown', 'Value'...
2018-05-14T14:39:02Z 99.1653

データの挿入

PI Systemアセットサーバに挿入するための仮のデータを作成します。

PI Systemのアセットデータベースのインデックスは、データフレームのdatetimeindexと一致します。

In [ ]:
insert_df = pd.DataFrame([10, 11, 12, 13, 14], index=['20180520', '20180521', '20180522', '20180523', '20180524'])

データを挿入しようとしている属性のパス情報を指定してください。

In [ ]:
insert_params = {
    "assetserver": "assetserver",
    "database":  'database',
    "elements": ["element", "child_element"],
    "attributes": ["attribute", "focust"]
}

パラメータの意味は以下のようになります。

  • assetserver: アセットサーバ名
  • database: データベース名
  • elements: 要素名。もし、親子関係が存在する場合には、親の属性から記載してください。
  • attributes: 属性名。もし、親子関係が存在する場合には、親の属性から記載してください。
In [ ]:
response = client.update_values(insert_df, **insert_params)

もしデータの挿入が成功しましたら、HTTPステータスコード202が返ってきます。

In [22]:
print(response)
Out[22]:
({'items': None, 'links': None},
 202,
 HTTPHeaderDict({'Server': 'Microsoft-HTTPAPI/2.0', 'X-Frame-Options': 'SAMEORIGIN', 'Content-Length': '0', 'Date': 'Tue, 15 May 2018 02:57:34 GMT'}))