Python/Python Language

Numpy(λ„˜νŒŒμ΄) λ‚œμˆ˜(Random)와 뢄포도

567Rabbit 2024. 4. 24. 18:08

from numpy import random
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns

 

 

Random Numbers in NumPy (λ„˜νŒŒμ΄ λ‚œμˆ˜)
- λ¬΄μž‘μœ„λž€ λ¬Όλ¦¬μ μœΌλ‘œ λ…Όλ¦¬μ μœΌλ‘œ μ˜ˆμΈ‘ν•  μˆ˜ μ—†λŠ” μˆ˜
- λ‚œμˆ˜λ₯Ό μƒμ„±ν•˜λŠ” μ•Œκ³ λ¦¬μ¦˜
- 생성 μ•Œκ³ λ¦¬μ¦˜μ„ 톡해 μƒμ„±λœ λ‚œμˆ˜

 

 

randint()

- μ •μˆ˜λ‘œ λ‚œμˆ˜ 생성

- κ°„νŽΈν•˜κ²Œ 둜또번호 생성
lt = random.randint(46, size=(5))
print(lt)

 

 

rand()
λ¬΄μž‘μœ„ ν”Œλ‘― 생성(Random Float) 0κ³Ό 1μ‚¬μ΄μ˜ λΆ€λ™μ†Œμˆ˜μ  생성 
Float = random.rand()
print(Float)

 

 

 

 

 

Data Distribution [데이터 λ°°ν¬]
- κ°€λŠ₯ν•œ λͺ¨λ“  κ°’κ³Ό κ° κ°’이 λ°œμƒν•˜λŠ” λΉˆλ„μ˜ λͺ©λ‘
- μ΄λŸ¬ν•œ λͺ©λ‘μ€ ν†΅κ³„ λ° λ°μ΄ν„°/κ³Όν•™ μž‘업을 ν•  λ•Œ μ€‘μš”ν•˜λ‹€
- λ¬΄μž‘μœ„ λΆ„ν¬λŠ” νŠΉμ • ν™•λ₯ λ°€λ„ν•¨μˆ˜. 연속적인 ν™•λ₯ μ„ μ„€λͺ…ν•˜λŠ” ν•¨μˆ˜, 배열에 μžˆλŠ” λͺ¨λ“  κ°’μ˜ ν™•λ₯ 
- choice() λͺ¨λ“ˆμ˜ λ°©λ²•을 μ‚¬μš©ν•˜μ—¬ μ •μ˜λœ ν™•λ₯ μ„ κΈ°λ°˜μœΌλ‘œ λ‚œμˆ˜λ₯Ό μƒμ„±ν•  μˆ˜ μžˆλ‹€
- ν™•λ₯ μ€ 0κ³Ό 1μ‚¬μ΄μ˜ μˆ«μžλ‘œ μ„€μ •λœλ‹€ 0 = κ°’이 κ²°μ½” λ°œμƒν•˜μ§€ μ•ŠμŒμ„ μ˜λ―Έν•˜κ³  1 = κ°’이 ν•­μƒ λ°œμƒν•¨μ„ μ˜λ―Έν•œλ‹€

 

 

choice()
λ°°μ—΄ λ§€κ°œλ³€μˆ˜μ˜ κ°’μœΌλ‘œ κ΅¬μ„±λœ 2차원 배열을 생성
q = random.choice([3,5,7,9], p=[0.1, 0.3, 0.6, 0], size = (3,5))
print(q)

 

size??

랜덀의 ν™•λ₯ μ„ μ‘°μ •ν•œλ‹€
1차원 λ°°μ—΄ 3,5,7,9
값이 3이 λ  ν™•λ₯  0.1
값이 5κ°€ λ  ν™•λ₯  0.3
값이 7이 λ  ν™•λ₯  0.6
값이 9κ°€ 될 ν™•λ₯  0으둜 μ„€μ •ν•©λ‹ˆλ‹€

 


normal()

- μž„μ˜ μ •κ·œ 뢄포λ₯Ό μƒμ„±ν•©λ‹ˆλ‹€

e = random.normal(size=(2,3))
print(e)

- 2x3크기의 랜덀 μ •κ·œ 뢄포λ₯Ό μƒμ„±ν•©λ‹ˆλ‹€

 

 

shuffle()

- λ°°μ—΄μ˜ μš”μ†Œλ₯Ό λ¬΄μž‘μœ„λ‘œ μ„žλŠ”λ‹€ (원본을 μˆ˜μ •ν•œλ‹€)

 

 

permutation()

- μ›λž˜ λ°°μ—΄(원본)은 μž¬λ°°μ—΄ν•˜μ§€ μ•Šκ³  μž¬λ°°μ—΄λœ 배열을 보여쀀닀.

 

 

 

뢄포도

 

 

1. 이항 뢄포

 

이산뢄포λ₯Ό μ˜λ―Έν•˜λ©° λ™μ „λ˜μ§€κΈ°μ™€ 같은 이진 μ‹œλ‚˜λ¦¬μ˜€λ₯Ό μ„€λͺ…ν•œλ‹€ (μ•žλ©΄ λ˜λŠ” λ’·λ©΄)

μ„Έκ°€μ§€ λ§€κ°œλ³€μˆ˜λ₯Ό κ°€μ§„λ‹€ n(μ‹œν–‰νšŸμˆ˜) p(각 μ‹œν–‰μ˜ λ°œμƒν™•λ₯ ) size(λ¦¬ν„΄λœ λ°°μ—΄μ˜ λͺ¨μ–‘)
μ •κ·œλΆ„ν¬μ™€μ˜ 비ꡐ - μ •κ·œλΆ„ν¬λŠ” 연속적인 반면 이항은 이산적이닀

 

scale ? λ™μ „λ˜μ§€κΈ°μ— λŒ€ν•΄ 10번의 μ‹œλ„κ°€ μ£Όμ–΄μ§€λ©΄ 10개의 데이터 ν¬μΈνŠΈκ°€ μ„€μ •λœλ‹€

q = random.binomial(n=10, p=0.5, size=10) 

 

sns.distplot(random.normal(loc=50, scale=5, size=1000), hist=False, label='normal')
sns.distplot(random.binomial(n=10, p=0.5, size=1000), hist=False, label='binomial')

 

plt.show() 

 

 

 

 

2. 포아솑뢄포

 

νŠΉμ • μ‹œκ°„μ— μ΄λ²€νŠΈκ°€ λͺ‡ 번 λ°œμƒν•  수 μžˆλŠ”μ§€ μΆ”μ •ν•œλ‹€
예) ν•˜λ£¨μ— λ°₯을 λ‘λ²ˆ λ¨ΉλŠ”λ‹€λ©΄ κ·Έκ°€ λ°₯을 μ„Έλ²ˆ 먹을 ν™•λ₯ μ€ μ–Όλ§ˆλ‚˜ λ˜λŠ”κ°€?
lam : λ°œμƒλ₯  λ˜λŠ” μ•Œλ €μ§„ λ°œμƒνšŸμˆ˜ , μœ„μ˜ μ˜ˆμ‹œμ˜ κ²½μš° 2
size : λ°˜ν™˜λœ λ°°μ—΄κ°’

 

q = random.poisson(lam=2, size=10)
print(q)

#λ°œμƒ 2에 λŒ€ν•΄ μž„μ˜μ˜ 1 x 10 λΆ„포λ₯Ό μƒμ„±ν•œλ‹€


sns.distplot(random.poisson(lam=2, size =1000), kde=False)
plt.show()

 

 

 

 

          

3. 균등뢄포 

 

λͺ¨λ“  사건이 λ°œμƒν•  κ°€λŠ₯성이 λ™μΌν•œ ν™•λ₯ μ„ μ„€λͺ…ν•˜λŠ”λ° μ‚¬μš©λœλ‹€ uniform()
λ§€κ°œλ³€μˆ˜ a(ν•˜ν•œ =>기본값은 0.0) b(μƒν•œ =>기본값은 1.0) size(λ¦¬ν„΄λœ λ°°μ—΄μ˜ λͺ¨μ–‘)

 

w = random.uniform(size=(2,3))
print(w)

sns.distplot(random.uniform(size=1000), hist=False)
plt.show()

 

 

 

 

4. λ¬Όλ₯˜λΆ„포 

 

λ¬Όλ₯˜μ„±μž₯을 μ„€λͺ…ν•˜λŠ” 데 μ‚¬μš©ν•œλ‹€  logistic()
λ‘œμ§€μŠ€ν‹±, νšŒκ·€, 신경망 λ“±μ˜ λ¨Έμ‹ λŸ¬λ‹μ— κ΄‘λ²”μœ„ν•˜κ²Œ μ‚¬μš©λœλ‹€
loc(정점이 어디인지λ₯Ό μ˜λ―Έν•¨, 기본값은 0) scale(ν‘œμ€€νŽΈμ°¨, λΆ„ν¬μ˜ 평탄성) size(λ¦¬ν„΄λœ λ°°μ—΄μ˜ λͺ¨μ–‘)

 

r = random.logistic(loc=1, scale=2, size =(2,3))
print(r)
# 평균이 1이고 stddev(ν‘œμ€€νŽΈμ°¨)κ°€ 2.0인 λ‘œμ§€μŠ€ν‹±λΆ„ν¬μ—μ„œ 2 x 3 μƒ˜ν”Œμ„ κ·Έλ¦°λ‹€

sns.distplot(random.logistic(size=100),hist=False)
plt.show()

 

 

 


5. 닀항뢄포

 

이항뢄포λ₯Ό μΌλ°˜ν™” ν•œ 것이닀. λ‘˜ 쀑 ν•˜λ‚˜μΈ μ΄ν•­μ‹œλ‚˜λ¦¬μ˜€μ™€ λ‹€λ₯΄κ²Œ ν˜ˆμ•‘ν˜•, μ£Όμ‚¬μœ„μ˜ κ΅΄λ¦Ό 결과와 같은 λ‹€ν•­μ‹œλ‚˜λ¦¬μ˜€μ˜ κ²°κ³Όλ₯Ό μ„€λͺ…ν•œλ‹€.
n(κ°€λŠ₯ν•œ 결과의 수) pvals(κ²°κ³Όν™•λ₯ λͺ©λ‘) size(λ¦¬ν„΄λœ λ°°μ—΄μ˜ λͺ¨μ–‘) 

 

u = random.multinomial(n=6, pvals=[1/6, 1/6, 1/6, 1/6, 1/6, 1/6])
print(u)

sns.distplot(random.multinomial(n=6, pvals=[1/6, 1/6, 1/6, 1/6, 1/6, 1/6]),hist=False)
plt.show()

 

 

 


6. μ§€μˆ˜λΆ„ν¬

 

μ‹€νŒ¨/성곡 λ“± λ‹€μŒ μ΄λ²€νŠΈκΉŒμ§€μ˜ μ‹œκ°„μ„ μ„€λͺ…ν•˜λŠ” 데 μ‚¬μš©λœλ‹€  exponential()
scale(λΉ„μœ¨μ˜ μ—­μˆ˜=ν¬μ•„μ†‘λΆ„ν¬μ˜ 램, 기본값은 1.0) size(λ¦¬ν„΄λœ λ°°μ—΄μ˜ λͺ¨μ–‘)  


sns.distplot(random.exponential(size=1000), hist=False)
plt.show()

 

 

 


7. μΉ΄μ΄μ œκ³±λΆ„ν¬

 

κ°€μ„€κ²€μ¦μ˜ 기초둜 μ‚¬μš©λœλ‹€
df(μžμœ λ„) size(λ¦¬ν„΄λœ λ°°μ—΄μ˜ λͺ¨μ–‘)


p = random.chisquare(df=2, size=(2,3))
print(p)

 

 

 


8. λ ˆμΌλ¦¬λΆ„ν¬

 

μ‹ ν˜Έμ²˜λ¦¬μ— μ‚¬μš©λœλ‹€
scale(λΉ„μœ¨μ˜ μ—­μˆ˜=ν¬μ•„μ†‘λΆ„ν¬μ˜ 램, 기본값은 1.0이닀) size(λ¦¬ν„΄λœ λ°°μ—΄μ˜ λͺ¨μ–‘)


a = random.rayleigh(scale=2, size=(2,3))
print(a)

 

 

 


9. νŒŒλ ˆν† λΆ„ν¬

 

νŒŒλ ˆν† μ˜ 법칙을 λ”°λ₯΄λŠ” 뢄포 80-20뢄포이닀

20% μš”μΈμ΄ 80% κ²°κ³Όλ₯Ό μœ λ°œν•œλ‹€ ν•œμͺ½μœΌλ‘œ νŽΈμ€‘λœ λͺ¨μ–‘
 a(λͺ¨μ–‘ λ§€κ°œλ³€μˆ˜) size(λ¦¬ν„΄λœ λ°°μ—΄μ˜ λͺ¨μ–‘) 


sns.distplot(random.pareto(a=2, size=1000),kde=False)
plt.show()

 

 

 

 


10.  Zipf배포

 

λ‹€μ„―λ²ˆμ§Έλ‘œ κ°€μž₯ ν”ν•œ λ‹¨μ–΄λŠ” κ°€μž₯ μΌλ°˜μ μΈ λ‹¨μ–΄λ³΄λ‹€ κ±°μ˜ 1/5λ°° λ” μžμ£Ό λ‚˜νƒ€λ‚œλ‹€

λͺ¨μŒμ—μ„œ n번째 κ³΅ν†΅μš©μ–΄λŠ” κ°€μž₯ 일반적인 μš©μ–΄μ˜ 1/nλ°° μ˜μ–΄μ—μ„œ λ‹€μ„―λ²ˆμ§Έλ‘œ ν”ν•œ λ‹¨μ–΄λŠ” κ°€μž₯ 일반적인 단어보닀 거의 1/5λ°° 더 자주 λ‚˜νƒ€λ‚œλ‹€
a(뢄포 λ§€κ°œλ³€μˆ˜) size(λ¦¬ν„΄λœ λ°°μ—΄μ˜ λͺ¨μ–‘)

 

s = random.zipf(a=2, size=1000)
sns.distplot(s[s<10], kde=False)
plt.show()