このページでは、TableSkim が値をどのように比較するかを説明します。規則は GUI とターミナル UI で共通で、どのファイル形式でも同じです。
セルには、空(NULL)、文字列、整数、小数、真偽値(TRUE / FALSE)、日付、日時のいずれかが入ります。Excel、Parquet、JSON、データベースのファイルはこれらの型を保持しています。CSV / TSV ファイルではすべてのセルが文字列ですが、 TableSkim は次のものを認識します。
42 や -3.5 のような文字列
2024-01-31、2024-01-31 12:34、 2024-01-31T12:34:56.789
TRUE / FALSE、yes / no、 1 / 0(大文字・小文字は問わない)
o(TUI)でファイルの順序に戻ります。
9 は 10 より前です。
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 形式の日付の文字列 |
=・≠・<・≤・>・≥ の比較方法比較の仕方は、セルの値と入力した値によって決まります。
Age ≥ 45 は 45、50、"60" に一致します。数値でないセルは文字列として比較する(下記参照)ので、"abc" も "45" より後に並ぶため一致します。数値だけに絞るには is a number を加えてください。
= 2024-01-31 は 2024-01-31 08:00 にも 2024-01-31 23:59 にも一致し、 < 2024-02-01 はその日より前のすべてに一致します。
TRUE / FALSE、yes / no、1 / 0 と比較します。
= は大文字・小文字を区別します。区別したくないときは contains か matches を使ってください。
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 を追加します。すでにフィルタにある条件は二重には追加しません。
Ctrl+R(TUI)を使うと、検索文字列を RE2 の正規表現として扱います。
統計は、現在の表示(フィルタ適用後)の行を対象に、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 の使い方 を参照)で開きます。
列の値は、フィルタと同じ方法で読み取ります。
2024-01-31、 2024-01-31 12:34)
両方を含む列では、多いほうの種類を集計します。もう一方の種類の値は概要に「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 の使い方 を参照)で開きます。
y = a x + b は Y を X で回帰した最小二乗法の直線です。日付は時点として扱うので r は日付でも計算できますが、直線の式は数値のときだけ表示します。列の値が 1 種類しかないときは r は定義されません。
X がテキストのときは、その値のうち多いもの 30 個(ヒストグラムの「最も多い値」と同じ順)がカテゴリになり、残りの値はまとめて (other) になります。カテゴリごとに Y の値の箱ひげ図を描きます。
QUARTILE.INC と同じく、近い 2 つの値の間を線形に補間して求めます(1、2、…、8 の第 1 四分位数は 2.75)。
箱を選ぶ(GUI ではダブルクリック、TUI では Enter)と、X にカテゴリの値の =、Y に is a number(または is a date)の条件を追加します。「(other)」は 1 つの値ではないので選べません。
マスを選ぶ(GUI ではダブルクリック、TUI では Enter)と、両方の列の区間の条件をフィルタに追加します。これにより、ちょうどそのマスに数えられた行だけが残ります。GUI で長方形をドラッグすると、両方の列に is a number(または is a date)、≥、≤ の条件を追加します。境界は区間より少し細かく丸められます。
GUI の Edit → Group By...(GUI の使い方 を参照)とターミナル UI の A(ターミナル UI の使い方 を参照)は、現在の表示の行をいくつかの列の値ごとに数えます。
1、01、1.0 は並べ替えでは同順でも、別々の 3 つのグループになります。空のセル(短い行で欠けているセルも)は 1 つのグループになり、最後に並びます。