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()