Docly Child

テーブルデータ(二次元配列)をフィルタリングする

394 views

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


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

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

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

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

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

この記事では、これら1~3の方法を説明します。

二次元配列をアウトプットするアクションは以下が存在します。
よって、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パラメータの右端にある黒いスパナ状のアイコンをクリックします
 

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と一致しない」といった形(否定論理積)で条件を指定する必要があります。

# ブラウザを開く
+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}]

 任意の列を削除する

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

上述の「条件を満たす行を抽出する」のスクレイピングで取得したテーブルデータ(二次元配列)から、選定年月日,面積(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欄の右端にある黒いスパナ状ボタンをクリックします。
  • ドラッグアンドドロップで都道府県列を種別列の左隣に移動します。

 

# ブラウザを開く
+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}}]

 transformを直接指定する

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

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

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

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

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