2016-07-25 3 views
0

私はデータセットの分散を、データをブートストラップ(再サンプリング)することで、その例を挙げたいと思います。PythonとMatplotlib:ブートストラップヒストグラムプロットの範囲をプロットするにはどうすればよいですか?

from numpy.random import randn 

fig,ax = plt.subplots() 

bins = arange(-5,6,0.5) 
df = pd.DataFrame(randn(3000)) 
df.hist(ax=ax, bins=bins, alpha = 0.7, normed=True) 

count_collection = [] 
for i in xrange(1,100): 
    temp_df = df.sample(frac=0.5, replace=True) 
    temp_df.hist(ax=ax, bins=bins, alpha = 0.25, normed=True) 

    count, division = np.histogram(temp_df, bins=bins) 
    count_collection.append(count) 

enter image description here

しかし、そのようなプロットは限界が見えにくいです。ヒストグラムの上限値と下限値をプロットすることが可能なのでしょうか?それで、各ビンのBoxplotのような、もっと明瞭に見えるでしょうか?範囲を示す上限/下限と

http://matplotlib.org/_images/boxplot_demo_06.png

または単に曲線?

enter image description here

私の主な問題は、各ビンのための最大/最小値を抽出している(count_collection

UPDATE:

は何範囲をプロットする良い方法だろうか?

count_collection = np.array(count_collection) 
mx = np.max(count_collection,0) 
mn = np.min(count_collection,0) 

ax.plot(division[1:]-0.25, mx, '_', mew=1) 
ax.plot(division[1:]-0.25, mn, '_', mew=1) 

enter image description here

私は、これはまだ、任意の提案を見てするのは難しいです見つけますか?最大値を抽出し、次を使用することができる分

+0

ビンニングを行う[numpy.histogram'](http://docs.scipy.org/doc/numpy/reference/generated/numpy.histogram.html)関数を見てみるとよいでしょう。プロットをせずに。それを使ってデータを取得し、それをプロットすることができます。 – BrenBarn

+0

@BrenBarn私は 'np.histogram'を知っていますが、実際にはすべてのデータを収集するために使用します。私はちょうど値のコレクションから最大/最小値を取得する方法がわからない。 – cqcn1991

+0

補足として、 'count'は' temp_df'を集めるべきではありませんか?さもなければ、それは 'df'のちょうど100の反復であるようです... – Aguy

答えて

1

:max及びminは動作することができるよう

count_collection = np.array(count_collection) 
mx = np.max(count_collection,0) 
mn = np.min(count_collection,0) 

最初の行は、ちょうど、1Dアレイのリストから2D配列に変化します。

編集:オリジナルのプロットは、正規化されたので

、半分のサンプルサイズの最大値と最小値の意味を理解するのは難しいです。

fig,ax = plt.subplots() 

bins = np.arange(-5,6,0.5) 
df = pd.DataFrame(randn(3000)) 
#df.hist(ax=ax, bins=bins, alpha = 0.7, normed=True) 
histval, _ = np.histogram(df, bins=bins) 

count_collection = [] 
for i in np.arange(1,100): 
    temp_df = df.sample(frac=0.5, replace=True) 
# temp_df.hist(ax=ax, bins=bins, alpha = 0.25, normed=True) 

    count, division = np.histogram(temp_df, bins=bins) 
    count_collection.append(count) 

count_collection = np.array(count_collection) 
mx = np.max(count_collection,0) 
mn = np.min(count_collection,0) 

plt.bar(bins[:-1], histval, 0.5) 
plt.plot(bins[:-1] + 0.25, mx*2) 
plt.plot(bins[:-1] + 0.25, mn*2) 

2倍率が2倍小さいサンプルサイズに起因してnumpy.randomインポート関数randn PDとしてPLT 輸入パンダとして 輸入matplotlib.pyplotからNP として 輸入numpyの:しかし、あなたはこのような何かを行うことができます最大値と最小値を計算するとき。 enter image description here

+0

データ視覚化に関する提案はありますか?問題のプロットを更新します。範囲をプロットする良い方法はありますか?多分エラーバーが良い選択だろうと思いますか? – cqcn1991

+0

正規化を使用しているので、これは難しいです。サンプルでは、​​ビンは、プロットされている場合、通常、高さの半分になります。だから問題はよく定義されていません。これを示すためにいくつかのコードを追加しました。 – Aguy

+0

概念的に、なぜそれは意味をなさないのですか?再サンプリングされたノーマルデータは依然として分布です。 limtは、この正規分布から導き出される限界にすぎません。私はこれが単純に分布の固有のランダム可変性を示していると思う。 – cqcn1991

関連する問題