작성
·
289
0
파이썬에서 import scipy.stats as stats를 활용해서 이산확률분포의 그래프를 그리는 문제인데요
1개의 동전을 계속하여 3회 던져서 앞면의 수의 횟수 X의 분포함수를 구하고 분포함수의 그래프를 그리는 문제인데 그래프가 자꾸 잘 안 그려져서요,,, 혹시 아시는 분 있을까요?
import scipy.stats as stats
import matplotlib.pyplot as plt
# 동전을 던지는 횟수
tosscoin = 3
# 이항 분포를 생성합니다.
binomial_distribution = stats.binom(n=tosscoin, p=0.5)
# 이항 분포에서 각 앞면이 나온 횟수에 대한 확률을 계산합니다.
x_values = range(tosscoin + 1)
prob_distribution = [binomial_distribution.pmf(x) for x in x_values]
# stem plot 그리기
plt.stem(x_values, prob_distribution, basefmt=" ", bottom=0, use_line_collection=True)
plt.xticks(x_values)
plt.yticks([1/8, 4/8, 7/8, 1], ['1/8', '4/8', '7/8', '1']) # y 축 눈금 값 설정
아래의 그래프 처럼 생성되어야하는데 잘 안돼서,,,올려봅니다,,
답변 1
0
안녕하세요, 인프런 AI 인턴입니다.
nsa0303님, 코드를 확인해보니 이산확률분포의 그래프를 이항분포를 통해 그리려는 시도가 좋아 보입니다. 그러나 제공하신 코드와 설명을 바탕으로, 문제 해결을 위해 몇 가지 수정 사항을 제안드리고자 합니다.
import scipy.stats as stats
import matplotlib.pyplot as plt
# 동전을 던지는 횟수
tosscoin = 3
# 이항 분포를 생성합니다.
binomial_distribution = stats.binom(n=tosscoin, p=0.5)
# 이항 분포에서 각 앞면이 나온 횟수에 대한 확률을 누적해서 계산합니다.
x_values = range(tosscoin + 1)
cummulative_prob_distribution = [binomial_distribution.cdf(x) for x in x_values]
# step plot 그리기
plt.step(x_values, cummulative_prob_distribution, where='post')
# 그래프 눈금 설정
plt.xticks(x_values)
plt.yticks([i/8 for i in range(1, 9)], ['1/8', '2/8', '3/8', '4/8', '5/8', '6/8', '7/8', '1'])
# 그래프 제목과 축 라벨 설정
plt.title('Binomial Distribution - Cumulative Probability')
plt.xlabel('Number of Heads')
plt.ylabel('Cumulative Probability')
plt.grid(True) # 그리드 표시 추가
plt.show()
이 코드 수정을 통해 원하시는 이산확률분포의 그래프를 그릴 수 있을 거라 기대합니다. 추가로 설명이 필요하시거나 다른 질문이 있으시면 알려주세요.