Repository navigation
Expand file tree
/
Copy pathchartEx2.py
More file actions
85 lines (74 loc) · 3.51 KB
/
Copy pathchartEx2.py
File metadata and controls
85 lines (74 loc) · 3.51 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
# 분포와 관계를 보는 그래프
import matplotlib.pyplot as plt
import numpy as np
import krfont
krfont.apply(verbose=False)
SHOW = False
rng = np.random.default_rng(42) # 난수 고정 — 매번 같은 그림이 나온다
print('========== 산점도 : 두 값의 관계 ==========')
수량 = rng.integers(1, 13, 120)
단가 = rng.choice([2800, 3800, 4000, 4200, 4500, 5000, 5500, 5800, 6500], 120)
매출 = 수량 * 단가
fig, ax = plt.subplots(figsize=(6, 4))
ax.scatter(수량, 매출, alpha=0.5, s=30)
ax.set_title('수량과 매출의 관계')
ax.set_xlabel('수량')
ax.set_ylabel('매출 (원)')
fig.savefig('output/20_scatter.png', dpi=100, bbox_inches='tight')
plt.close(fig)
print('20_scatter.png — 점이 우상향하면 양의 관계입니다.')
print(' alpha 로 반투명하게 하면 겹친 점의 밀도가 보입니다.')
print('\n========== 히스토그램 : 값의 분포 ==========')
fig, ax = plt.subplots(figsize=(6, 4))
ax.hist(매출, bins=20, color='#4C72B0', edgecolor='white')
ax.set_title('주문 금액 분포')
ax.set_xlabel('매출 (원)')
ax.set_ylabel('건수')
ax.axvline(매출.mean(), color='crimson', linestyle='--',
label=f'평균 {매출.mean():,.0f}')
ax.legend()
fig.savefig('output/21_hist.png', dpi=100, bbox_inches='tight')
plt.close(fig)
print('21_hist.png — 막대 그래프와 다릅니다.')
print(' 막대: 정해진 항목의 크기 / 히스토그램: 연속된 값을 구간으로 나눈 개수')
print(' bins 를 바꾸면 인상이 달라집니다. 여러 값을 시도해 보세요.')
print('\n========== 박스플롯 : 분포를 요약해 비교 ==========')
그룹 = [rng.normal(70, 10, 60), rng.normal(78, 6, 60), rng.normal(65, 15, 60)]
fig, ax = plt.subplots(figsize=(6, 4))
ax.boxplot(그룹, tick_labels=['1학년', '2학년', '3학년'])
ax.set_title('학년별 점수 분포')
ax.set_ylabel('점수')
fig.savefig('output/22_box.png', dpi=100, bbox_inches='tight')
plt.close(fig)
print('22_box.png — 상자는 25~75%, 가운데 선은 중앙값, 점은 이상치입니다.')
print(' step11 의 describe() 를 그림으로 만든 것이라고 보면 됩니다.')
print('\n========== 파이 차트 : 비중 ==========')
분류 = ['음료', '베이커리', '디저트']
매출합 = [1484, 762, 756]
fig, ax = plt.subplots(figsize=(5, 5))
ax.pie(매출합, labels=분류, autopct='%1.1f%%', startangle=90,
explode=[0.05, 0, 0]) # 강조할 조각만 살짝 띄운다
ax.set_title('분류별 매출 비중')
fig.savefig('output/23_pie.png', dpi=100, bbox_inches='tight')
plt.close(fig)
print('23_pie.png')
print('''
⚠️ 파이 차트는 되도록 쓰지 마세요.
사람은 각도 차이를 잘 못 읽습니다. 30% 와 35% 를 구분하기 어렵습니다.
조각이 4개를 넘어가면 거의 읽을 수 없습니다.
같은 데이터를 가로 막대로 그리면 훨씬 정확하게 읽힙니다.
"비중" 을 보여 줘야 할 때만, 조각 3개 이하일 때만 쓰세요.
''')
print('========== 같은 데이터를 막대로 ==========')
fig, ax = plt.subplots(figsize=(6, 3))
비율 = [v / sum(매출합) * 100 for v in 매출합]
ax.barh(분류[::-1], 비율[::-1], color='#4C72B0')
for i, v in enumerate(비율[::-1]):
ax.text(v + 1, i, f'{v:.1f}%', va='center')
ax.set_xlim(0, 60)
ax.set_title('분류별 매출 비중 (막대)')
fig.savefig('output/24_pie_vs_bar.png', dpi=100, bbox_inches='tight')
plt.close(fig)
print('24_pie_vs_bar.png — 23번과 나란히 열어 어느 쪽이 읽기 쉬운지 보세요.')
if SHOW:
plt.show()