Unofficialなインストール方法となりますが,2週間ほど前からmacOSではcsvqがhomebrewでインストールできるようになっています
homebrewのFormulaファイルを追加してくださったのは @shigemk2 さんです
インストール方法
$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
$ brew update
$ brew install csvq
パッケージマネージャの利用について
元々csvqは,以下の理由からパッケージマネージャでの配布を予定していませんでした
- csvqは実行時の他パッケージへの依存関係等はなく,配布している実行バイナリひとつで動作すること
- 配布しているバイナリを使用せず自分でビルドする際も,Goの標準機能で内部の依存関係を解決できること
- パッケージマネージャを使用してのインストールやアップデートではライセンスや変更履歴を確認を疎かにしてしまいがちなので,あまりそれを助長するようなことを開発者自身がやりたくはないこと
特に3つ目の理由については人によって考え方はいろいろだとは思いますが,上記を含めたメリット,デメリットを勘案し,現状ではcsvqについてはhomebrewを含めパッケージマネージャでのインストールは公式にはサポートしない方針です
これは別にパッケージマネージャというものを否定しているわけではなく,それに利便性があることは確かですし,個人的にも各種ツールの管理等に利用させていただいています.あくまでも公式にはサポートしないということで,利用者が自己の責任においてそれを利用することは自由で良いと考えています
ということで, @shigemk2 さん,homebrewのFormulaをよろしくお願いします
おまけ
「サイゼリヤで1000円あれば最大何kcal摂れるのか」をcsvqで計算してみる
実行環境
csvq version 1.11.4
データはhttps://github.com/hodaka0714/saize_calory_maxmizationからお借りします
計算方法
円あたりのカロリーが高い順に,1000円になるまでメニューを追加
WITH RECURSIVE t (id, name, price, calorie, calorie_per_yen, total_price, total_calorie)
AS (
SELECT id, name, price, calorie, cpy, price, calorie
FROM (
SELECT INTEGER(m.id) AS id,
m.name,
INTEGER(m.price) AS price,
INTEGER(m.calorie) AS calorie,
m.calorie / m.price AS cpy
FROM menu m
WHERE m.calorie <> 0
AND m.price <= 1000
ORDER BY cpy DESC
FETCH FIRST 1 ROW
)
UNION ALL
SELECT id, name, price, calorie, cpy, price + total_price, calorie + total_calorie
FROM (
SELECT INTEGER(m.id) AS id,
m.name,
INTEGER(m.price) AS price,
INTEGER(m.calorie) AS calorie,
m.calorie / m.price AS cpy,
t.total_price,
t.total_calorie
FROM menu m, t
WHERE m.calorie <> 0
AND m.price <= 1000 - t.total_price
AND m.calorie / m.price < t.calorie_per_yen
ORDER BY cpy DESC
FETCH FIRST 1 ROW
)
)
SELECT id,
name AS `品名`,
price AS `価格`,
calorie AS `カロリー`,
calorie_per_yen AS `円当たりカロリー`,
total_price AS `累積価格`,
total_calorie AS `累積カロリー`
FROM t
ORDER BY `累積価格` ASC;
実行
$ curl -o menu.csv https://raw.githubusercontent.com/hodaka0714/saize_calory_maxmization/master/menu.csv
$ csvq -s greedy.sql -f GFM
結果
id | 品名 | 価格 | カロリー | 円当たりカロリー | 累積価格 | 累積カロリー |
---|---|---|---|---|---|---|
102 | ラージライス | 219 | 454 | 2.0730593607305936 | 219 | 454 |
73 | アーリオ・オーリオ(Wサイズ) | 574 | 1120 | 1.951219512195122 | 793 | 1574 |
25 | ポテトのグリル | 199 | 366 | 1.8391959798994975 | 992 | 1940 |