Miller について
Miller(mlr)は CSV、TSV、JSON などの構造化レコードを処理するコマンドラインツールです。フォーマット変換、集約、フィルタリング、統計計算に対応し、Unix パイプラインに自然に統合でき、繰り返し可能なデータ処理が実現できます。
主な機能
- 01複数フォーマット間でのデータ変換(CSV、JSON、TSV など)
- 02サマリー統計とデータ集約の計算
- 03フィールド選択とフィルタでデータを再構成
活用シーン
- 01分析ワークフローで構造化データを素早く変換・クリーニング
- 02再利用可能なデータ処理パイプラインの構築
- 03コマンドラインからログやデータセットを探索・集計
インストール
OS またはパッケージマネージャーを選び、コマンドをターミナルで実行します。
インストール後にmlr --versionを実行して確認します。
コマンド例
よく使うコマンドを使う順に並べています。
詳細
Miller とは?
Miller は、CSV、TSV、JSON、JSON Lines、位置インデックス形式などのデータ形式に対応した、awk、sed、cut、join、sort のようなツールです。
Miller で何ができますか?
Miller では、CSV、TSV、JSON、JSON Lines、位置インデックス形式などの使い慣れた形式を使いながら、位置インデックスを数えずに名前付きフィールドを利用できます。さらに、既存のフィールドを使った新しいフィールドの追加、フィールドの削除、並べ替え、統計的な集計、見やすい形式での出力などを、その場で実行できます。

-
Miller はキーと値のペアのデータを扱います。一方、使い慣れた Unix ツールは整数インデックスで指定するフィールドを扱います。後者の自然なデータ構造が配列なら、Miller の自然なデータ構造は挿入順を保持するハッシュマップです。
-
Miller は、使い慣れた CSV、TSV、JSON/JSON Linesをはじめとする、さまざまなデータ形式に対応しています。 (Miller は位置インデックス形式のデータにも対応しています!)
上の画像から、Miller がさまざまなデータ形式に共通する、キーと値のペアというテーマを取り入れていることがわかります。
インストール
お使いのシステム向けにビルド済みの Miller を入手できる可能性は十分にあります。
| OS | インストールコマンド |
|---|---|
| Linux | yum install millerapt-get install millersnap install miller |
| Mac | brew install millerport install miller |
| Windows | choco install millerwinget install Miller.Millerscoop install main/miller |
パッケージのバージョン一覧については、README-versions.mdもご覧ください。長期サポート(LtS)リリースは、古いバージョンになる可能性が高い点にご注意ください。
ソースからのビルドもご覧ください。
機能
-
Miller は多目的です。データクリーニング、 データ削減、統計レポート、DevOps、システム 管理、ログファイル処理、フォーマット変換、 データベースクエリの後処理に役立ちます。
-
Miller を使って、ログファイルのデータを収集・加工できます。関連する サブストリームを選択してから CSV 形式に変換し、 すべてをメモリに読み込むデータフレームユーティリティに取り込んで、 統計処理やグラフィカルな処理をさらに行えます。
-
Miller は R、pandas などのデータ分析ツールを補完します。 Miller を使ってデータをクリーニングし、準備できます。 Miller だけで基本的な統計処理を行うこともできますが、ストリーミングデータ機能と シングルパスアルゴリズムを活用すれば、非常に大きなデータセットを削減できます。
-
Miller は SQL データベースを補完します。データベースにデータを 読み込む際や、データベースから取り出す際に、クライアント側でデータを分割、 加工、再フォーマットできます。また、ディスク上のデータファイルを急いで クエリする必要がある場合、セットアップ不要の単発タスクでも、 データベースの利点をいくつか活用できます。
-
Miller は、従来の Unix ツールの枠を超え、現代のNoSQLの世界に 完全に踏み込みます。レコードごとに異なるスキーマ(フィールド名)が 混在するデータを処理できるのは、Miller が本質的に備える レコードの異種性によるものです。
-
Miller はストリーミング処理に対応しています。ほとんどの操作では、 出力を生成する前に入力全体を読み込むのではなく、一度に1レコードだけを メモリに保持します。より多くのデータを保持する必要がある操作(
sort、tac、stats1)では、 必要な分だけを保持します。そのため、機能上可能な場合は、システムで利用可能な RAM より大きなファイルも処理でき、tail -f の用途でも Miller を使用できます。 -
Miller はパイプと相性がよく、Unix ツールキットと相互運用できます。
-
Miller の入出力形式には、表形式の整形表示、位置による インデックス指定(Unix ツールキット形式)、CSV、TSV、JSON、JSON Lines などがあります。
-
Miller は形式間の変換を行います。
-
Miller の処理は形式を認識します。たとえば CSV の
sortとtacでは、ヘッダー行が先頭に保たれます。 -
Miller は Unix ツールキットに匹敵する高いパフォーマンスを備えています。
-
Miller は移植性の高い最新の Go で記述されており、実行時依存関係はありません。 単一のバイナリをダウンロードまたはコンパイルし、遠隔地のマシンに
scpで転送すれば、 そのまま動作することが期待できます。
はじめに
- Miller を10分で
- コマンドラインでのデータ操作ガイド
- Miller の簡単なチュートリアル
- Miller の演習
- コマンドラインから CSV ファイルを操作するツール
- www.togaware.com/linux/survivor/CSV_Files.html
- CSV 操作用の MLR
- Linux Magazine:Miller で構造化テキストファイルを処理する
- Miller:コマンドラインでの CSV ファイル処理
- Miller — CSV データ、データサイエンス、データ加工のためのスイスアーミーチェーンソー
- Pandas キラー:科学者のための mlr
その他のドキュメントへのリンク
コミュニティ
- ディスカッションフォーラム:https://github.com/johnkerl/miller/discussions
- 機能リクエスト/バグ報告:https://github.com/johnkerl/miller/issues
- 貢献方法:https://miller.readthedocs.io/en/latest/contributing/
ビルド状況
ソースからビルドする
- 最初に、次の操作を行います。
cd /where/you/want/to/put/the/sourcegit clone https://github.com/johnkerl/millercd miller
makeを使う場合:- ビルドするには、
makeを実行します。数秒で完了し、Miller の実行ファイルである./mlr(Windows では.\mlr.exe)が生成されます。 - テストを実行するには、
make checkを実行します。 - インストールするには、
make installを実行します。実行ファイル/usr/local/bin/mlrとマニュアルページ/usr/local/share/man/man1/mlr.1がインストールされます(そのため、man mlrを実行できます)。 /usr/local以外の場所にインストールする場合は、make installの前に./configure --prefix=/some/install/pathを実行できます。
- ビルドするには、
makeを使わない場合:- ビルドするには、
go build github.com/johnkerl/miller/v6/cmd/mlrを実行します。 - テストを実行するには、
go test github.com/johnkerl/miller/v6/pkg/...とmlr regtestを実行します。 - インストールするには、
go install github.com/johnkerl/miller/v6/cmd/mlr@latestを実行すると、GOPATH/bin/mlrにインストールされます。
- ビルドするには、
- ソースからのビルドに関するドキュメントページも参照してください。
- 開発者向けの詳細については、README-dev.mdを参照してください。
開発者向け
ライセンス
Miller についてのユーザーの声
今日、Miller を知りました。CSV 用の jq のようなものです: https://t.co/pn5Ni241KM
— Adrien Trouillaud (@adrienjt) 2020年9月24日
また、「Miller は R や pandas などのデータ分析ツールを補完します。Miller を使ってデータをクリーンアップし、準備できます。」 @GreatBlueC @nfmcclure
あまり知られていない、スイスアーミーナイフのようなコマンドラインのチェーンソーです。
— Dirk Eddelbuettel (@eddelbuettel) February 28, 2017
「Miller は、CSV、TSV、JSON などのデータに対する awk、sed、cut、join、sort のようなものです。」 https://t.co/TrQqSUK3KK
Miller は CSV データを扱うのに最適なコマンドラインツールのようです。Sed、awk、cut、join がひとつにまとまっています: http://t.co/9BBb6VCZ6Y
— Mike Loukides (@mikeloukides) August 16, 2015
Miller は、CSV などの名前でインデックス化されたデータに対する sed、awk、cut、join、sort のようなものです: http://t.co/1zPbfg6B2W - 便利なツールです!
— Ilya Grigorik (@igrigorik) August 22, 2015
ちなみに、CSV を扱う CLI ツールとして Miller が最高だと思います。R に読み込むには大きすぎる CSV の前処理が必要なときに使っていました(今は vroom があるので、そういうケースは珍しいかもしれませんが……)https://t.co/kUjrSSGJoT
— Hiroaki Yutani (@yutannihilat_en) April 21, 2020
Miller:awk や sed などの *行を意識する* 定番ツールの制約を克服するために、@__jo_ker__ が開発した *フォーマットを認識する* データ加工ツールです。 https://t.co/LCyPkhYvt9
— Donny Daniel (@dnnydnl) September 9, 2018
プロジェクトのウェブサイトは、優れたソフトウェアドキュメントの素晴らしい見本です!!
なんてすごいデータ用スイスアーミーナイフでしょう!データベースのクリーニングや ETL の問題を解決するのに Miller を誰も勧めてくれなかったのはなぜでしょう https://t.co/JGQpmRAZLv
— James Miller (@japanlawprof) June 12, 2018
重要なデータ管理タスクに使える、驚くほど直感的なツールを開発した @__jo_ker__ におめでとうございます!#DataScienceandLaw #ComputationalLaw
🤯@__jo_ker__ の Miller は、あらゆる種類の表形式データを簡単に読み込み、変換し、書き出せます。単体で動作し、高速で、データのストリーミング処理向けに作られています(一度に 1 行ずつ処理するため、メモリより大きなファイルも扱えます)。
— Benjamin Wolfe (he/him) (@BenjaminWolfe) September 9, 2021
そして、ドキュメントが夢のようです。今朝ずっと読んでいました! https://t.co/Be2pGPZK6t
貢献者 ✨
Miller の改善に協力してくださったすべての素晴らしい方々に感謝します(絵文字一覧):
このプロジェクトは all-contributors 仕様に準拠しています。あらゆる形での貢献を歓迎します!