2022年5月16日月曜日

データセットの欠損値・重複値の探索を行う GAS ライブラリを作成・公開しました

スプレッドシートのデータセットの中から欠損値や重複値の探索をする GAS ライブラリを作成、実験的に公開してみました。

例えば、IoT で気温・湿度等のデータを取得した際に、データがうまく取れないタイミングがあったり、逆に二重で取れてしまったりということがそれなりの頻度で起こります。そうしたデータセットにおける欠損値や重複値の探索をするライブラリになります。

大した処理でもないのですが、万単位の行をチェックするとなると便利です(何行まで正常に作動するかは未確認、1〜2万行程度までは動きました)。

もともと自分用に作ったものなので、現状では使用パターンも限られますが、今後もバージョンアップはしていこうと思っています。


スクリプト ID:

1sJCHsjsWlWEJwK9ficycEa9PBCA92P_OI0fgQO1wgm858rQGw7eOqlBO


ライブラリの追加方法:

  1. ライブラリの追加から上記スクリプト ID を入力して「検索」を押下
  2. バージョンを選択、任意の ID を指定して「追加」を押下

バージョンは最新のもの、もしくは「HEAD(開発モード)」を指定してください。

「HEAD(開発モード)」であれば常に最新の状態が維持されますが、バージョンに反映前の変更も加わりますので、予期せぬ不具合が発生する可能性があります(まぁ、最新バージョンでもありますが)。


使い方:

スクリプトの実行方法は、

ライブラリの追加の際に指定した任意の ID.searchData(スプレッドシート ID, シート名, データ型("number" or "date" で指定), 探索スタート行番号, 探索列番号, 上限値, 下限値)

となります。

現状、縦方向の探索のみ可能です。

上下の行の値を比較して上限値を上回る(変動幅 > 上限値)場合は欠損値、下限値の下回る(変動幅 < 下限値)場合は重複値として扱います。望ましい上下の行の値の差が一意の場合は、上限値と下限値を一致させます。

データ型が日時("date")の場合、上限値及び下限値はミリ秒で指定します。1分は 60000、 1時間は 3600000、1日は 86400000 となります。

リファレンスはこちら


例えば、こんな感じのデータセットに対して、



こんな感じでライブラリを使いますと、

function myFunction() {
  const spId = "スプレッドシート ID";
  const shName1 = "シート名1(データセット)";
  const shName2 = "シート名2(結果入力)";

  let result = test.searchData(spId, shName1, "number", 3, 1, 2, 1);

  const sp = SpreadsheetApp.openById(spId);
  const sh = sp.getSheetByName(shName2);
  sh.getRange(1,1, result.length, 3).setValues(result);
}


こんな感じでログが表示されます。



戻り値は、(ログと同様の)結果の2次元配列になりますのでスプレッドシートに書き出すことも可能です。行数は、結果によって変動しますので 戻り値.length で指定します。



本ライブラリに関する今後の更新は cultivationdata.net で行います。 → note に引っ越しました。


***

何度も使う同じような処理はライブラリでまとめていった方が楽だということに今さらながらに気がつきました。

特に汎用性の高そうなものについては、せっかくなので公開して(自分にプレッシャーをかけて笑)いこうと思います。


・関連投稿