4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

csvqのhomebrewでのインストール

Posted at

Unofficialなインストール方法となりますが,2週間ほど前からmacOSではcsvqhomebrewでインストールできるようになっています

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円になるまでメニューを追加

greedy.sql
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
4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?