uncertaintiesは面白いPythonのモジュールで,これを使うと「だいたいこれくらい」という数値のまま計算を行える。
Pythonのみで書かれたモジュールなので,インストールは簡単。「easy_install uncertainties」などでインストールするだけで,モジュールが使えるようになる。
たとえば,世田谷から成田空港まで車で行くとする。都心はどうしても渋滞するので,巡航速度40キロ/時±5キロで成田まで向かうとするとどのくらいの時間がかかるだろうか。こういう計算をするのにuncertaintiesか便利だ。
世田谷から成田空港まではだいたい84キロある。
>>> from uncertainties import ufloat
>>> 84/ufloat((40, 5))
2.1000000000000001+/-0.26250000000000001
ufloatが「だいたいの数値」を表現するためのオブジェクトになる。引数にはタプルを渡して,1番目の要素に基数を,2番目の数値に範囲を渡す。組み込み型の数値オブジェクトと同じように計算すると,結果が表示される。2.1時間は約2時間6分,その後の「+/-0.26..」時間というのみだいたい15分になる。到着すべき時間の2時間20分くらい前に世田谷を出れば,余裕を持って間に合うということになる。
もう一つ。将来の資金を作るため,株式の長期投資をしようと思う。過去20年を見ると,株式市場はだいたい年率6.6%成長している。景気や社会状況によって増減があるはずだし,手数料,税金なども考慮して少なめに見積もり,年率4%〜6%ということにしてみよう。
30歳から,毎月5万円,年間60万積み立てるとして,60歳になるころにはいくらになっているだろうか。こんどは,ufloat()を初期化するのに文字列を渡してみた。
>>> from uncertainties import ufloat
>>> v=0
>>> r=ufloat('1.05+/-0.01')
>>> for i in range(30):
... v+=60
... v*=r
...
>>> v
4185.6473926898379+/-758.63308501808012
だいたい3500万から4500万くらいになる。金利ゼロで毎年60万,30年貯めると1800万にしかならないので,それと比べると倍になっているが,複利計算で±1%(つまり2%)違うと,かなりの差(1000万)がでてくることが分かる。
こんな風に,uncertaintiesを使うと「だいたいの数値」をそのままいろいろな計算にかけることができる「uncertainties.umath」というモジュールには,三角関数や対数などPythonの標準モジュールmathにある関数のuncertainties版があって,uncertainties型の演算に利用できる。日常の計算だけでなく,統計処理のようなより高度な演算にも応用できそうな便利なモジュールだ。