この記事は、データサイエンティストでDelphi開発者のMax Kleiner氏の投稿です。彼は、Maxboxの作者であり、このツールを自身のサイトで「コンパイル済みオブジェクトをベースとしたスクリプトツール」と紹介しています。記事では、RAD Studio / Delphiを用いてWindowsソフトウェアを開発し、HTTPリクエストによって取得したJSONオブジェクトを使って、集積ガス貯蔵施設の貯蔵量データをグラフやチャートで可視化する方法を説明しています。
Table of Contents
貯蔵ガスのデータをAGSIデータセットのタイムラインとして可視化
「データサイエンティストにはさまざまな種類がある。その中で最高なのはデータに取り組む人だ。」
このデータサイエンスチュートリアルでは、AGISと呼ばれるデータストレージとタイムラインでの可視化について説明しています。AGISは、Aggregated Gas Storage Inventoryの略で、集積ガス貯蔵施設の貯蔵量のデータです。データプロバイダーから新しいサービスが発表されたり更新があり、Webサイトにその情報が掲載されるたびに、そのデータを最新に保つことが可能になります。
GIE(Gas Infrastructure Europe)は、Storage MapやStorage Investment Databaseといった関連情報も、https://www.gie.eu/publications/maps/ で提供しています。
データチャート(グラフ)の表示
タイムラインデータを可視化したグラフは、以下のようになります。
データのダウンロードとグラフ作成に使用したコンポーネント
このツールでは、WinHttp.WinHttpRequest、JSONObjects、そしてTEEChartsライブラリを使用して、プロットのロードとテストを行っています。APIキーも必要になるため、以下のサイトからあらかじめ入手しておきます。
データが表現するもの
取得するデータは、日ごとのガス貯蔵量を表します。データは毎日、19:30と23:00(中央ヨーロッパ時間)に更新されます。コードの詳細を説明する前に、スクリプトの主要な部分を以下に示します。
[crayon-674051b7b237c337886700/]コード概要
コードのメイン部分では、フォームを生成し、API呼び出しとデータのプロットを行っています。
GIEでは、AGSIおよびALSI Transparency Publication Platformsで、API(Application Programming Interface)サービスを提供しています。
APIアクセスを用いれば、ユーザーはAGSIおよびALSIのWebサイトをバイパスして、データを直接かつ継続的に取得できます。Webサイトから各データセットを個別にダウンロードすることなく、必要に応じてデータ抽出、フィルタリング、集計、サブセット生成が可能になります。APIのデータエクスポートフォーマットは、JSONです。以下は、150日分のサブセットデータです。
グラフに描画するデータ
公開されているデータセットは、ACERに提供されているEICコードマッピングテーブルをベースとしています。ストレージデータは、国別、会社別に集計されます。
API呼び出しでは、国、開始日、日数を指定します。
[crayon-674051b7b2384793917875/]データセットは、Excel、CSV,JSON形式でもダウンロードできます。このレポートでは、集計ビューを表示していますが、会社ごと、貯蔵施設ごとの個別データセットにもアクセスできます。
データ取得のためのAPI呼び出し
では、API呼び出しの方法から紹介します。
[crayon-674051b7b2386863618681/]このコマンドにより、WinHttp.WinHttpRequest
を実行します。失敗すると、以下のような例外が複数生成されます。
面白いのは、例外がJSON形式になっている点です。
Be careful, also, to expose your key as I get from Git: GitGuardian has detected the following Google API Key exposed within your GitHub account.
APIでJSONデータを取得する
Next is the formatting of the get-call with a valid API-key request in the function energyStream()
関数で、有効なAPIキーリクエストを使用してGET呼び出しを書式化します。
ところで、content-typeはどこで設定するのでしょうか。私の知る限り、content-typeを設定する箇所は、Webリクエストの2箇所のみです。
- クライアントが、サーバーに送信するbodyに対して、content-typeを設定(つまり、GETまたはPOSTで設定)
- サーバーが、レスポンスに対してcontent-typeを設定
利用可能なContent-Typeを明示する
ペイロードボディを含むメッセージを生成する送信元は、そのcontent-typeが不明でない限り、Content-Type
ヘッダフィールドを生成する必要があります。それ以外の場合、503503 - Service Unavailable
という応答で取得に失敗します。
つまり、content-type HTTPヘッダは、PUTおよびPOSTでのみ設定する必要があるということです。GETリクエストでは、クライアントが理解できるコンテンツタイプを示す「Accept」ヘッダを含めることができます。サーバーは、この情報を用いて、返信するコンテンツ タイプを決定できます。
オプションで、TALWinInetHttpClient
を用いることもできます。これは、使いやすいWinInetベースのプロトコルで、HTTPSをサポートしています。このHTTPクライアントコンポーネントは、HTTPプロトコルを介してWebでデータの送信および取得ができます。
JSONレスポンスをグラフで使用できるデータに変換する
AGSIでは、欠落したデータも不完全なデータも表示されます。次に行うのは、取得したJSONデータをTJSONObject
を使って、プロット用に変換することです。
関数の戻り値として取得できるこのJSON配列を、次のプロット処理に渡します。
[crayon-674051b7b2392396827929/]グラフの系列に含まれるデータ
グラフには、4つのデータ系列をプロットします(タイムラインを含む)。
- 注入量(ガス日あたり)
- 充足率 – Storage / WGV(in%)
- 放出量(ガス日あたり – 2桁精度)
- ガス日(レポートの開始ガス日)
時系列は、ガス日単位です。
「ガス日」とは、 UTCで5:00~5:00(夏時間では、4:00~4:00)を意味します。ガス日は、ヨーロッパ中央時間(CET)の場合、UTC+1、夏時間(CEST)の場合UTC+2となります(定義: CAM Network Code Specificationsを参照)。
データ取得用APIにアクセスする方法
APIアクセスは、RESTライクなインターフェイス (Representational State Transfer) で提供され、上述したレスポンスヘッダにcontent-typeを含む、JSON形式でデータベースリソースを公開しています。
他言語向けのデータアクセス方法
データサイエンスビジョンのコードには、使用例を示すサンプルが添付されており、Python3、Delphi、Jupyter-Notebook、Object Pascal、maXbox4で使用できます。なお、このAPIサービスは無料公開されています。このプラットフォーム上で現在利用可能なデータのみにアクセスできます。
メモ:システムから直接データを抽出するには、ブラウザで以下のリンクを直接クリックしてください。
https://agsi.gie.eu/api?type=eu
GIEデータAPIに関する情報
GIEでは、AGSIおよびAGSI+ストレージデータに関するAPI(Application Programming Interface)サービスを提供しています。APIドキュメントの作成は進行中であり、サービスの使用方法に関するサンプルやガイダンスも提供しており、APIキーを取得するための登録を行うと利用できます。以下は、過去半年のデータプロットです。
サンプルスクリプト/コードの入手先
スクリプトと画像は、https://github.com/maxkleiner/agsi-dataからダウンロードできます。
ダウンロードコードのサンプル
以下は、maXbox4統合用のWinAPIDownloadクラスからの抜粋です。
[crayon-674051b7b2394175309398/]参考文献とリンク
- https://agsi.gie.eu/api
- https://www.gie.eu/transparency-platform/GIE_API_documentation_v006.pdf
- https://svn.code.sf.net/p/alcinoe/code/demos/ALWinInetHTTPClient/_source/Unit1.pas
- https://docwiki.embarcadero.com/Libraries/Sydney/en/System.Net.HttpClient.THTTPClient.Post
- ドキュメントとツール: https://maxbox4.wordpress.com (Script Ref: 1154_energy_api_agsi_plot14.txt)