一部の界隈ではとても人気のあるNYSOL:Mコマンドですが、実はVersion3が最近ひっそり公開されています。
注意
※10月6日の段階ではMacでかつXcode9では、ビルドが通りません。Xcode8ではビルドが通ります。
どうしても更新したい場合は、Xcode8にダウングレードしてみてください。
開発者に対応いただき、少し手を加えることで、Buildが通るようになりました。
対応方法は「Xcode9でうまくビルドできない場合」を確認ください。
NYSOLって何
NYSOLはCSVデータの高速加工と大学の先生方が考えた最先端のアルゴリズムを無償提供するコマンド群です。
幾つかのパッケージに分かれています。
- 松(Mコマンド) : 前処理に関わるコマンド群です。
データサイエンティスト必見!M-1グランプリに速度比較が上がっていますので参考にしていただければと思います。
- 竹 : バスケット分析などに使われるパターン抽出プログラムなどをまとめたパッケージ
- 零 : 高速に経路列挙するアルゴリズムであるZDDを使用するためのライブラリ
(ZDDについてはこちらを見てください『フカシギの数え方』 おねえさんといっしょ! みんなで数えてみよう! - YouTube)
などがあります。その他にもパッケージが有りますので詳しくはNYSOL HPを見てください。
最新版はどこにあるのか
GitHubにあります。↓
https://github.com/nysol/mcmd
何が変わったのか?
リファレンスマニュアルによるとv3はGitHub登録とのこと。
その他の改訂としては以下が在るようです。(詳しくはリファレンスマニュアルを見てください。)
- 幾つかのコマンドのパラーメーター仕様の変更
- -params
パラメータ(各コマンドのパラメータリストの出力)の追加
- mdformat
でミリ秒対応
- 幾つかのコマンドの追加
- bugfix
インストール方法
GitHubのREADMEを見ていただくか(英語)、READMEの日本語版であるHome · nysol/mcmd Wikiを
見ていただければ、インストールできるようになっていますので、そちらを参照いただきたい。
ざっくり、前提となるライブラリ(c++boost, lib2xml)などが導入されていれば
git clone https://github.com/nysol/mcmd.git
cd mcmd
aclocal
autoreconf -i
automake --add-missing
./configure
make
sudo make install
で、導入できます。
Xcode9でうまくビルドできない場合
10月6日の段階ではMacでかつXcode9では、ビルドが通らず
kgwindow.lo kgxml2csv.lo ../../src/kgmod/libkgmod3.la -lboost_filesystem -lboost_system -lboost_regex -lpthread
libtool: link: g++ -dynamiclib -Wl,-undefined -Wl,dynamic_lookup -o .libs/libmcmd3.1.dylib .libs/kgaccum.o .libs/kgarff2csv.o .libs/kgavg.o .libs/kgbest.o .libs/kgbucket.o .libs/kgcal.o .libs/kgcat.o .libs/kgchgnum.o .libs/kgchgstr.o .libs/kgchkcsv.o .libs/kgcombi.o .libs/kgcommon.o .libs/kgcount.o .libs/kgcross.o .libs/kg2cross.o .libs/kgcsv2arff.o .libs/kgcsv2json.o .libs/kgcsvconv.o .libs/kgcut.o .libs/kgdata.o .libs/kgdformat.o .libs/kgdelnull.o .libs/kgdsp.o .libs/kgduprec.o .libs/kgfldname.o .libs/kgfsort.o .libs/kghashavg.o .libs/kghashsum.o .libs/kginput.o .libs/kgjoin.o .libs/kgkeybreak.o .libs/kgmbucket.o .libs/kgmseldsp.o .libs/kgmvavg.o .libs/kgmvsim.o .libs/kgmvstats.o .libs/kgnewnumber.o .libs/kgnewrand.o .libs/kgnewstr.o .libs/kgnjoin.o .libs/kgnormalize.o .libs/kgnrcommon.o .libs/kgnrjoin.o .libs/kgnullto.o .libs/kgnumber.o .libs/kgpadding.o .libs/kgpaste.o .libs/kgproduct.o .libs/kgrand.o .libs/kgrjoin.o .libs/kgminput.o .libs/kgsed.o .libs/kgsel.o .libs/kgseldsp.o .libs/kgselrand.o .libs/kgselstr.o .libs/kgselnum.o .libs/kgsep.o .libs/kgsep2.o .libs/kgsetstr.o .libs/kgshare.o .libs/kgshuffle.o .libs/kgsim.o .libs/kgslide.o .libs/kgsplit.o .libs/kgstats.o .libs/kgsum.o .libs/kgsummary.o .libs/kgtab2csv.o .libs/kgtee.o .libs/kgtonull.o .libs/kgtra.o .libs/kgtrafld.o .libs/kgtraflg.o .libs/kguniq.o .libs/kgvcat.o .libs/kgvcommon.o .libs/kgvcount.o .libs/kgvdelim.o .libs/kgvjoin.o .libs/kgvnullto.o .libs/kgvdelnull.o .libs/kgvreplace.o .libs/kgvsort.o .libs/kgvuniq.o .libs/kgwindow.o .libs/kgxml2csv.o -L/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.13.sdk/usr/lib -lxml2 -lz -licucore -lm ../../src/kgmod/.libs/libkgmod3.dylib -lboost_filesystem -lboost_system -lboost_regex -lpthread -g -O2 -install_name /usr/local/lib/libmcmd3.1.dylib -compatibility_version 2 -current_version 2.0 -Wl,-single_module
ld: file not found: /usr/lib/system/libsystem_darwin.dylib for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[2]: *** [libmcmd3.la] Error 1
make[1]: *** [all-recursive] Error 1
make: *** [all-recursive] Error 1
というエラーが出ることがわかっています。
情報お持ちの方いれば連絡ください。
なお、Ubuntu,Xcode8ではビルドが通ることは確認できています。
開発者に対応いただき、ビルドが通るようになりました。
開発者いわくlibxml関係でうまくリンクできなかったとのこと、
MAC, Xcode9の方は最新のものをクローンし直して、以下のようにconfigure
のオプションを変更してみてください。
git clone https://github.com/nysol/mcmd.git
cd mcmd
aclocal
autoreconf -i
automake --add-missing
./configure --with-libxml2header=/usr/include/libxml2 --with-libxml2=/usr/lib
make
sudo make install
当方の環境で場ビルドができました。
boostの最新版を導入する場合
Boost C++ Librariesより最新パッケージをダウンロードし、
wget https://dl.bintray.com/boostorg/release/1.65.1/source/boost_1_65_1.tar.gz # 2017-10-5時点最新
tar zxvf boost_1_65_1.tar.gz
cd boost_1_65_1
./bootstrap.sh
mkdir $HOME/local
./b2 install --prefix=$HOME/local #prefixは適宜変更してください
詳細なビルドオプションなどはBoostライブラリのビルド方法 - boostjpを参考にすればいいと思います。
その他
Mコマンド以外の対応はまだ終わってないようにも聞いていますし、一部のコマンドの仕様が変わっていますので、v2を使っている方が乗り換えるのがいいのかどうかは、それぞれの状況次第かなとは思います。
面白い取り組みとしては、Pythonとバインディングするライブラリが登録されていることでしょうか、Ruby同様にPythonを通して実行できる日がやってきました。
今後が楽しみですね。