2016-12-12 9 views
0

私はシミュレーションからサイコロの合計結果の周波数を持つ6面ダイスシミュレーションのためのPythonの累積分布関数をプロットする方法は?

  1. プロットヒストグラムにしようとしています。
  2. 累積分布関数を計算しプロットする。
  3. 中央値を見つけてプロットする。

これまでのところ、これは私が持っているものです。

import pylab 
import random 

sampleSize = 100 


## Let's simulate the repeated throwing of a single six-sided die 
singleDie = [] 
for i in range(sampleSize): 
    newValue = random.randint(1,6) 
    singleDie.append(newValue) 

print "Results for throwing a single die", sampleSize, "times." 
print "Mean of the sample =", pylab.mean(singleDie) 
print "Median of the sample =", pylab.median(singleDie) 
#print "Standard deviation of the sample =", pylab.std(singleDie) 
print 
print 

pylab.hist(singleDie, bins=[0.5,1.5,2.5,3.5,4.5,5.5,6.5]) 
pylab.xlabel('Value') 
pylab.ylabel('Count') 
pylab.savefig('singleDie.png') 
pylab.show() 




## What about repeatedly throwing two dice and summing them? 
twoDice = [] 
for i in range(sampleSize): 
    newValue = random.randint(1,6) + random.randint(1,6) 
    twoDice.append(newValue) 



print "Results for throwing two dices", sampleSize, "times." 
print "Mean of the sample =", pylab.mean(twoDice) 
print "Median of the sample =", pylab.median(twoDice) 
#print "Standard deviation of the sample =", pylab.std(twoDice) 

pylab.hist(twoDice, bins= pylab.arange(1.5,12.6,1.0)) 
pylab.xlabel('Value') 
pylab.ylabel('Count') 
pylab.savefig('twoDice.png') 
pylab.show() 

誰でもCDFをプロットする方法を私を助けてもらえますか?

答えて

0

ヒストグラムプロット関数を直接使用して、それを達成することができます。

import pylab 
import random 
import numpy as np 

sampleSize = 100 


## Let's simulate the repeated throwing of a single six-sided die 
singleDie = [] 
for i in range(sampleSize): 
    newValue = random.randint(1,6) 
    singleDie.append(newValue) 

print "Results for throwing a single die", sampleSize, "times." 
print "Mean of the sample =", pylab.mean(singleDie) 
print "Median of the sample =", pylab.median(singleDie) 
print "Standard deviation of the sample =", pylab.std(singleDie) 


pylab.hist(singleDie, bins=[0.5,1.5,2.5,3.5,4.5,5.5,6.5]) 
pylab.xlabel('Value') 
pylab.ylabel('Count') 
pylab.savefig('singleDie.png') 
pylab.show() 

## What about repeatedly throwing two dice and summing them? 
twoDice = [] 
for i in range(sampleSize): 
    newValue = random.randint(1,6) + random.randint(1,6) 
    twoDice.append(newValue) 

print "Results for throwing two dices", sampleSize, "times." 
print "Mean of the sample =", pylab.mean(twoDice) 
print "Median of the sample =", pylab.median(twoDice) 
#print "Standard deviation of the sample =", pylab.std(twoDice) 

pylab.hist(twoDice, bins= pylab.arange(1.5,12.6,1.0)) 
pylab.xlabel('Value') 
pylab.ylabel('Count') 
pylab.savefig('twoDice.png') 
pylab.show() 

pylab.hist(twoDice, bins=pylab.arange(1.5,12.6,1.0), normed=1, histtype='step', cumulative=True) 
pylab.xlabel('Value') 
pylab.ylabel('Fraction') 
pylab.show() 

お知らせ新しい行:

pylab.hist(twoDice, bins=pylab.arange(1.5,12.6,1.0), normed=1, histtype='step', cumulative=True) 

直接CDFプロットを与える必要があります。 normed = 1を指定しないと、通常の確率スケール(0-1)の代わりにパーセンテージを表すスケール(0-100)が表示されます。

他の方法もあります。例:

import pylab 
import random 
import numpy as np 

sampleSize = 100 


## Let's simulate the repeated throwing of a single six-sided die 
singleDie = [] 
for i in range(sampleSize): 
    newValue = random.randint(1,6) 
    singleDie.append(newValue) 

print "Results for throwing a single die", sampleSize, "times." 
print "Mean of the sample =", pylab.mean(singleDie) 
print "Median of the sample =", pylab.median(singleDie) 
print "Standard deviation of the sample =", pylab.std(singleDie) 


pylab.hist(singleDie, bins=[0.5,1.5,2.5,3.5,4.5,5.5,6.5]) 
pylab.xlabel('Value') 
pylab.ylabel('Count') 
pylab.savefig('singleDie.png') 
pylab.show() 

## What about repeatedly throwing two dice and summing them? 
twoDice = [] 
for i in range(sampleSize): 
    newValue = random.randint(1,6) + random.randint(1,6) 
    twoDice.append(newValue) 

print "Results for throwing two dices", sampleSize, "times." 
print "Mean of the sample =", pylab.mean(twoDice) 
print "Median of the sample =", pylab.median(twoDice) 
#print "Standard deviation of the sample =", pylab.std(twoDice) 

pylab.hist(twoDice, bins= pylab.arange(1.5,12.6,1.0)) 
pylab.xlabel('Value') 
pylab.ylabel('Count') 
pylab.savefig('twoDice.png') 
pylab.show() 

twod_cdf = np.array(twoDice) 

X_values = np.sort(twod_cdf) 
F_values = np.array(range(sampleSize))/float(sampleSize) 
pylab.plot(X_values, F_values) 
pylab.xlabel('Value') 
pylab.ylabel('Fraction') 
pylab.show() 

ここで、配列をソートして関数を作成してプロットします。

+0

非常にFedepadありがとうございます。私は今それを理解することができました。 ! – bengalurean

関連する問題