[matplotlib] 52. 対数正規分布データのヒストグラムに最頻値、中央値、平均値を表示

matplotlib

はじめに

numpyのrandom.lognormal()で対数正規分布に従うランダムな要素を生成し、matplotlibのplt.histでヒストグラムを作成する。そして、ヒストグラムに最頻値、中央値、平均値を表示する方法について説明する。

コード

解説

モジュールのインポート

データの生成

np.random.lognormal(mu, sigma, 10000)で対数正規分布に従うランダムな要素を生成する。muは平均でsigmaは標準偏差となる。生成したデータの主な統計値は以下のようになる。この統計量はdescribeで取得できる。

count mean std min 25% 50% 75% max
0 10000.0 3.596309 3.209368 0.18162 1.619376 2.66991 4.44486 48.417122

DataFrameから平均と中央値をスライスで取得する。.ilocとすることでnp.arrayのようにスライスできる。

ヒストグラムの表示

ヒストグラムのビンはbins = np.linspace(0,np.percentile(data, 98))とすることで0からデータの98パーセンタイルまでとした。
ヒストグラムはfreq,binn,_ = ax.hist(data,bins=bins,color=’C5′,alpha=0.5, clip_on=False)で表示できる。
freqが頻度となる。
最頻値はヒストグラムのピーク値に該当するので、np.argmax(freq)で頻度が最大となるインデックスを取得して、ヒストグラムデータを使いグラフ上に長細いプロットを表示する。

同様に、中央値と平均値もプロットする。
np.where(bins>median)[0][0]とすることでmedianより大きいbinsの最初のインデックスが取得できる。

コードをダウンロード(.pyファイル)

コードをダウンロード(.ipynbファイル)

参考

対数正規分布 - Wikipedia
numpy.random.lognormal — NumPy v1.9 Manual

コメント