Python製の高機能データエディタ・『visidata』を使ってCSVファイルを操作する


※ 当ページには【広告/PR】を含む場合があります。
2024/03/28
蛸壺の技術ブログ|Python製の高機能データエディタ・『visidata』を使ってCSVファイルを操作する

著者の日々の業務でも、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 VisiData

OSごとに作法は変わりますが、Python3.6+であればPipで悩むことなく導入できるので、ここではPythonベースの導入方法を一つ試します。

            
            $ python --version
Python 3.8.18
$ pip --version
pip 23.0.1
$ pip install visidata
        
これでvisidataのインストールが完了します。

以下のようにvididataのコマンド・『vd』が利用できるようになれば準備完了です。

            
            $ vd --version
saul.pw/VisiData v3.0.2
        

合同会社タコスキングダム|蛸壺の技術ブログ【効果的学習法レポート】シェルスクリプトをこれから学びたい人のためのオススメ書籍&教材特集

visidataの簡単な練習 〜 CSVシートを作成する

『visidata』のショートカットキーの数はかなりのバリエーションがあり、その機能も多岐に渡ります。

その全てを覚えることはかなり困難ですが、実際にはいくつかの実用的なショートカットキーさえ覚えておけば十分です。

ここでは最初の簡単なチュートリアルとして、数字を埋めるだけのCSVデータを作成する手順を説明します

visidataでCSVデータを作る

visidataをインストールすると、ターミナルからは
vdコマンドが利用できます。

vdコマンドは基本的に引数に編集したい表データファイルを指定して使います。

            
            $ vd hoge.csv
        
基本はCSV形式ですが、非テキスト系データのJSONやSQLiteなども利用できます。

他のフォーマットのデータファイルも対応していますが、別途読み込み用のプラグインのインストールが必要になるようです。

参考|Compatible filetypes - visidata

とりあえずvdコマンドを使い慣れるところから始めてみましょう。

以下のコマンドで、
1.csvと言う名前の空ファイルを指定してvisidataを起動してみます。

            
            $ vd 1.csv
        
引数で指定したファイルが無い場合、以下のように空のスプレッドシートに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形式になっているかをチェックしてみましょう。

            
            $ cat 1.csv
A,B,C,D,E
1,2,3,4,5
        
良い感じに編集できています。

このように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 Columns

Columnヘッダの基本操作

CSVデータでは一行目をヘッダ行として扱い、各列の名前の名前として利用するルールがあります。

ヘッダの名前を変更したい場合、通常のセルとは違い、
^キーを押すとヘッダーセルの編集が可能です。

visidataでは、各列に型を明示することで、ExcelやSQLデータベースのような高度なデータ保持機能をもつアプリのファイルとの互換性を担保し、プレーンなCSVより「型安全」なスプレッドシートとして扱える仕組みがあります。

visidataでもColumnのヘッダーに以下の属性値を持たせることで、これらの属性をColumnの操作を行う際の利用することができます。

            
            Name:
    列の名前
Width:
    スクリーン上に表示する列の長さ(文字数)
Type:
    列の基本データ型(以下の5種)。
    string ... 文字列型
    integer ... 整数型
    float ... 浮動小数型
    currency ... 通貨型
    date ... 日付型
        
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データをダウンロードせずともサーバーごしにデータの中身を扱えてとても便利です。
記事を書いた人

記事の担当:taconocat

ナンデモ系エンジニア

主にAngularでフロントエンド開発することが多いです。 開発環境はLinuxメインで進めているので、シェルコマンドも多用しております。 コツコツとプログラミングするのが好きな人間です。

合同会社タコスキングダム|蛸壺の技術ブログ【効果的学習法レポート】シェルスクリプトをこれから学びたい人のためのオススメ書籍&教材特集