web-dev-qa-db-ja.com

1Dデータへの正規分布のあてはめ

私は1次元配列を持ち、このサンプルの「平均」と「標準偏差」を計算して「正規分布」をプロットできますが、問題があります。

以下のように、データと正規分布を同じ図にプロットします。

「データ」と「正規分布」の両方をプロットする方法がわかりません

「scipy.statsのガウス確率密度関数」に関するアイデア

s = np.std(array)
m = np.mean(array)
plt.plot(norm.pdf(array,m,s))
43
Adel

matplotlibを使用して、ヒストグラムとPDF(@MrEの回答のリンクのように)をプロットできます。PDFのフィッティングと計算には、scipy.stats.norm、 次のように。

import numpy as np
from scipy.stats import norm
import matplotlib.pyplot as plt


# Generate some data for this demonstration.
data = norm.rvs(10.0, 2.5, size=500)

# Fit a normal distribution to the data:
mu, std = norm.fit(data)

# Plot the histogram.
plt.hist(data, bins=25, density=True, alpha=0.6, color='g')

# Plot the PDF.
xmin, xmax = plt.xlim()
x = np.linspace(xmin, xmax, 100)
p = norm.pdf(x, mu, std)
plt.plot(x, p, 'k', linewidth=2)
title = "Fit results: mu = %.2f,  std = %.2f" % (mu, std)
plt.title(title)

plt.show()

スクリプトによって生成されたプロットは次のとおりです。

Plot

83

正規分布と実際のデータの両方を表示するには、データをヒストグラムとしてプロットし、その上に確率密度関数を描画する必要があります。これを正確に行う方法については、 http://docs.scipy.org/doc/numpy/reference/generated/numpy.random.normal.html の例を参照してください。

3
YXD

seabornを使用してそれを行うはるかに簡単な方法があります。

import seaborn as sns
from scipy.stats import norm

data = norm.rvs(5,0.4,size=1000) # you can use a pandas series or a list if you want

sns.distplot(data)

出力:

enter image description here

詳細についてはseaborn.distplot

3
LonelyDaoist

ここでは、正規分布に適合していません。 sns.distplot(data)sns.distplot(data, fit=norm, kde=False)に置き換えるとうまくいくはずです。

2