Docly Child

テーブルデータ(二次元配列)にフィルターをかける/並び替える

1323 views

この記事では、ConvertTableアクション(テーブルデータ(二次元配列)を変換)を紹介します。


ConvertTableアクションを使用する場面

主に以下の形で使用します
・スプレッドシートから取得した値やCSV(二次元配列)から、条件を満たす行のみを抽出する
・スクレイピングで取得した値(二次元配列)から任意の列を削除する
・各種広告系アクションで取得した値やCSV(二次元配列)の列順を並べ替える
・CSVやスクレイピングしたテーブルデータから、必要な行のみを抽出し、かつ、不要な列を削除する
・行の順番を昇順/降順で並び替える(ソート)

 ConvertTable(テーブルデータ(二次元配列)を変換)

ConvertTable(テーブルデータ(二次元配列)を変換)アクションでは、二次元配列に対して以下の操作が可能です。

  1. 条件を満たす行のみを抽出する(フィルター)
  2. 行の順番を並び替える(ソート)
  3. 任意の列を削除する
  4. 列順を並び替える
  5. 1~4の操作を組み合わせた操作

この記事では、これらの方法を順に紹介します。

二次元配列をアウトプットするアクションは以下が存在します。
よって、ConvertTableアクションでは、これらのアクションのアウトプットから行抽出/列削除/列順並び替えの操作が可能です。

  • ExtractDataFromTable(テーブルデータを取得)
  • ExtractData(ページからデータを抽出)
  • RunScript(スクリプトを実行, スクリプトの内容次第で二次元配列を出力可能)
  • ConvertTable(このアクション)
  • ConvertJSONToArray(JSONを配列に変換)
  • CompareTable(テーブルを比較する)
  • ReadCSV(CSVを読み込む)
  • スプレッドシート/Excelから値を取得するタイプのアクション(GetRange,GetCells,GetWorksheetCellsなど)
  • GetTwitterAdsReport(returnArrayパラメータをTrueとした場合)
  • GetAppleSearchAdsReport(returnArrayパラメータをTrueとした場合)
  • Marketing系アクション(各種広告のレポート出力系アクション)のアウトプットをConvertJSONToArrayで加工した値

 条件を満たす行を抽出する

以下のケースを想定し、条件を満たす行を抽出する方法を紹介します。

スクレイピングで取得した二次元配列から、2列目が「福井」の情報のみを抽出する

対象Webサイト:「重要伝統的建造物群保存地区一覧」と「各地区の保存・活用の取組み」 | 文化庁

  • OpenBrowser(ブラウザを開く)を設置し、以下URLを入力します
    https://www.bunka.go.jp/seisaku/bunkazai/shokai/hozonchiku/judenken_ichiran.html
  • ExtractDataFromTable(テーブルデータを取得)を設置します
    ※CSSセレクタはデフォルトのままとします
  • ワークフローを実行します(3.フィルターを設定する で紹介する操作をするために、一度ワークフローの実行が必要となります)
 
 
  • ConvertTableアクションを設定します
  • tableパラメータに、ExtarctDataFromtableのアウトプットを指定します
  • transformパラメータの右端にある黒いスパナ状のアイコンをクリックします
  • 表計算シートのビジュアルが表示されたことを確認して、「3. 抽出する条件を設定する」に進みます
    • 表示されない場合は、下の「※ピッカーが使えない場合」のアコーディオンメニューをご参照ください
 

1でワークフローを実行したため、下記画像のような表計算シート状のポップアップが表示されます。
(ワークフローを実行していない場合、この画面は表示されません。)

  • 「都道府県」列のフィルターボタン▼をクリックします。
  • 「条件を選択」をクリックし、「次の値と一致する」を選択します。
  • 「値」に福井と入力します
  • フィルター画面内の緑色のOKをクリックします

  • プレビュー画面に、都道府県列が「福井」の情報のみが抽出されていることを確認します。
  • 問題なければ、OKをクリックします。
  • ワークフローを実行します。

ConvertTableは、デフォルト設定ではヘッダーも出力されます。
ヘッダーを出力したくない場合は、以下画像の設定を実施する必要があります。

  • ヘッダーの有無をfalseにします
  • transformを空欄にします
  • 黒いスパナ状ボタンをクリックします

  • 列インデックス1のフィルターボタンをクリックします
  • 条件を追加します
  • 2つの条件を入力します
    1 次の値と一致しない, 都道府県
    2 次の値と一致する, 福井
  • OKをクリックします

2022年8月現在、ConvertTableで複数の条件式を作成する場合、OR(論理和,いずれかを満たす)の直接指定ができません。 複数の条件を指定すること自体は、「ヘッダーを消去する方法」の通り可能ですが、これらの条件は全てAND(論理積, 全て満たす)と判定されます。 ORを指定する場合は、お手数ですが以下の方法をご検討ください。
  • NAND(否定論理積)で代替する
  • スプレッドシート/ExcelのFilter関数を使用する
  • JavaSciprtを使用する filter()やreduce()など
NAND(否定論理積)について…
例えば、ある列の値がA,B,C,Dの4つのみを取る時、その列の値が「A または Bのどちらかに一致する」というOR条件を設定したい場合は、「Cと一致しない かつ Dと一致しない」といった形(否定論理積)で条件を指定する必要があります。

変換元のテーブルデータがログ画面で以下のように表示されている場合、データ量が多いためピッカー(スパナ状のアイコン)が使用できなくなります。

サイズ上限を超えたため、payloadを表示することができません。

変換元テーブルの範囲を縮小し、ピッカーを選択できるようにしてから、ポップアップ内の設定で範囲を広げる方法をご検討ください。

①表計算ソフトから範囲を指定する場合

GetCellsやReadRange等で取得する範囲の指定を縮小してください。
また、下記②-(a)で紹介している方法も使用できます。

②Web上のテーブルを取得する場合

ExtractDataFromTable等でwebから取得したテーブルデータは任意の範囲を指定できないため、加工が必要になります。以下いずれかの方法で調整をお試しください。

(a)RunScriptで調整する
スクリプトでslice()を使用し、任意の範囲だけを抽出する方法です。
取得したテーブルデータをStoreValueアクションで変数に保存しておきます。
その後、RunScriptアクションで以下のように記述します。

return 変数名.slice(開始位置, 終了位置);

「変数名」には設定した変数をそのまま記載します。
「開始位置, 終了位置」は、インデックス番号で指定します。0始まりの行数になることにご注意ください。

(b)AUTORO Assistantでデータを出力する
拡張機能AUTORO AssistantのExtractData機能を使って任意の範囲を抽出する方法です。
この時点で、データがサイズ上限を超えないよう調整して抽出します。また、出力形式はcsvとご設定ください(デフォルトでcsvになっています)。


詳しい設定方法はAUTORO Assistantでデータを抽出の記事をご参照ください。

# ブラウザを開く
+open_browser_1:
  action>: OpenBrowser
  url: 'https://www.bunka.go.jp/seisaku/bunkazai/shokai/hozonchiku/judenken_ichiran.html'
  lang: 'ja-JP'
  headless: true
  useShadowDomSelector: false

# テーブルデータを取得
+extract_data_from_table_1:
  action>: ExtractDataFromTable
  browser: +open_browser_1
  selector: table
  ignoreError: true

# テーブルデータ(二次元配列)を変換
+convert_table_1:
  action>: ConvertTable
  header: true
  table: +extract_data_from_table_1
  transform: [{"type":"filter","column":"都道府県","operator":"==","operand":"福井","include_blank":false}]

 行順を並び替える(昇順・降順)

※デスクトップ版では使用できません。

行の順番を並び替える方法を紹介します。

以下のサンプルCSVを使用して、2列目(年月日)を昇順で並び替える例を紹介します。

・サンプルCSV

まずは上述のCSVを取得します。

  •  DownloadFileアクションを設定します
    • URL欄に以下を指定します
      https://support.autoro.io/wp-content/uploads/2023/11/sample_Le_Corbusier.csv
  • ReadCSVアクションを設定します
    • ファイル名欄には、DownloadFileのアウトプットを指定します。
  • この状態でワークフローを実行します

 

  • ConvertTableを設定します
    • 変換元のテーブルデータに、ReadCSVのアウトプットを指定します。
  • ConvertTableのtransform欄の右端にある黒いスパナ状ボタンをクリックします。
  • 2列目のヘッダー脇の▼ボタンをクリックし、「昇順で並び替え」を選択します。

 
 

# ブラウザを開く
+open_browser_1:
  action>: OpenBrowser
  url: 'https://www.bunka.go.jp/seisaku/bunkazai/shokai/hozonchiku/judenken_ichiran.html'
  lang: 'ja-JP'
  headless: true
  useShadowDomSelector: false

# テーブルデータを取得
+extract_data_from_table_1:
  action>: ExtractDataFromTable
  browser: +open_browser_1
  selector: table
  ignoreError: true

# テーブルデータ(二次元配列)を変換
+convert_table_1:
  action>: ConvertTable
  header: true
  table: +extract_data_from_table_1
  transform: [{"type":"sortColumn","map":{"0":0,"1":2,"2":3,"3":1,"4":4,"5":5,"6":6}}]

 任意の列を削除する

次に、任意の列を削除する方法を紹介します。

上述の「条件を満たす行を抽出する」のスクレイピングで取得したテーブルデータ(二次元配列)から、選定年月日,面積(ha)の2列を削除してみます。

  • ConvertTableのtransform欄の右端にある黒いスパナ状ボタンをクリックします。
  • 選定年月日列のフィルターボタンをクリックします。
  • 「この列を非表示にする」をクリックします。
  • 面積(ha)列についても、同様に非表示にします。
  • プレビュー画面から列が削除(非表示)されたことを確認したら、OKをクリックします。

# ブラウザを開く
+open_browser_1:
  action>: OpenBrowser
  url: 'https://www.bunka.go.jp/seisaku/bunkazai/shokai/hozonchiku/judenken_ichiran.html'
  lang: 'ja-JP'
  headless: true
  useShadowDomSelector: false

# テーブルデータを取得
+extract_data_from_table_1:
  action>: ExtractDataFromTable
  browser: +open_browser_1
  selector: table
  ignoreError: true

# テーブルデータ(二次元配列)を変換
+convert_table_1:
  action>: ConvertTable
  header: true
  table: +extract_data_from_table_1
  transform: [{"type":"filter","column":"都道府県","operator":"==","operand":"福井","include_blank":false},{"type":"column","columns":{"番号":"番号","都道府県":"都道府県","地区名称等":"地区名称等","種別":"種別","選定基準":"選定基準"}}]

 列順を並び替える

次に、列の順番を並び替える方法を紹介します。

上述の「条件を満たす行を抽出する」のスクレイピングで取得したテーブルデータ(二次元配列)から、種別列を2列目(都道府県列の左隣)に移動してみます。

  • ConvertTableのtransform欄の右端にある黒いスパナ状ボタンをクリックします。
  • ドラッグアンドドロップで都道府県列を種別列の左隣に移動します。

 

# URL上のファイルを取得
+download_file_1:
  action>: DownloadFile
  url: 'https://support.autoro.io/wp-content/uploads/2023/11/sample_Le_Corbusier.csv'
  private: false

# CSVを読み込む
+read_c_s_v_1:
  action>: ReadCSV
  filename: +download_file_1
  headers: true
  private: false

# テーブルデータ(二次元配列)を変換
+convert_table_1:
  action>: ConvertTable
  header: true
  table: +read_c_s_v_1
  transform: [{"type":"sort","column":"竣工年等","order":"ASC"}]
  private: false

 transformを直接指定する

ここまでの紹介で登場したConvertTableアクション付属のプレビュー画面を使用せずに、ConvertTableのtransformパラメータを直接編集することによっても、テーブルデータの変換操作が可能です。

transformパラメータの詳細な記述方法は、AUTORO公式ドキュメントをご参照ください。

https://docs.autoro.io/actions/data#converttable

ConvertTable/テーブルデータ(二次元配列)を変換/フィルタリング/抽出/列削除

このページは役に立ちましたか?