※ 当ページには【広告/PR】を含む場合があります。
2024/03/28
visidataで即席散布図プロットを使ってデータを確認する
著者の日々の業務でも、Windowsを触ることがほとんどなくなりつつあり、個人レベルでMicroSoft製品とだいぶ縁遠くなっているのをひしひしと感じます。とはいえ、XLSファイルをお使いのクライアントもいるので、Excelの利用は欠かせないのですが、最近ではExcelをブラウザ立ち上げてデータを編集するスタイルも随分つまらなく感じてきました(※個人的な感想です)。Excel離れ気味のLinuxユーザーへ、CSVデータの編集にちょっとした刺激がほしい場合に利用していただきたいのが、ターミナルベースのPython製CLIアプリ・『visidata』です。VISIDATA - Data exploration at your fingertips.バイナリ版もダウンロード可能ですが、PythonさえインストールできればOS環境に依存しない表データの編集が可能になります。今回はショートカットキーを覚えることを念頭に、visidataの簡単な使い方を紹介していきます。なお、英語版のチートシートは以下のサイトが見やすいかもしれません。参考|A VisiData Cheat Sheet
【効果的学習法レポート】シェルスクリプトをこれから学びたい人のためのオススメ書籍&教材特集
visidataの導入手順
visidataのインストール方法に関しては、公式のドキュメンテーションを参考にします。Install VisiDataOSごとに作法は変わりますが、Python3.6+であればPipで悩むことなく導入できるので、ここではPythonベースの導入方法を一つ試します。これでvisidataのインストールが完了します。以下のようにvididataのコマンド・『vd』が利用できるようになれば準備完了です。
【効果的学習法レポート】シェルスクリプトをこれから学びたい人のためのオススメ書籍&教材特集
visidataの簡単な練習 〜 CSVシートを作成する
『visidata』のショートカットキーの数はかなりのバリエーションがあり、その機能も多岐に渡ります。その全てを覚えることはかなり困難ですが、実際にはいくつかの実用的なショートカットキーさえ覚えておけば十分です。ここでは最初の簡単なチュートリアルとして、数字を埋めるだけのCSVデータを作成する手順を説明しますvisidataでCSVデータを作る
visidataをインストールすると、ターミナルからはvd
コマンドが利用できます。vd
コマンドは基本的に引数に編集したい表データファイルを指定して使います。基本はCSV形式ですが、非テキスト系データのJSONやSQLiteなども利用できます。他のフォーマットのデータファイルも対応していますが、別途読み込み用のプラグインのインストールが必要になるようです。参考|Compatible filetypes - visidataとりあえずvdコマンドを使い慣れるところから始めてみましょう。以下のコマンドで、1.csv
と言う名前の空ファイルを指定してvisidataを起動してみます。引数で指定したファイルが無い場合、以下のように空のスプレッドシートにA
と言うColumnが仮置きされているようなところから編集が始まります。とりあえず、i
キーを適当に何回か押してみましょう。すると新しい空の列が挿入されることがわかります。列をいくらか増やしたところでa
キーを押してみます。すると、空の行が一つ追加されます。追加した行のセルに値を入力していく際に、現在アクティブになっている「カーソル」(ハイライトされた行と列)
の位置を移動させる必要があります。矢印キーの←
か→
、もしくはh
キーかl
キーで、カーソルの位置を列1つずつ移動することが可能です。また、カーソルの位置を行方向に上下に一つ移動したい場合、矢印キーの↑
か↓
、もしくはk
キーかj
キーを押します。visidataの操作ルールの一つに、特別な意味を持つプレフィックスキー・「gキー」
を使うことで、元々キー単独で使う機能をより"拡張(global)"させる、というものがあります。例えば、カーソルを一足飛びに移動させたい場合、上端ならgk
キー(gキーを押した後、kキーを押す)、下端ならgj
キー、左端ならgh
キー、右端ならgl
キー、といった具合に使います。では、編集したいセルにカーソルを合わせて、e
キーでセルの編集を開始しましょう。e
キーを押すと、セルの編集が開始し、一時的に入力以外の操作はロックされます。Enter
キーを押すとセルの編集が終了します。またEnter
の代わりにTab
キーを押すと、隣のセルへ移り、連続入力することができて便利です。ひとまずセルを適当に数値で埋めていきます。ちなみに、B-E列のヘッダ名の横についている「#」
は、その列のデータの型が"整数"であることを意味しています。型付の列のデータに、その型以外のデータをセルへ入力すると警告で教えてくれる機能として利用できます。列のデータ型は後ほど説明します。なお、入力したデータを間違えて上書きしたり、やっぱり元に戻したいなど、「Undo/Redo」操作がほしいときがあります。編集後のセルに限った操作ではありませんが、visidataでは、Undo(一つ前に戻る)はShift-u
キー、Redo(一つ後に進む)はShift-r
キーで、変更前の状態に行き来することが可能です。とりあえずセルの編集が終わったので、Cntl + s
キーを押して、1.csv
に編集内容を保存しましょう。データを保存したら、一旦q
キーを押して、visidataから抜けます。データがちゃんとcsv形式になっているかをチェックしてみましょう。良い感じに編集できています。このようにvisidataの最大の特徴の一つに、「強力なショートカットキー操作」が挙げられます。visidataを快適に使いこなすには、いかにショートカットキーを自分のものにできるか、と言う点につきます。以降ではもう少し基本的なテクニックを紹介していきます。ショートカットキーの調べ方
思い出せないショートカットキーを思い起こそうとする場合には、オンラインのチートシートなどで探しもよいのですが、Space
キーを押して「long-name commandプロンプト」からキーワードで検索することも出来ます。キーワードで検索して、該当の10項目が出てきますので、そのままlong-name commandプロンプトから実行しても良いですし、検索できそうにない場合には、Ctrl + c
でプロンプトを閉じることもできます。この節で使ったショートカットキー
次の節に進む前に、先程までの簡単なショートカットキーをおさらいしておきます。覚え方は少々捻り出し感が半端ないですが、あくまでも参考程度にどうぞ...キー | 機能 | 覚え方 |
---|
i | 列の新規挿入 | "i"nsert |
a | 行の新規挿入 | "a"ppend |
e | セルの編集 | "e"dit |
h/← | 一つ左にカーソル移動 | 「左」→"h"idari |
l/→ | 一つ右にカーソル移動 | 「右」→「right」→「"l"ight」→「光」で連想 |
k/↑ | 一つ上にカーソル移動 | 「上」→「"k"ami」 |
j/↓ | 一つ下にカーソル移動 | 「下」→「下級」→「"j"unior」 |
gh | 左端にカーソル移動 | hキーのgキー拡張 |
gl | 右端にカーソル移動 | lキーのgキー拡張 |
gk | 上端にカーソル移動 | kキーのgキー拡張 |
gj | 下端にカーソル移動 | jキーのgキー拡張 |
Enter | (セルの編集中で)セル値の確定 | |
Tab | (セルの編集中で)入力を次のセル(右か次段の最初)にシフト | |
Shift-u | 変更した履歴から一つ前に戻る(Undo) | "u"ndo |
Shift-r | 変更した履歴から一つ後に進む(Redo) | "r"edo |
Cntl + s | ファイルを保存 | "s"ave |
q | 一つまえの画面に戻る/アプリの終了 | "q"uit |
Space | Long-name Commandプロンプトの起動 | |
Cntl + c | ツールの終了(操作のキャンセル) | "c"ancel |
【効果的学習法レポート】シェルスクリプトをこれから学びたい人のためのオススメ書籍&教材特集
セルデータの操作
ここではセルの操作で良く使いそうなショートカットキーをまとめます。まず、セルの編集で余計な列を非表示としたい場合に、隠したい列にカーソルを合わせておいて、-
キーを押すと、その列を隠すことができます。逆に隠れた列を全て表示させるのが、gv
キーです。これらを組み合わせて、編集したいセルの内容だけに集中することができます。数字や文字列を入力していく過程の中で、文字数が長くなって1つの列の幅に入りきれずに見切れてしまう場合があります。長い文字でセルの幅に収まりきれずに見切れてしまう時に、対象のColumnへカーソルを移動し、_
キーを押すことで、セルの幅を文字の長さにフィットするまでリサイズすることができます。これで対象の列の幅が、一番長い文字にフィットするように拡大できました。ちなみに、g_
キーを押すと、全ての列に対して、各列の最長の文字の幅にリサイズできます。逆にあまりに文字が長すぎて余計見づらいと感じた場合には、z-
キーを押すと、現在の幅を半分になります。また、幅半減ではなく、z_
キーを押して、リサイズしたい幅数を入力することで、指定した文字の幅にリサイズも可能です。先ほど述べたように、e
キーを押すことで、カーソルを合わせた位置のセル値の編集モードに入ることができます。セルの編集中では、一つのセルに操作がフォーカスされ、セル操作専用のショートカットキーがいくつか用意されています。セル内で文字列の入力位置を移動する場合、矢印キー(←
/→
)で一つずつ左右に移動できますが、文字の先頭に移動したい場合には、Ctrl-a
キー、文字の末尾に移動したい場合には、Ctrl-e
キーを使います。現在の文字入力位置から末尾までの文字を削除したい場合には、Ctrl-k
キーを押します。また入力を取りやめてセルの編集モードから抜ける場合には、Ctrl-c
を使います。この節で使ったショートカットキー
次の節に進む前に、先程までの簡単なショートカットキーをおさらいしておきます。キー | 機能 | 覚え方 |
---|
- | 列を非表示 | 列を引く(マイナス) →「-」 |
gv | 全列の表示 | "g"lobal "v"iew |
_ | 列の幅を最大化 | (...良い覚え方が思い付かず) |
g_ | 全列の幅を最大化 | |
z- | 列幅を半分に | (...良い覚え方が思い付かず) |
z_ [文字数] | リサイズ幅を指定 | (...良い覚え方が思い付かず) |
Ctrl-a | (編集中)入力位置を先頭へ | "a"head |
Ctrl-e | (編集中)入力位置を末尾へ | "e"nd |
Ctrl-k | (編集中)入力位置から末尾まで消去 | 「切」→ "k"iri |
Ctrl-c | セルの編集を中断 | "c"ancel |
【効果的学習法レポート】シェルスクリプトをこれから学びたい人のためのオススメ書籍&教材特集
行(Row)データを使いこなす
visidataの行操作の基本となる考え方として、Rowデータの「選択と解除」(select/unselect)、データの移動(move)があります。参考 | Understanding Rowsここでは、実例をもとに手を動かす感覚で、その基本操作を覚えていくところから始めましょう。Rowデータを選択する・解除する
先程の1.csv
から何行かデータを増やしたもので説明を始めます。まず「Rowの選択」からやってみると、適当な行に移動してs
キーを押してみましょう。すると行の先頭に「・」
マークが付いたのが分かると思います。この行の選択は同時に複数の行でも可能です。なお行の選択解除はu
キー、選択の反転(トグル)はt
キー、全行選択はgs
キー(gキーを押してからsキー)、全選択解除はgu
キー、全行反転はgt
キーになります。Rowの選択でもっとも使うであろうテクニックは、選択行だけでフィルター表示させることでしょう。選択した状態で、"
キー(ダブルクォーテーション文字)を叩いてみましょう。やっての通り、選択項目だけで表データを再構築することが可能です。セル要素にマッチした行を選択する
行数が多くなってくると、手動で行を選択してまわるのが難しくなってきます。そんなときに便利なテクニックが、「パターンマッチング選択」です。最初の表テーブルに戻り、例えば「D列」でセルの値が「6」となる列を選択したい場合を考えてみます。D列にカーソルを移動し、|
キーを押すと、正規表現による選択モードに移行します。選択中の列の中で探したい文字パターンを入力後に、Enter
を押すと、パターンマッチした行が全て選択されます。この|
キーによる正規表現検索は、繰り返し利用できるため、複数のマッチングパターンで選択したい場合にも利用できます。逆に、選択した行項目から正規表現でマッチしたパターンで選択解除したいときには、\
キーによって除外させることも可能です。他にも、特定の列ではなく全ての列でパターンマッチによる選択(g|
キー)や解除(g\
キー)というやり方もあります。正規表現検索とは別の簡易的な操作で、選択した列と重複するセル要素を持つ行の選択は,
キー、全ての列のセル要素が完全に一致する行の選択はg,
キーを使いますので覚えておいても良いでしょう。行の移動
場合によっては手動で行の位置を入れ替えたいときがあります。その場合には、移動させたい行にカーソルを合わせておき、上の位置へ動かす場合には、Shift-k
キー(Shiftを押しながらkキー)、下に動かすならShift-j
キーをそれぞれ押します。この節で使ったショートカットキー
次の節に進む前に、先程までの簡単なショートカットキーをおさらいしておきます。キー | 機能 | 覚え方 |
---|
s | 現在の行を選択 | "s"elect |
u | 現在の行を選択解除 | "u"nselect |
t | 現在の行の選択状態をトグル | "t"oggle |
gs | 全行を選択 | sのg拡張 |
gu | 全行を選択解除 | uのg拡張 |
gt | 全行の選択状態をトグル | tのg拡張 |
" | 選択中の行でフィルター表示 | |
| | 現在の列で正規表現検索による行を選択 | |
\ | 現在の列で正規表現検索による行を選択解除 | |
g| | 全列で正規表現検索による行を選択 | |
g\ | 全列で正規表現検索による行を選択解除 | |
, | 現在の列でセル要素の重複している行を選択 | |
g, | 行の内容が一致している行を選択 | |
Shift-k | 現在の行を上に移動 | |
Shift-j | 現在の行を下に移動 | |
【効果的学習法レポート】シェルスクリプトをこれから学びたい人のためのオススメ書籍&教材特集
列(Column)データの操作
先ほどはRowデータの基本となる操作を紹介してみました。これはデータ構造で言うところの「縦の広がり」の視点で考えてきました。こちらは、表テーブルデータのもう一つの「横の広がり」である、Column(列)データを扱うテクニックにも触れておきましょう。Understanding ColumnsColumnヘッダの基本操作
CSVデータでは一行目をヘッダ行として扱い、各列の名前の名前として利用するルールがあります。ヘッダの名前を変更したい場合、通常のセルとは違い、^
キーを押すとヘッダーセルの編集が可能です。visidataでは、各列に型を明示することで、ExcelやSQLデータベースのような高度なデータ保持機能をもつアプリのファイルとの互換性を担保し、プレーンなCSVより「型安全」なスプレッドシートとして扱える仕組みがあります。visidataでもColumnのヘッダーに以下の属性値を持たせることで、これらの属性をColumnの操作を行う際の利用することができます。Columnのデータ型を設定するには、カーソルを対象の列に移動し、文字列型なら~
キー、整数型なら#
キー、浮動小数型なら%
キー、通貨型なら$
キー、日付型なら@
キーをそれぞれ押すことで変更できます。インデックスキー(プライマリーキー)列の設定
SQLデータベースを扱う場合には、「インデックスキー」のようなデータを識別・管理する上で特別なColumnが存在します。インデックスキーをvisidataで扱う場合には、カーソル選択した列で、!
キーを押すことで設定できます。基本的にインデックスキーはどの列にでも設定することができ、インデックスキーに指定した列はハイライト色が変化し、表の左端に固定されます。「Columns-Sheet」モードの利用
visidataには、現在のスプレッドシート情報を参照・管理するための「Column-Sheet」モード(以降ではCSモード)があります。このモードでは、シートの全ての列の属性値を確認と編集を行うことができます。CSモードへは、Shift-c
キーで入ります。CSVデータの表示だと通常はあまり意識しないような、小数点の桁数表示などのフォーマット形式を細かく設定したいときなどに利用できます。Columnの移動
Shift-h
キー、Shift-l
キーを使うと、カーソル選択している列を移動することができます。ちなみに、選択した列を右端に移動させたい場合はg Shift-l
キー(gキーを押した後にShift-lキー)、左端に移動したい場合には、g Shift-h
キーを使います。この節で使ったショートカットキー
次の節に進む前に、先程までの簡単なショートカットキーをおさらいしておきます。キー | 機能 | 覚え方 |
---|
^ | ヘッダ名の変更 | |
~ | 列のデータ型をstringに指定 | |
# | 列のデータ型をintegerに指定 | |
% | 列のデータ型をfloatに指定 | |
$ | 列のデータ型をcurrencyに指定 | |
@ | 列のデータ型をdateに指定 | |
! | 列をインデックスキー列に指定 | |
Shift-c | CSモードに入る | |
Shift-h | 列を一つ左に移動 | 「左」→"h"idari |
Shift-l | 列を一つ右に移動 | 「右」→「right」→「"l"ight」→「光」で連想 |
g Shift-h | 列を左端に移動 | |
g Shift-l | 列を右端に移動 | |
【効果的学習法レポート】シェルスクリプトをこれから学びたい人のためのオススメ書籍&教材特集
まとめ
今回はLinuxベースのターミナルでも動くPython製の表データ編集アプリ・『visidata』の主要なショートカットキーをまとめてみました。見ていただいた通り、emacsやviのように往年のテキストエディタに慣れ親しみのあるユーザーであれば、割と使い勝手の良いツールになると思います。個人的にお気に入りのユースケースとして、GUI環境のないVPSサーバー内に、tmuxのようなターミナルマルチプレクサを併用すると、わざわざローカルにCSVデータをダウンロードせずともサーバーごしにデータの中身を扱えてとても便利です。