matplotlibを使って箱ひげ図+αを作成したい
python, matplotlibライブラリのみを使って, 少し手のこんだ箱ひげ図を作成していきます.
memo
import matplotlib.pyplot as plt
a = [100, 1000, 2000, 3000, 10000, 20000, 30000, 100000, 200000, 1000000]
b = [100, 1000, 2000, 3000, 10000, 20000, 30000, 100000, 200000, 1000000]
points = (a, b)
fig, ax = plt.subplots()
ax.boxplot(points)
ax.set_xticklabels(['a', 'b'])
ax.plot(1, 19243, marker='x', color='red')
ax.plot(2, 1025, marker='o', color='blue', fillstyle='none')
plt.title('Box plot')
plt.xlabel('x')
plt.ylabel('y')
plt.yscale('log')
plt.grid()
plt.show()
boxplotについては, plt.plot(x軸方向に何個目のboxか, plotするy軸の値, options)
という形で追加できる.
参考URL
matplotlibで, 軸の一部を省略したグラフの作成方法
joblibを手なづけたい
joblibの公式APIはここです. まぁとりあえずまずは試しに軽くいじっていきましょう.
import numpy as np
from joblib import Parallel, delayed
とりあえず並行処理に使いそうなParallel
モジュールとdelayed
モジュールをインポートしときましょう.
では早速並列処理を試していきます.
$0$~$9$の整数$x$について, $2^x$を並列で求めて出力するという処理をしてみましょう. パワー!!!
def power_two(x):
return 2**x
Parallel(n_jobs=10)(delayed(power_tow)(x) for x in range(1, 11))
すると,
[1, 2, 4, 8, 16, 32, 64, 128, 256, 512]
とlist形式で計算結果が返ってきます.
ちなみにParallel
モジュールのざっくりした使い方は, Parallel(並列実行数)(delayed(関数)(引数)(イテレータ))
というふうになっています.
ここでdelayed(引数)
の部分は関数にしなければうまく動きません. 例えば,
Parallel(n_jobs=10)(delayed(2**x)(x) for x in range(1, 11))
としてもTypeError: 'numpy.int64' object is not callable
と言われて失敗します.
ということで最初に関数を定義する必要があります.
では並列処理の結果どの程度計算速度が向上するのかを確認してみましょう.