未定の部屋

主にデータサイエンス関係の記事を書きます

Anaconda・非Anacondaのそれぞれの環境でPystanを運用できるようにしてみた

※2021年7月に書いた記事を再投稿したものになります

こんにちは。最近データ分析のスキルのうちデータエンジニアリングの重要性をひしひしと感じている新入社員です。 ここでいうデータエンジニアリングは、データサイエンスを意味のある形に使えるようにし、実装、運用できるようにする力1を指しています。当たり前なんですが、データ分析の手法や理論をいくら理解していても、実務ではPC上でそれを実行できないと意味ないんですよね(-_-;)
ということで、最近はデータサイエンスだけでなくデータエンジニアリングのスキルも意識的に身に付けていて、そこで今回はPystanを使えるようにしたよ!という備忘録を書こうと思います。



なぜAnacondaと非Anacondaなのか?

どっちかでええやん!って思いますよね?自分もそう思います...笑
じゃあなんで2つやったのかというと、社用PCと自宅PCで環境が違うからです()社用PCはAnaconda入れるなって言われたので普通にPythonインストールしてpipコマンドでライブラリを追加してます。一方の自宅PCは普通に楽なのでAnacondaをドーンと入れているわけですね。そこで今回は社用PCと自宅PCの両方でPystanを使えるようにしたという感じです。

Pystanとは

PystanはPythonでStanを使うためのライブラリです。Stanっていうのはベイズ推定を高速で行えるプラットフォームで、記述したモデルをC++に変換し、それからコンパイルして実行するという特徴があります。2これにより高速で処理できるようになります。
入社して3か月がたち、どうやらベイズ統計はかなり実務応用に向いているということを知り、じゃあベイズ統計を実装してみよう!と思ったのですが、それにはStanが必須らしいということで、Pystanを入れました。(ちなみにRStanも入れましたが、Pythonよりはるかに楽でした...)

Anaconda環境でPystanを入れる

ググってみるとPystanのインストールはAnaconda環境で行っている記事が多く、割とすんなりと入れられました。
前提として、Anaconda+VSCodePythonを使っています。Anaconda+VSCodeの環境構築についてはここでは触れませんが、この記事などを参考にして整備しました。

基本的には下記のサイトをベースにしてPystanを入れました。

インストール環境

Windows 10 64 bit
Python: 3.8.8
conda: 4.10.1

conda-forgeリポジトリの追加

今回は多分やらなくてもよいのですが、なんかよさげだったので仮想環境を作る前にcondaのパッケージ参照リポジトリにconda-forgeというリポジトリを追加しておきました。conda-forgeはgithub上のコミュニティ主体のパッケージコレクションで、たくさんのパッケージを公開しており、condaのdefaultsでは見つからないパッケージをダウンロードすることが可能みたいです。下記のサイトを参考にしました。
Pystanのインストール(anaconda環境) - Qiita

仮想環境の構築

作業は基本的にAnaconda Powershell Pronpt上で行いました。
まず仮想環境を作成します。今回はpy38_pystanという名前の仮想環境を作りました。この部分は自分の好きな名前にして作成できます。また、anacondaという文字を入れておくと、Anacondaのデフォルト環境に入っているパッケージが全部入ってきます。
conda create --name py38_pystan anaconda
↓のようにすると、Pythonのバージョンを指定できます。
conda create --name py38_pystan python=3.8.8 anaconda

次に仮想環境を起動して、Pystanをインストールします。
conda activate py38_pystan
conda install pystan
PystanはC++コンパイラーを必要とするので、以下のコマンドでインストールします。
conda install libpython m2w64-toolchain -c msys2

この時、anaconda3のディレクトリの下層(自分の場合はC:\Users[ユーザー名]\anaconda3\Lib\distutils)にdistutils.cfgがあることを確認し、ファイルの内容が以下のようになっていることを確認します。なければ自分でdistutils.cfgというファイルを作成します。

[build]  
compiler=mingw32

自分の場合、..[仮想環境名(今回はpy38_pystan)]\lib\distutilsの方にはこのファイルができていてanaconda3の方にはできていないという状態だったので、anaconda3の方にdistutils.cfgを追加しました。cfg形式のファイルはこのサイトの.jsのところを.cfgに置き換えて読めばできると思います。

VSCodeで実行

コードを実行する前に、仮想環境を選択しておく必要があります。適当にpy形式かipynb形式のファイルを開いた状態でコマンドパレット(F1 or Ctrl+ Shift+ P)を開き、Python: Select Interpreterを押します。するとPythonの環境の一覧が出てくるので、その中から今回作った仮想環境(自分の場合はpy38_pystan)を選択します。なければEnter interpreter path を押し、そこに仮想環境のpython.exeまでのパスを入れて追加します。

Pystanを使ったコードは下記のサイトに書いてあるものと全く同じコードで試しました。
Pystanのインストール(anaconda環境) - Qiita
エラーが出なければ成功です!実行結果のプロットはこんな感じ↓

Pystan実行結果


非Anaconda環境でPystanを入れる

Anacondaじゃない環境かつWindowsでPystanをインストールしている記事が全然なくて、こちらは相当苦戦しました...自分が今まで仮想環境を作ったことがなく仮想環境とは?というところから調べ始めるレベルだったことや、時系列的には先にこっちで環境構築をしてからAnaconda環境で作業をしたこともあって、本当にきつかったです。調べているときになんとなく思いましたが、Pystanを使うならAnacondaかLinux環境がメジャーなんだろうなと感じました。Windowsでインストールするのは多分酔狂なんだと思います...笑
こちらはPython+ venv+ VSCodeで行いました。主に参考にしたサイトは下記のサイトです。
a. VSCode+ Python3の仮想環境構築について:

b. venvを用いた仮想環境構築について:

c. 非Anaconda環境でPystanをインストール:


インストール環境

Windows 10 64 bit
Python: 3.8.10

仮想環境の構築

作業は基本的にWindows PowerShellで行っています。
最初に、仮想環境を管理するためのフォルダーを作成します。将来複数の仮想環境を作ったときに、すべての仮想環境をこのフォルダー内に入れるイメージです。Anacondaは自動でenvsというフォルダーに全ての仮想環境が入ってくれるので非Anaconda環境でしかやらない作業だと思います。自分はC:\Users[ユーザー名]\AppData\Local\Programs\Pythonディレクトリ直下にvirtualenvsというフォルダーを作成しました。
次に、PowerShellディレクトリをvirtualenvsまで移動させ、そこでPythonのバージョンを指定して仮想環境を作成します。仮想環境の名前はpy38_pystan2_17にしました。
py -3.8 -m venv py38_pystan2_17
これだとAnacondaで作った場合とは違ってパッケージが何も入っていないので、ローカル環境で色々入れていたパッケージをまとめて仮想環境に複製しました。複製のやり方はbの「仮想環境のライブラリを共有」の部分を参考にしました。
その後、numpyとcythonが入っていることを確認したらPystanをインストールします。この時Pythonとの相性の良し悪しがあるのでバージョンに注意します。ここではcと同じバージョンを入れています。
pip install pystan==2.17.1.0

C++コンパイラのインストール

こちらではcのサイトと同様に、C++コンパイラとしてMicrosoft Visual C++をインストールしました。
ダウンロードページから「Build Tools for Visual Studio 2019」インストーラをダウンロードして実行します。(下の方のメニューにあります) Download Visual Studio 2019 for Windows & Mac

インストーラが起動したら「C++ Build Tool」にチェックを入れてインストールします。

VSCodeで実行

ここはAnacondaの時と大体同じです。
まずは仮想環境を選択します。適当なpythonファイルを開き、Python: Select Interpreterを押します。出てきたPythonの環境の一覧から今回作った仮想環境(自分の場合はpy38_pystan2_17)を選択、なければEnter interpreter path を押して仮想環境のpython.exeまでのパスを入れて追加します。ちなみに、aに書いてあるように仮想環境管理用のディレクトリのパスをVSCodePython: Venv Pathという設定項目に追加したのですが、なぜか実行環境選択画面に出てこなかったので、結局手動でpython.exeパスを追加しました。
最後にPystanを使ったコードを実行します。ここではcと同じコードを実行しました。0に近い値が出力されれば成功です! 


感想

とりあえず自宅PCでも社用PCでもStanでベイズ統計モデリングを勉強する準備が整ったので良かったです。初めての環境構築、めちゃくちゃ時間かかりました。特に非Anaconda環境での環境構築は鬼のようにしんどく、エラーに次ぐエラーを経験し英語のサイトなども見回って何とかインストールできました。仮想環境の知識がないだけでなく、コンパイラ、パスを通す、Pythonとパッケージのバージョンの相性、pipとcondaの違いなどなど、あまりにも知らないことが多かったので一つずつ地道に学んでいきました。おかげで学びは多かったですが、正直もう非Anacondaで環境構築をしたくない...
とはいえ、データエンジニアリングはどれだけ学んでも損はないと思うので、これからもコツコツと勉強していく所存です。

ではでは。