Pseudozufallszahlenerzeugung

Stichprobenziehung in Python

James Chapman

Curriculum Manager, DataCamp

Was bedeutet zufällig?

{adjective} ohne Methode oder bewusste Entscheidung gemacht, getan, passiert oder gewählt.

1 Oxford Languages
Stichprobenziehung in Python

Echte Zufallszahlen

  • Aus physikalischen Prozessen erzeugt, z. B. Münzwurf
  • Hotbits nutzt radioaktiven Zerfall
  • RANDOM.ORG nutzt atmosphärisches Rauschen
  • Echte Zufälligkeit ist teuer
1 https://www.fourmilab.ch/hotbits 2 https://www.random.org
Stichprobenziehung in Python

Pseudozufallszahlenerzeugung

  • Pseudozufallszahlen sind billig und schnell
  • Nächste „Zufallszahl“ wird aus der vorherigen berechnet
  • Die erste „Zufallszahl“ wird aus einem Seed berechnet
  • Gleicher Seed erzeugt gleiche Zufallszahlen
Stichprobenziehung in Python

Beispiel: Pseudozufallszahlen

seed = 1
calc_next_random(seed)
3
calc_next_random(3)
2
calc_next_random(2)
6
Stichprobenziehung in Python

Funktionen zur Zufallszahlenerzeugung

  • Mit numpy.random voranstellen, z. B. numpy.random.beta()
function distribution function distribution
.beta Beta .hypergeometric Hypergeometrisch
.binomial Binomial .lognormal Lognormal
.chisquare Chi-Quadrat .negative_binomial Negativ-Binomial
.exponential Exponential .normal Normal
.f F .poisson Poisson
.gamma Gamma .standard_t t
.geometric Geometrisch .uniform Gleichverteilt
Stichprobenziehung in Python

Zufallszahlen visualisieren

randoms = np.random.beta(a=2, b=2, size=5000)
randoms
array([0.6208281 , 0.73216171, 0.44298403, ..., 
       0.13411873, 0.52198411, 0.72355098])
plt.hist(randoms, bins=np.arange(0, 1, 0.05))
plt.show()

Histogramm Beta-Verteilung

Stichprobenziehung in Python

Seeds für Zufallszahlen

np.random.seed(20000229)
np.random.normal(loc=2, scale=1.5, size=2)
array([-0.59030264, 1.87821258])
np.random.normal(loc=2, scale=1.5, size=2)
array([2.52619561, 4.9684949 ])
np.random.seed(20000229)
np.random.normal(loc=2, scale=1.5, size=2)
array([-0.59030264, 1.87821258])
np.random.normal(loc=2, scale=1.5, size=2)
array([2.52619561, 4.9684949 ])
Stichprobenziehung in Python

Anderen Seed verwenden

np.random.seed(20000229)
np.random.normal(loc=2, scale=1.5, size=2)
array([-0.59030264, 1.87821258])
np.random.normal(loc=2, scale=1.5, size=2)
array([2.52619561, 4.9684949 ])
np.random.seed(20041004)
np.random.normal(loc=2, scale=1.5, size=2)
array([1.09364337, 4.55285159])
np.random.normal(loc=2, scale=1.5, size=2)
array([2.67038916, 2.36677492])
Stichprobenziehung in Python

Lass uns üben!

Stichprobenziehung in Python

Preparing Video For Download...