M1 Mac (Apple Silicon) にnctoolkitをインストールする

# はじめに

nctoolkitはnetCDFの中身を簡単に解析・描画することのできるPythonパッケージです。

https://nctoolkit.readthedocs.io/en/latest/index.html

Intel Macの場合、公式ドキュメントにあるように`conda install -c conda-forge nctoolkit`でインストールできますが、Apple Silicon (M1 Mac) の場合はこのコマンドだけではインストールできませんでした。そこでインストールの手順についてメモしておきます。

https://nctoolkit.readthedocs.io/en/latest/installing.html

# 実行環境

- MacBook Air (M1, 2020)
- macOS Monterey バージョン 12.4
- Homebrew 3.5.2
- Python 3.9.13 (Mambaforgeで環境構築)

# インストール方法

## 手順まとめ

```shell
$ brew install cdo
$ brew install nco
$ mamba install -c conda-forge xarray netCDF4 hvplot panel pandas dill python-dateutil plotnine numpy scipy pandas cfgrib metpy matplotlib cartopy geoviews jupyter
$ pip install nctoolkit
```

以下では実際に試行錯誤した手順について、うまくいかなかった方法も含めて記しておきます。

## (失敗1) mambaでnctoolkitをインストール

`mamba`(`conda`)コマンドを用いてインストールしようとすると、conda-forgeリポジトリでApple Silicon (osx-arm64)用のCDOやNCOが提供されていないため、エラーになりインストールできません。

```shell
$ mamba install -c conda-forge nctoolkit
# (中略)
Encountered problems while solving:
  - nothing provides cdo needed by nctoolkit-0.2.1-pyh32f6830_1
```

## HomebrewでNCOとCDOのインストール

System dependenciesにあるCDOとNCOをHomebrewでインストールします。

```shell
$ brew install cdo
$ brew install nco
```

## 仮想環境の作成 (任意)
nctoolkitはmambaではインストールできないため、pipを用いてインストールすることにします。必須ではないですが、不具合が生じた場合にやり直しがしやすいため、ここでは新しくweatherという名前の仮想環境を作成しました。

```shell
$ mamba create -n weather python=3.9
$ mamba activate weather
```

## (失敗2) pipでnctoolkitとその依存するパッケージを全てインストール

次の方針としては、pipでnctoolkitをインストールすることです。しかし、最初から`pip install nctoolkit`として全てのパッケージをインストールすると、netCDF4ライブラリで共有ライブラリの読み込みに失敗しました。

```
>>> import nctoolkit as nc
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Users/ytakano/mambaforge/envs/nctk/lib/python3.9/site-packages/nctoolkit/__init__.py", line 1, in <module>
    from nctoolkit.api import (
  File "/Users/ytakano/mambaforge/envs/nctk/lib/python3.9/site-packages/nctoolkit/api.py", line 16, in <module>
    from netCDF4 import Dataset
  File "/Users/ytakano/mambaforge/envs/nctk/lib/python3.9/site-packages/netCDF4/__init__.py", line 3, in <module>
    from ._netCDF4 import *
ImportError: dlopen(/Users/ytakano/mambaforge/envs/nctk/lib/python3.9/site-packages/netCDF4/_netCDF4.cpython-39-darwin.so, 0x0002): symbol not found in flat namespace '_H5get_libversion'
```

これを回避するため、依存するPythonパッケージはなるべくmambaを使ってインストールすることにします。

## 手順2: 依存するパッケージをmambaでインストール
ドキュメントのPython Dependenciesに書かれているパッケージをmambaを使ってインストールします。
[requirements.txt](https://github.com/pmlmodelling/nctoolkit/blob/master/requirements.txt)に書かれている以下のパッケージのうち、ncplot以外はmambaでインストールできそうです。

```requirements.txt
xarray
netCDF4
hvplot
panel
pandas
ncplot>=0.0.5
dill
python-dateutil
plotnine
```

よって後で描画に必要なパッケージや気象のデータ解析によく使うパッケージも含めて、以下をmambaでインストールします。
```
$ mamba install -c conda-forge xarray netCDF4 hvplot panel pandas dill python-dateutil plotnine numpy scipy pandas cfgrib metpy matplotlib cartopy geoviews jupyter
```

## pipでnctoolkitをインストール

最後にpipでnctoolkitをインストールします。先ほどmambaでインストールできなかったncplotもここでインストールされます。

```shell
$ pip install nctoolkit
# (中略)
Installing collected packages: ncplot, nctoolkit
Successfully installed ncplot-0.2.2 nctoolkit-0.5.0
```

# 動作確認

今回作成したweather仮想環境に接続したノートブックカーネルを作成し、Jupyter Notebookを使って動作確認をしていきます。
```shell
$ python -m ipykernel install --user --name weather --display-name weather
$ jupyter notebook
```

ドキュメントのIntroductionに従い、適当なnetCDFファイルを開いて描画してみます。インポートを含めると3行です。

https://nctoolkit.readthedocs.io/en/latest/introduction.html

```python
import nctoolkit as nc
ds = nc.open_data("oa_sst.nc")
ds.plot()
```

![スクリーンショット 2022-06-20 14.52.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/829116/567f049d-dd96-c029-a81d-3d767ff2cff5.png)

`xarray.DataArray.plot.pcolormesh`とは異なり、空間2次元、時間1次元のデータもそのままプロットできます。表示時刻は右に表示されているスライダーで変更することができます。