5. チュートリアル1D: APIを使ってCSVファイルのアップロードを自動化してみよう

これまでのチュートリアルでは、CSVファイルをアップロードする際、ウェブブラウザーでアップロード用のページを開き、1ファイルずつアップロードしました。 しかし、手元にいくつものCSVファイルがある場合には、1ファイルずつ手動でアップロードするのは手間がかかります。 チュートリアル1Dではこのようなケースを想定して、APIを用いたアップロードスクリプトを作成し、アップロードを自動化します。

注釈

ここで紹介するスクリプトはCSVファイル用ですが、 intdash APIを使用することによりJSONや画像など、様々な形式のデータをintdashにアップロードすることもできます。

5.1. アップロードするCSVファイルを確認する

まず、サンプルとして使用するCSVファイルを こちら からダウンロードして、適当な場所に解凍してください。 以降では、サンプルのCSVファイルが格納されたzipファイルを ./csv/ ディレクトリに解凍したとして解説します。

ZIPファイルには3つのCSVファイルが格納されており、 その仕様は サンプルCSVファイルの内容 と同様です。

第1行に記載されている名称をデータの名称として使用します。

5.2. CSVファイルをアップロードする

5.2.1. APIアクセス用の設定情報を設定する

本手順は、チュートリアル1Cの APIアクセス用の設定情報を設定する と同様です。

5.2.2. データのアップロードに使用するエッジを取得する

CSVファイルをアップロードする際に使用するエッジの情報を取得します。 アップロードしたデータは、このエッジのデータとしてintdashサーバーに登録されます。

本手順は、チュートリアル1Cの CSVアップロードに使用したエッジの情報を取得する と同様です。

以降の説明では、 edge1 という名前を持つエッジを使用します。

5.2.3. アップロードするCSVファイルを読み込む

zipファイルを解凍して得られたCSVファイルを pandas.DataFrame として読み込みます。

import pandas as pd
import glob

csv_files = glob.glob('./csv/*')

dfs = []

for csv_path in csv_files:
    df = pd.read_csv(csv_path, index_col=0).groupby("time").last()
    dfs.append(df)

5.2.4. 1つのCSVファイルごとに計測を作成し、データを登録する

ここからは、CSVファイル1つ1つに対する処理について解説します。 ここで解説される処理を繰り返すことで、複数のCSVファイルを順次アップロードできます。

まず、CSVファイルから読み込んだ pandas.DataFrame の1つを取り出します。

df = dfs.pop(0)

データの最初の時刻を基準時刻(base_time、計測の開始時刻)として、計測を作成します。 その後、作成した計測に対して、データポイントを追加します。

本手順は、チュートリアル1Cの 加工済みのデータをintdashにアップロードする と同様です。 df_converted の代わりに、先程得られた df を使用し、以下のように実行してください(チュートリアル1Cで定義した関数を使っています)。

base_time = pd.Timestamp(df.index[0])
new_meas = create_measurement(edge1["edge_uuid"], base_time)
store_data_points(new_meas["uuid"], df)
complete_measurement(new_meas["uuid"])

5.2.5. 複数のCSVファイルをに対して、上記処理を繰り返す

前述の1ファイルごとの処理を、全てのファイルに対して繰り返すことで、複数のCSVファイルアップロードを自動化できます。

for df in dfs:
    ... 前述のアップロード処理 ...