728x90
반응형

p46 2번문제 

 

어느 대학에서 교내 음주의 찬성 여부를 재학생 100명 대상으로 조사

 

a = '찬성 찬성 찬성 무응답 찬성 무응답 찬성 반대 무응답 찬성 반대 무응답 찬성 반대 찬성 반대 찬성 찬성 무응답 찬성 찬성 반대 찬성 찬성 찬성 찬성 무응답 찬성 찬성 무응답 찬성 무응답 찬성 찬성 찬성 반대 반대 찬성 찬성 찬성 반대 반대 찬성 찬성 찬성 반대 반대 무응답 찬성 찬성 반대 찬성 반대 찬성 무응답 찬성 찬성 무응답 찬성 무응답 반대 찬성 찬성 반대 찬성 반대 찬성 반대 반대 찬성 찬성 반대 찬성 반대 찬성 찬성 반대 찬성 찬성 찬성 찬성 반대 반대 찬성 찬성 찬성 찬성 무응답 찬성 찬성 반대 찬성 찬성 찬성 반대 반대 찬성 반대 반대 무응답'
b = []
for i in a.split(' '):
    b.append(i)
print(b)
print(len(b))

['찬성', '찬성', '찬성', '무응답', '찬성', '무응답', '찬성', '반대', '무응답', '찬성', '반대', '무응답', '찬성', '반대', '찬성', '반대', '찬성', '찬성', '무응답', '찬성', '찬성', '반대', '찬성', '찬성', '찬성', '찬성', '무응답', '찬성', '찬성', '무응답', '찬성', '무응답', '찬성', '찬성', '찬성', '반대', '반대', '찬성', '찬성', '찬성', '반대', '반대', '찬성', '찬성', '찬성', '반대', '반대', '무응답', '찬성', '찬성', '반대', '찬성', '반대', '찬성', '무응답', '찬성', '찬성', '무응답', '찬성', '무응답', '반대', '찬성', '찬성', '반대', '찬성', '반대', '찬성', '반대', '반대', '찬성', '찬성', '반대', '찬성', '반대', '찬성', '찬성', '반대', '찬성', '찬성', '찬성', '찬성', '반대', '반대', '찬성', '찬성', '찬성', '찬성', '무응답', '찬성', '찬성', '반대', '찬성', '찬성', '찬성', '반대', '반대', '찬성', '반대', '반대', '무응답']


100

1. 도수표 작성

 

import collections

hashes = collections.Counter(b)
x = hashes.keys()
y = hashes.values()
c = pd.DataFrame({'응답' : x , '투표' : y})
c

도수표 작성

ratio = []
for i in c['투표']:
    ratio.append(round(i/sum(c['투표']),2)*100)

c['투표비율'] = pd.Series(ratio)
c

도수표 비율 DF

2. 도수막대그래프 작성

 

1. 도수막대그래프 두께 조절갯수 위에 표시

 

fig = plt.figure(figsize = (8,8))
fig.set_facecolor('white')

ax = sns.barplot(x=c['응답'] , y=c['투표'])
ax.set_title('대학내 교내 음주의 찬성 여부' , fontsize= 18)
ax.set_xlabel('응답' , rotation = 0 , fontsize= 15 , labelpad=15)
ax.set_ylabel('투표', rotation = 0 , fontsize = 15 , labelpad=15)
ax.set_xticklabels(x, rotation = 0 , fontsize= 15)
width = 0.5
# 막대기의 두께 in Seaborn
for bar in ax.patches:
    x = bar.get_x() # 막대 좌측 하단 x 좌표
    old_width = bar.get_width() # 기존 막대 폭
    bar.set_width(width) # 폭변경
    bar.set_x(x+(old_width-width)/2) # 막대 좌측 하단 x 좌표 업데이트

for i,txt in enumerate(c['투표']):
    b = txt
    print(b)
    if  b == max(c['투표']):
        ax.text(i, b+0.4, str(txt)+'개' , ha='center' , color = 'red' , fontweight = 'bold' , fontsize=17)
        #어디 막대, 막대기의 위쪽에
    else:
        ax.text(i, b+0.5, str(txt)+'개' , ha='center' , color = 'dimgray' , fontsize=13 , fontweight = 'bold')

 

막대 그래프

2. 도수 선그래프

fig = plt.figure(figsize = (8,8))
fig.set_facecolor('white')

ax2 = sns.lineplot(x=c['응답'] , y=c['투표'] ,  color='g', # 색상
                  linestyle='-', # 라인 스타일
                  marker='o') # 마커)
ax2.set_title('대학내 교내 음주의 찬성 여부' , fontsize= 18)
ax2.set_xlabel('응답' , rotation = 0 , fontsize= 15 , labelpad=15)
ax2.set_ylabel('투표', rotation = 0 , fontsize = 15 , labelpad=15)
ax2.set_xticklabels(x, rotation = 0 , fontsize= 15)
ax2.set_ylim(0, 70) #y축의 범위 지정
plt.show()

선 그래프

3. 상대도수 막대그래프

 

fig = plt.figure(figsize = (8,8))
fig.set_facecolor('white')

ax = sns.barplot(x=c['응답'] , y=c['투표비율'])
ax.set_title('대학내 교내 음주의 찬성 여부' , fontsize= 18)
ax.set_xlabel('응답' , rotation = 0 , fontsize= 15 , labelpad=15)
ax.set_ylabel('투표비율', rotation = 0 , fontsize = 15 , labelpad=15)
ax.set_xticklabels(c['응답'], rotation = 0 , fontsize= 15)
width = 0.5
# 막대기의 두께 in Seaborn
for bar in ax.patches:
    x = bar.get_x() # 막대 좌측 하단 x 좌표
    old_width = bar.get_width() # 기존 막대 폭
    bar.set_width(width) # 폭변경
    bar.set_x(x+(old_width-width)/2) # 막대 좌측 하단 x 좌표 업데이트

for i,txt in enumerate(round(c['투표비율'],2)): #근데 왜 round 해야하는지는 모르겠다.
    b = txt
    print(b)
    if  b == max(round(c['투표비율'],2)):
        print('왜')
        ax.text(i, b+0.4, str(txt)+'%' , ha='center' , color = 'red' , fontweight = 'bold' , fontsize=17)
        #어디 막대, 막대기의 위쪽에
    else:
        ax.text(i, b+0.5, str(txt)+'%' , ha='center' , color = 'dimgray' , fontsize=13 , fontweight = 'bold')

4. 상대도수 선 그래프

fig = plt.figure(figsize = (8,8))
fig.set_facecolor('white')

ax2 = sns.lineplot(x=c['응답'] , y=c['투표비율'],  color='g', # 색상
                   linestyle='-', # 라인 스타일
                   marker='o') # 마커)
ax2.set_title('대학내 교내 음주의 찬성 여부' , fontsize= 18)
ax2.set_xlabel('응답' , rotation = 0 , fontsize= 15 , labelpad=15)
ax2.set_ylabel('투표비율', rotation = 0 , fontsize = 15 , labelpad=15)
ax2.set_xticklabels(c['응답'], rotation = 0 , fontsize= 15)
ax2.set_ylim(0, 70) #y축의 범위 지정
plt.show()

상대도수 선그래프

5. 원그래프 (Pie Chart)

fig = plt.figure(figsize=(8,8))
fig.set_facecolor('white')

colors = sns.color_palette('bright')[0:5]

plt.pie(c.loc[:,'투표비율'] , labels=c.loc[:,'응답'], labeldistance=1.2, autopct='%.1f%%' ,textprops={'fontsize' : 15})

출처 :  [쉽게 배우는 생활속의 통계학]  [북스힐 , 이재원] 

※혼자 공부 정리용

728x90
반응형

+ Recent posts