반응형
확률의 기초를 파이썬으로 구현해보자. 데이터를 이해하고, 처리하는 방법을 익혀보자.
확률 개념
- 표본공간 (Sample Space)
표본공간은, 발생가능한 결과들의 집합입니다.
예를 들어 동전을 던져서 나올수 있는 결과들은 {‘앞’, ‘뒤’} 2가지 입니다. 즉, 표본공간 S = {‘앞’, ‘뒤’} 입니다.
import random
import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns
from collections import Counter
# '앞', '뒤' 중 랜덤하게 리턴하는 함수
def space_sample_coin():
return random.choice(['앞', '뒤'])
space_sample = []
# 5번씩 굴려서 list에 저장
for _ in range(1000):
space_sample.append("".join([space_sample_coin() for x in range(5)]))
space_sample[:10]
#결과
['앞앞뒤앞뒤', '앞앞앞앞앞', '뒤앞뒤뒤앞', '뒤앞뒤뒤앞', '앞앞뒤앞뒤', '뒤뒤앞앞뒤', '뒤앞뒤앞앞', '앞뒤앞뒤앞', '뒤뒤뒤앞뒤', '뒤앞뒤앞뒤']
# collection을 통하여, 각각의 항목이 몇번 나왔는지 dict화 할 수 있습니다.
print(Counter(space_sample))
Counter({'뒤뒤앞뒤뒤': 42, '뒤뒤앞앞뒤': 40, '뒤앞앞앞뒤': 40, '앞뒤앞뒤앞': 39, '뒤앞앞뒤뒤': 39, '앞앞뒤앞뒤': 37, '뒤앞앞앞앞': 37, '앞앞뒤앞앞': 37, '뒤앞뒤앞앞': 34, '앞뒤뒤앞뒤': 34, '뒤뒤앞뒤앞': 34, '앞앞앞앞앞': 33, '앞앞앞뒤뒤': 33, '앞뒤뒤뒤뒤': 33, '뒤앞뒤뒤앞': 32, '앞뒤앞뒤뒤': 32, '뒤뒤뒤뒤앞': 31, '앞뒤뒤뒤앞': 30, '뒤뒤뒤앞앞': 30, '뒤앞앞뒤앞': 30, '뒤앞뒤뒤뒤': 30, '뒤뒤앞앞앞': 30, '앞뒤앞앞뒤': 29, '뒤뒤뒤앞뒤': 28, '앞앞뒤뒤뒤': 27, '앞뒤뒤앞앞': 27, '앞뒤앞앞앞': 26, '앞앞뒤뒤앞': 25, '뒤앞뒤앞뒤': 24, '앞앞앞뒤앞': 23, '뒤뒤뒤뒤뒤': 18, '앞앞앞앞뒤': 16})
# 카운터의 most_common(n)를 통해서 가장 많이 나온 3가지를 확인가능
print(Counter(space_sample).most_common(3))
[('뒤뒤앞뒤뒤', 42), ('뒤뒤앞앞뒤', 40), ('뒤앞앞앞뒤', 40)]
df = pd.DataFrame(data = space_sample, columns = ['sample'])
df.head(10)
# '앞'을 카운트 해보자
def count_dice(sample):
return sample.count('앞')
df['count'] = df['sample'].map(count_dice)
df
df['sample_count'].value_counts()
3 324
2 322
1 164
4 139
5 33
0 18
Name: sample_count, dtype: int64
시각화 (matplotlib)
data = df['sample_count'].value_counts().sort_index() / 1000
data
0 0.018
1 0.164
2 0.322
3 0.324
4 0.139
5 0.033
Name: sample_count, dtype: float64
# matplotlib 시각화 도중 한글이 깨져서 폰트 추가 ########
import matplotlib.font_manager as fm
font_path = r'C:\Users\user\NanumGothic.ttf'
fontprop = fm.FontProperties(fname=font_path, size=18)
#######################################################
# figure 생성
fig = plt.figure()
fig.set_size_inches(10, 10)
# axes 설정
ax1 = fig.add_subplot(211)
ax1.set_title('앞면이 나온 횟수별 확률', fontproperties = fontprop)
# 각 확률을 누적하여 더한 것
ax2 = fig.add_subplot(212)
ax2.set_title('누적분포함수', fontproperties = fontprop)
# bar 차트로 확인
data.plot.bar(ax = ax1, color='k')
data.cumsum().plot.bar(ax = ax2, color='g')
반응형
'스터디 공간' 카테고리의 다른 글
[Programmers] 해시 - 완주하지 못한 선수 (0) | 2021.08.08 |
---|---|
[Python Data Science | 통계] 베르누이, 이항분포, 포아송분포, 지수분포 (0) | 2021.08.07 |
[프로그래머스 - SQL 기초 문제 스터디] 중성화 여부 파악하기 (STRING) (1) | 2021.04.11 |
[프로그래머스 - SQL 기초 문제 스터디] 이름에 el이 들어가는 동물 찾기 (STRING) (0) | 2021.04.11 |
[프로그래머스 - SQL 기초 문제 스터디] 루시와 엘라 찾기 (STRING) (0) | 2021.04.11 |
댓글