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

matplotlib

はじめに

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

コード

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

解説

モジュールのインポート

データの生成

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

countmeanstdmin25%50%75%max
010000.03.5963093.2093680.181621.6193762.669914.4448648.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の最初のインデックスが取得できる。

参考

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

コメント