★collections.Counter()★itertools.groupby()★순열,조합 , 중복조합 , 중복순열★기초통계학-[Chapter04 - 연습문제-01]
1. 10P2 , 5P3 , 5C3 , (10 , 2)
# 1. 10 P 2
a = len(list(itertools.permutations([i for i in range(10)] , 2)))
a
==> 90
# 2. 5 P 3
a = len(list(itertools.permutations([i for i in range(5)] , 3)))
a
==> 60
# 3. 5 C 3
a = len(list(itertools.combinations([i for i in range(5)] , 3)))
a
==> 10
# 4. (10 ,2 )
a = len(list(itertools.combinations([i for i in range(10)] , 2)))
a
==> 45
2. 경우의 수
1> 주사위 5번 던지는 경우의 표본점의 수
※표본점이란 ?
==> 통계적 실험시 나타날 수 있는 개개의 실험 결과
a = len(list(itertools.product(np.arange(1,7) , repeat = 5)))
a
==> 중복 순열 Product 활용!
==> 7776
2> 동전 10번 던지는 경우의 표본점의 수
a = len(list(itertools.product(np.arange(2) , repeat= 10)))
a
==> 중복 순열 Product 활용!
==> 1024
3> 52장의 카드에서 3장의 카드를 차례대로 뽑는 경우의 수
a = len(list(itertools.permutations(np.arange(52) , 3)))
a
==> 순열 Permutations 활용!
==> 132600
4> 빨간공 5개와 파란 공 5개가 들어있는 주머니에서 순서 고려하지 않고 빨간 공 2개와 파란 공 3개 꺼내는 경우의 수
red = ['red' for i in range(5)]
blue = ['blue' for i in range(5)]
a = len(list(itertools.combinations(red , 2))) + len(list(itertools.combinations(blue , 2)))
a
==> 조합 Combinations 활용!
==> 20
3. 경우의 수_2
1> 문자 a,b,c,d를 순서 고려하여 배열
a = ['a' , 'b' , 'c' , 'd']
b = list(itertools.permutations(a, 4))
print(b)
print(len(b))
==> 순열 Permutations 활용!
==> 24
2> 문자 a,e,i,o,u 에서 3개 택하여 순서 고려하여 나열
a = ['a' , 'e' , 'i' , 'o' , 'u']
b = list(itertools.permutations(a, 3))
print(b)
print(len(b))
==> 순열 Permutations 활용!
==> 60
3> 문자 a,e,i,o,u 에서 중복 허락하여 3개 택하여 순서 고려하여 나열
print(len(b))
#%%
b = list(itertools.product(a , repeat = 3))
print(b)
print(len(b))
==> 순서 고려이므로 중복순열 Product 활용!
==> 125
4> 문자 a,e,i,o,u 에서 중복 허락하여 3개 택하여 순서 고려하지 않고 선택
b = list(itertools.combinations_with_replacement(a, 3))
print(len(b))
print(b)
==> 순서 고려하지 않고 중복조합 combinations_with_replacement 활용!
==> 35
4. 동전을 4번 던질 때 사건 구하기
1> 표본공간
※표본공간이란 ? 모든 결과들의 집합 의미
a = list(itertools.product(np.arange(2) , repeat = 4))
print(a)
print(len(a))
==> 16
2> 앞면이 꼭 2번 나오는 사건
c = list(filter(lambda x : collections.Counter(x).most_common()[0][1] >=2 and collections.Counter(x).most_common()[0][0] ==1 ,a))
c
==> Filter 함수 와 most_common , collections.Counter() 기억하자!!!!!
[(0, 1, 1, 1), (1, 0, 0, 1), (1, 0, 1, 0), (1, 0, 1, 1), (1, 1, 0, 0), (1, 1, 0, 1), (1, 1, 1, 0), (1, 1, 1, 1)]
3> 처음 2번의 결과에서 뒷면이 나오는 사건
c = list(filter(lambda x : collections.Counter(x).most_common()[0][0] == 0 and collections.Counter(x).most_common()[0][1] >=2, a) )
d = []
for i in c:
d = [j for j,k in itertools.groupby(i)]
if len(d)<3:
print(i)
(0, 0, 0, 0)
(0, 0, 0, 1)
(0, 0, 1, 1)
(1, 0, 0, 0)
4> 처음 3번 연속하여 동일한 면이 나오는 사건
from itertools import groupby
c = list(filter(lambda x : collections.Counter(x).most_common()[0][1] ==3 ,a))
# c
# a = []
d= []
for i in c:
d = [a for a , b in groupby(i)]
if len(d)==2:
print(i)
==> [a for a , b in groupby(i) ] ==> [0,1] [0,1,0] ==> 중복된 것들 갖고 온다.
(0, 0, 0, 1)
(0, 1, 1, 1)
(1, 0, 0, 0)
(1, 1, 1, 0)
5> 앞면과 뒷면 또는 뒷면과 앞면이 번갈아 나오는 사건
c = list(filter(lambda x : collections.Counter(x).most_common()[0][1] == 2 , a))
d = []
for i in c:
d = [j for j,k in itertools.groupby(i)]
if len(d)==4:
print(i)
(0, 1, 0, 1)
(1, 0, 1, 0)
출처 : [쉽게 배우는 생활속의 통계학] [북스힐 , 이재원]
※혼자 공부 정리용
'기초통계 > 순열,조합' 카테고리의 다른 글
★lambda , filter★기초통계학-[Chapter04 - 연습문제-03] (1) | 2022.12.12 |
---|---|
★lambda , filter★기초통계학-[Chapter04 - 연습문제-02] (0) | 2022.12.12 |
★전확률 공식★베이즈 정리★기초통계학-[Chapter04 - 확률-06] (0) | 2022.12.12 |
★독립사건 종속사건★조건부 확률★기초통계학-[Chapter04 - 확률-05] (0) | 2022.12.12 |
그래프그리기!!★ax.set_xscale('log')★SNS.lineplot()★로그변환★경험,대수법칙, 주관적 확률★기초통계학-[Chapter04 - 확률-04] (1) | 2022.12.11 |