フィルターで上位10位

179 views
Skip to first unread message

Satoshi Itoh

unread,
Oct 10, 2024, 12:26:28 AMOct 10
to QGIS初心者質問グループ
いつもお世話になっております。
フィルターである属性(面積)の上位〇位なんてフィルターはかけられるものでしょうか?

mooya

unread,
Oct 12, 2024, 10:35:11 AMOct 12
to QGIS初心者質問グループ
Satoshi Itohさま

こんにちは。

 属性テーブルの左下のフィルタのボタンから詳細フィルタ(式)を選んで、ややこしいんですが、下記のような式を入力すると、上位10位がフィルタできます。
 この式は、 "area" と$idを2次元配列化して、降順ソート(1つ目の "area"でソートされる)し、前から10個を取り出した後、$idの配列を作成し(上位10位のみ)、当該地物の$idがその配列内に含まれるかを判定してます。
 個々の関数の詳細は式のヘルプを確認してください。

-----------------------------------------
array_contains(
 array_foreach(
  array_slice(  
   array_sort(
    array_agg(
     array("area" ,$id)),
false),
  0,9),
 @element[1]),
$id)
-----------------------------------------
キャプチャ.PNG


2024年10月10日木曜日 13:26:28 UTC+9 Satoshi Itoh:

Satoshi Itoh

unread,
Oct 13, 2024, 3:56:47 AMOct 13
to QGIS初心者質問グループ
mooyaさん
早速ありがとうございます。
上記式を属性テーブル「詳細フィルタ(式)」に貼り付け無事上位10位が選択されました。
しかしレイヤ表示には反映されません。
希望は地図ビュー上に表示させたいのですが・・

2024年10月12日土曜日 23:35:11 UTC+9 mooya:

ありた

unread,
Oct 13, 2024, 7:11:10 AMOct 13
to QGIS初心者質問グループ
こんにちは

「フィルターをかけ」た結果、合致する地物のみ表示するのか、抽出するのか、選択するのかなど
目的によって操作が異なります。
・レイヤプロパティを開き、ソースタブのプロバイダ地物フィルタに条件式を設定(非編集状態に限る)
  → 条件に合致した地物のみが読み込まれる(データレベルでの絞り込み)

・レイヤプロパティを開き、シンボロジタブのルールによる定義にて条件式を設定し
 合致しない場合はシンボロジを設定しない
  → 条件に合致した地物のみが表示され、それ以外は非表示。データは存在する

・プロセシングツールの「 QGIS 式による抽出」
  → 条件に合致した地物のみを抽出した新規レイヤを作成

・プロセシングツールの「 QGIS 式による選択」
・属性テーブルあるいはツールバーの「式による地物選択」
  → 条件に合致した地物を選択状態にする



また、別の式として、集計する対象の属性が area のとき、下記の式で順位を計算することができます。
true のとき昇順(小さい順)、 truefalse に変えると降順(大きい順))
array_find(
    array_sort(array_agg("area"), true),
    "area"
) + 1

最後に +1 しているのは1番から順の順位にするためで、不要なら削除してかまいません。
一旦、この式による順位をたとえば rank 属性などとして作成し、 rank 属性に対し「10以下」という
条件でフィルタリングしてもよいですし、直接上記式に <= 10 を付与し、条件式化してもよいです。

また count("area") で地物数が得られるので、下式でパーセンタイルの計算ができ、上位10%といった
フィルタリングも可能です。
array_find(
    array_sort(array_agg("area"), true),
    "area"
) / (count("area")-1) * 100

2024年10月13日日曜日 16:56:47 UTC+9 Satoshi Itoh:

mooya

unread,
Oct 13, 2024, 11:10:19 AMOct 13
to QGIS初心者質問グループ
こんにちは
補足ですが、
ありたさんの式と私の式の結果には微妙な違いがあって、例えば10位の面積が同値で2つある場合、私の式はどちらかを選んで、10個を選ぶのに対して、ありたさんの式は11個が選ばれます。
上位10位ということであれば、ありたさんの式の方が自然ですね。

2024年10月13日日曜日 20:11:10 UTC+9 ありた:

Satoshi Itoh

unread,
Oct 15, 2024, 2:18:10 AMOct 15
to QGIS初心者質問グループ
諸氏大変ありがとうございます。
教授いただいた式による表示を行いましたが思ったより表示に時間がかかる(数秒単位ですが・・)のと
単純に表示をすることだけですのでエクセルに吐き出し、上位10位のIDを求め
”ID”=○○ Or
”ID”=○○ Or
・・
というフィルター式で表示させました。
私の力量不足もありご教示を生かせませんが今後の参考にして行きたいと思ってます。
ありがとうございます。

2024年10月14日月曜日 0:10:19 UTC+9 mooya:
Reply all
Reply to author
Forward
0 new messages