scikit-fdaをインストールするときにちょっと困ったので、解決方法を共有しておきます。
FDAについて
本題は、ただのトラブルシュートなのでscikit-fdaや関数データ解析(Functional data analysis; FDA)について簡単にまとめておきます。
経時測定データ(時間の経過や位置の変化に応じて繰り返し計測されたデータ)に対して、得られたデータと着目する事象を統計モデルによって明らかにするためにはいくつかの問題が生じます。問題は観測データの特性に依存しています。例えば、観測時点数の増加がそのままデータの次元の増加につながり推定量が不安定になることや欠損などの理由で個体ごとに観測時点数が不均一であったり、観測時点が不揃いであることから古典的な多変量解析手法を直接適用することが困難であったりします。
これらの問題を解決するため、個々のデータを関数化し、得られた関数をデータとして扱う方法が確立されました。これがFDAの基本概念です。
そんなFDAのpythonパッケージがscikit-fdaです。
scikit-fdaについては下記を参考にしてください。
https://fda.readthedocs.io/en/latest/
これのチュートリアルをするときに問題が発生しました。
ということでここからが本題です。
エラー① Could not import the lzma moduleが出てimportが完了しない
OS 10.14.6
python 3.8.2
scikit-fdaをpipでインストールした後、いざjupyterLabでimportしようとしたら
Could not import the lzma moduleが出てimportが完了しません。チュートリアルが進みません。
解決方法
結局はxzをinstall(xz形式の圧縮ファイル扱えるようにする)→ pythonを再度インストールで解決しました。
pyenvでのバージョン管理をしていたので、下記のように実施しました。
$ brew install xz
$ pip freeze > requirements.txt # uninstallするのでパッケージを戻せるように
$ pyenv uninstall 3.8.2
$ pip install requirements.txt # パッケージ環境を元に戻す
$ pyenv install 3.8.2
これでscikit-fdaをjupyerLabでimportできました。
と思ったら違うエラー出ました。
エラー② ValueError: numpy.ndarray size changed, may indicate binary incompatibility. Expected 88 from C header, got 80 from PyObjectが出てimportが完了しない
次に当たり前のように違うエラーがでて、importのところでコケてチュートリアルが進みません。
解決方法
numpyのバージョン依存らしいので(参照)
numpy 1.19.2をアップデートしました。
pip uninstall numpy
pip install numpy
これで自分の場合は、numpy1.19.2 → numpy1.20.2で解決しました。
以上でscikit-fdaをjupyterLabで使用できるようになりました。
この2行が遠かった・・・。
同じ苦しみを味わっている方のお役に立てればと心より願っております。