https://github.com/jo-gunhee/Data_Study/blob/master/week01/dice_game/dice_game.ipynb
확률을 공부하는데 가장 좋은 예시는 주사위입니다.
1~6이라는 경우의 수를 가지고 평균, 분산, 기댓값 등을 구해보며 확률과 통계의 기본 지식을 배울 수 있습니다.
파이썬에서도 numpy, matplotlib, pandas 등 데이터 분석을 도와주는 다양한 라이브러리가 있습니다.
데이터를 공부하며 앞으로 숙달 되어 봅시다.
import numpy as np
from scipy import stats
from matplotlib import pyplot as plt
# 1. (dice game) 1부터 6까지의 수 중에 하나의 수를 임의로 선택하는 시행을 20번 시행하여,
# 그 결과를 리스트 형태로 저장
def dice_game(number):
dice0=[]
for i in range(number):
d = np.random.randint(1,7)
dice0.append(d)
return dice0
dice = dice_game(20)
print("dice :",dice)
print("dice 갯수 :",len(dice))
# 2. 위에서 얻은 dice의 결과값을 기준으로 각 수 (1부터 6까지) 에 해당하는 빈도를 구한 후,
# 해당 빈도를 기준으로 확률값 확인
p_dice = [0]*6
for i in dice:
p_dice[i-1]+=1
print("빈도 :", p_dice)
for i in range(6):
p_dice[i] = p_dice[i]/20
print("확률 :",p_dice)
# 3. 위 2 번 결과를 나타내는 세로 막대 그래프
plt.bar(range(1,7),p_dice)
plt.show()
# 4. 위 2번 결과를 기준으로 하는 기대값과 분산
n= [1,2,3,4,5,6]
# 직접 함수 작성
def mean(q):
return sum(q)/len(q)
def expec(w):
result = 0
for i in w:
result+=i/len(w)
return result
def var(s):
vsum=0
for val in s:
vsum = vsum + (val - mean(s))**2
variance = vsum / len(s)
return variance
print("이론상의 기대값 :", expec(n))
print("이론상의 분산 :", var(n))
print()
print("위 2번 실험의 기대값 :", expec(dice))
print("위 2번 실험의 분산 :",var(dice))
# numpy 활용
#num_var = np.var(dice)
#print(num_var)
# 5. 위의 dice game 을 20번 대신 200번 수행한다면,
# 현재의 결과가 바뀔 수 있는 지 아니면, 유지될 수 있는가
exp_list = []
var_list = []
exp_list.append(expec(n))
var_list.append(var(n))
min0 = 20
max0 = 20001
#min0 = input("최소 숫자 :")
#max0 = input("최대 숫자 :")
while(min0 < max0):
exp_list.append(expec(dice_game(min0)))
var_list.append(var(dice_game(min0)))
min0*=10
print(exp_list)
print(var_list)
print("\n이론상의 기대값 :", exp_list[0])
print("이론상의 분산 :", var_list[0])
print("\n20번 수행")
print("기대값 :", exp_list[1])
print("분산 :",var_list[1])
print("\n200번 수행")
print("기대값 :", exp_list[2])
print("분산 :", var_list[2])
print("\n2000번 수행")
print("기대값 :", exp_list[3])
print("분산 :",var_list[3])
print("\n20000번 수행")
print("기대값 :", exp_list[4])
print("분산 :",var_list[4])
plt.plot(exp_list,'ro')
plt.axis([-0.5,4.5,min(exp_list)-0.05,max(exp_list)+0.05])
plt.grid()
plt.title("수행 횟수에 따른 기대값")
plt.ylabel("기대값")
plt.xlabel("수행 횟수")
plt.xticks(np.arange(0,5,1), ['이론', '20번', '200번', '2,000번','20,000번'])
plt.hlines(exp_list[0],0,4,color="blue", linestyles='solid', linewidth=2)
plt.show()
plt.plot(var_list,'ro')
plt.axis([-0.5,4.5,min(var_list)-0.05,max(var_list)+0.05])
plt.grid()
plt.title("수행 횟수에 따른 분산값")
plt.ylabel("분산값")
plt.xlabel("수행 횟수")
plt.xticks(np.arange(0,5,1), ['이론', '20번', '200번', '2,000번','20,000번'])
plt.hlines(var_list[0],0,4,color="blue", linestyles='solid', linewidth=2)
plt.show()
print("결론 : Dice game의 수행 횟수를 증가시키면 이론상의 수치로 점차 가까워지는 모습을 보여준다.")
print("따라서 수행횟수에 따라 현재의 결과는 얼마든지 변할 수 있다.")
ps: 만약 plt를 통해 그래프를 그렸는데 한글 깨짐 현상이 발생한다? 하시면
import os
if os.name == 'posix':
plt.rc("font, family="AppleGothic")
else:
plt.rc("font", family="Malgun Gothic")
위 코드를 넣어주시면 됩니다~
'컴공 공부 > 데이터 분석' 카테고리의 다른 글
파이썬 graphviz 에러 해결 (3) | 2021.10.07 |
---|