並べ替え・フィルタ・検索・統計

← 目次

このページでは、TableSkim が値をどのように比較するかを説明します。規則は GUI とターミナル UI で共通で、どのファイル形式でも同じです。

値と型

セルには、空(NULL)、文字列、整数、小数、真偽値(TRUE / FALSE)、日付、日時のいずれかが入ります。Excel、Parquet、JSON、データベースのファイルはこれらの型を保持しています。CSV / TSV ファイルではすべてのセルが文字列ですが、 TableSkim は次のものを認識します。

並べ替え

CSV / TSV と Excel ファイルでは、並べ替えの前にシート全体をメモリに読み込みます。Parquet、JSON、データベースでは並べ替えをデータベース内で行うので、どんなに大きな表でも使えます。

フィルタ

フィルタは 条件 の並びで、All(AND:すべての条件に一致)か Any (OR:少なくとも 1 つに一致)で組み合わせます。各条件は 1 つの列を調べます。

演算子

演算子一致するセル
contains文字列を含む(大文字・小文字を区別しない)
not contains文字列を含まない(大文字・小文字を区別しない)
=値と等しい(下記参照)
≠値と等しくない
< ≤ > ≥値より小さい / 以下 / 大きい / 以上
is empty空(NULL または空文字列)
is not empty空でない
matches正規表現に一致する部分を含む(大文字・小文字を区別しない)
not matches正規表現に一致する部分を含まない
is a number数値または数値の文字列(真偽値、日付、NaN、無限大を除く)
is a date日付、日時、または数値でない ISO 形式の日付の文字列

=・≠・<・≤・>・≥ の比較方法

比較の仕方は、セルの値と入力した値によって決まります。

正規表現

matches と not matches は RE2 構文 を使い、大文字・小文字を区別しません。パターンはセル内のどこに一致してもかまいません。セル全体と一致させるには、^(Tokyo|Osaka)$ のように ^ と $ で囲みます。正しくないパターンはエラーとして知らせ、フィルタは適用しません。

例

目的条件
東京在住で 45 歳以上の人City = Tokyo かつ Age ≥ 45(Match: All)
2024 年 1 月の行Date ≥ 2024-01-01 かつ Date < 2024-02-01
時刻を問わず特定の日の行Timestamp = 2024-01-31
example.com か example.org のメールアドレスEmail matches @example\.(com|org)$
値が欠けている行Salary is empty
東京または大阪City = Tokyo、City = Osaka(Match: Any)

クイックフィルタ

クイックフィルタ(GUI のセルメニューの Filter: = "値"、TUI の = / !)は、セルに表示されている値で = / ≠ の条件を追加します。その条件は上で説明したとおり型に応じて比較されます。空のセルでは is empty / is not empty を追加します。すでにフィルタにある条件は二重には追加しません。

検索

列の統計

統計は、現在の表示(フィルタ適用後)の行を対象に、1 つの列について計算します。

項目意味
Rows行数
Empty空のセル(NULL または空文字列)の数と割合
Distinct空でない値の種類の数
Numbers数値のセル(数値の文字列を含む)の数
Min / Max並べ替え順での最小値と最大値
Sum / Mean数値の合計と平均
Std dev数値の標準偏差
Most frequent最も多い値と、その件数・割合

フィルタを変えると統計は計算し直されます。Parquet、JSON、DuckDB ファイルでは値の集計をデータベース内で行います。

ヒストグラム

ヒストグラムは、列の統計と同じく、現在の表示(フィルタ適用後)の行を対象に 1 つの列を集計します。GUI では Edit → Histogram... (GUI の使い方 を参照)、ターミナル UI では B (ターミナル UI の使い方 を参照)で開きます。

集計の対象

列の値は、フィルタと同じ方法で読み取ります。

両方を含む列では、多いほうの種類を集計します。もう一方の種類の値は概要に「other values」(その他の値)として、空のセルは「empty」として表示されます。数値も日付も含まない列では、代わりに 最頻値 を表示します。

区間の決め方

読みやすい幅で、およそ 30 個の区間(ビン) になるようにします。

各区間は下限を含み、上限を含みません。これを [下限, 上限) と書きます。最大値も数えられるよう、数値の最後の区間だけは上限も含み、[下限, 上限] と書きます。

棒から絞り込む

棒を選ぶ(GUI ではダブルクリック、TUI では Enter)と、フィルタに is a number(時刻では is a date)、≥ 下限、< 上限(数値の最後の区間では ≤ 上限)の 3 つの条件を追加します。これにより、ちょうどその棒に数えられた行だけが残ります。最初の条件は「その他の値」を除くためのもので、これがないと 15 kg のような文字列も、文字列として ≥ 10 と < 20 を満たしてしまいます。年・月・日の区間では、≥ 1994-01-01 と < 1996-01-01 のように境界が日付になります。文字列の列では、棒の値が = の条件として追加されます。追加された条件は Filter ペイン(TUI では f)で確認・編集できます。

Parquet、JSON、DuckDB ファイルでは、値の集計をデータベース内で行います。

散布図と二次元密度分布

散布図は、現在の表示の行を対象に、ある列(X)を別の列(Y)に対して描きます。二次元密度分布は、それらの行をマス目ごとに数えます。GUI では Edit → Scatter Plot...(GUI の使い方 を参照)、ターミナル UI では密度分布のみを M(ターミナル UI の使い方 を参照)で開きます。

X がテキストのときは、その値のうち多いもの 30 個(ヒストグラムの「最も多い値」と同じ順)がカテゴリになり、残りの値はまとめて (other) になります。カテゴリごとに Y の値の箱ひげ図を描きます。

箱を選ぶ(GUI ではダブルクリック、TUI では Enter)と、X にカテゴリの値の =、Y に is a number(または is a date)の条件を追加します。「(other)」は 1 つの値ではないので選べません。

マスを選ぶ(GUI ではダブルクリック、TUI では Enter)と、両方の列の区間の条件をフィルタに追加します。これにより、ちょうどそのマスに数えられた行だけが残ります。GUI で長方形をドラッグすると、両方の列に is a number(または is a date)、≥、≤ の条件を追加します。境界は区間より少し細かく丸められます。

集計(Group By)

GUI の Edit → Group By...(GUI の使い方 を参照)とターミナル UI の A(ターミナル UI の使い方 を参照)は、現在の表示の行をいくつかの列の値ごとに数えます。