雑記 in hibernation

頭の整理と備忘録

Google ColabでPyStanがインポートできなくなってた件

1. PyStanがインポートできない

ちょうど今年の5月ごろ、こんな記事を書きました。

toeming.hatenablog.com

「何かと環境構築がダルいらしいPyStanだけど、Google Colaboratoryならわざわざinstallしなくてもpystanが使えちゃうよ」ってな記事だったのですが、その後異変が。

それは上記の記事のリリースから2ヶ月経った7月ごろ、久しぶりにpystanをいじろうと以下を実行したところ発生しました。

#pystanのインポート
import pystan
---------------------------------------------------------------------------
ModuleNotFoundError                       Traceback (most recent call last)
<ipython-input-1-3bed4a8a68f5> in <module>
      1 #pystanのインポート
----> 2 import pystan

ModuleNotFoundError: No module named 'pystan'

---------------------------------------------------------------------------
NOTE: If your import is failing due to a missing package, you can
manually install dependencies using either !pip or !apt.

To view examples of installing some common dependencies, click the
"Open Examples" button below.
---------------------------------------------------------------------------


いや、めちゃめちゃエラー出てるんだが。

2. で、ちょっと調べてみる

月並みに再インストールとかも試してみたのですが、状況は好転せず。調べてみると、twitterでも同様の現象にぶち当たっている人がちらほらいらっしゃるようでした。

不思議だったのが、こちらの記事。Kaggleのカーネルでも同時期に同じような現象が起きてるっぽい。つまり、Google Colabでなく、PyStan側の何某かに原因がありそう。

matsuo-san.hatenablog.com


で、「まあバージョンの問題ならアップデートされるなり有識者の情報が出てくるなり、時が解決してくれるやろ」とか思いつつしばらく放置していたのですが、つい先日、Twitter上で運よくこんな情報をキャッチしました。


え、ライブラリ名が変わってんのマジで。

公式のドキュメントを見てみると、クイックスタートに以下のコードの記載がありました。

import stan

schools_code = """
data {
  int<lower=0> J;         // number of schools
  real y[J];              // estimated treatment effects
  real<lower=0> sigma[J]; // standard error of effect estimates
}
parameters {
  real mu;                // population treatment effect
  real<lower=0> tau;      // standard deviation in treatment effects
  vector[J] eta;          // unscaled deviation from mu by school
}
transformed parameters {
  vector[J] theta = mu + tau * eta;        // school treatment effects
}
model {
  target += normal_lpdf(eta | 0, 1);       // prior log-density
  target += normal_lpdf(y | theta, sigma); // log-likelihood
}
"""

schools_data = {"J": 8,
                "y": [28,  8, -3,  7, -1,  1, 18, 12],
                "sigma": [15, 10, 16, 11,  9, 11, 10, 18]}

posterior = stan.build(schools_code, data=schools_data)
fit = posterior.sample(num_chains=4, num_samples=1000)
eta = fit["eta"]  # array with shape (8, 4000)
df = fit.to_frame()  # pandas `DataFrame, requires pandas

※上記リンク先のクイックスタートの引用です


いや、めちゃめちゃライブラリ名変わってるんだが。いつの間に"stan"になっとるんや。

3. 試してみる。

ってことで、こちらをGoogle Colabで実行してみます。

#pystanのインポート
import stan


はい、普通にエラーなく通りました。

モデリングまで試せてないですが、多分これでこれまで通り使えるんじゃないかと思います(ダメだったら記事更新します)。

4. おわりに

ってことで、PyStan突然使えなくなった問題を解消しました。

いやしかし、ライブラリ名って結構カジュアルに変わるもんなんですね、、、(それとも今回が特殊なパターンなのかな)