반응형
파이썬으로 간단하게 통계 내용을 공부해보아요. 오늘부터 열심히 달려보겠습니다.

포스팅은 타니아이 히로키님의 '누구나 파이썬 통계 분석' 책의 내용을 실습한 것입니다.
감사합니다.

소스코드와 데이터는 아래의 웹페이지에 공개되어 있습니다.
- 한빛출판네트워크(https://www.hanbit.co.kr/support/supplement_list.html)
- 깃허브(https://github.com/ghmagazine/python_stat_sample)
저번 포스팅에서 우리는 도수분포표를 사용해서 데이터를 잘 파악할 수 있었습니다.
이번 포스팅에서는 데이터를 시각화하여 파악해보겠습니다.
2.4.2 히스토그램
- 히스토그램은 도수분포표를 막대그래프로 나타낸 것입니다.
- 시각화할 때 많이 사용하는 Matplotlib 라이브러리를 사용합니다.
import matplotlib.pyplot as plt
# 그래프가 jupyter notebook에 표시되도록 함
%matplotlib inline
# 그래프의 크기(가로, 세로)를 설정합니다.
fig = plt.figure(figsize=(7, 5))
# 인수는 영역을 1X1개 지정, 하나의 영역에 그린다는 것을 의미
ax = fig.add_subplot(111)
# 계급수를 10으로 하여 히스토그램 그리기
freq, _, _ = ax.hist(english_scores, bins = 10, range = (0, 100))
# x, y축에 레이블 부여
ax.set_xlabel('score')
ax.set_ylabel('person number')
# x, y축에 눈금 표시
ax.set_xticks(np.linspace(0, 100, 10+1))
ax.set_yticks(np.arange(0, freq.max()+1))
plt.show()

- 어때요? 표로도 데이터를 파악할 수 있지만 이렇게 눈으로 확연하게 볼 수도 있죠?
- 계급폭을 줄이면, 즉 계급수를 늘리면 더 세부적으로 데이터의 분포를 볼 수 있습니다.
- 계급수를 20으로 해보면 다음처럼 히스토그램을 볼 수 있습니다.

- 모양이 다르죠? 데이터 특성에 많게 적절하게 계급을 조절해서 사용하세요!
- 이번에는 상대도수의 히스토그램을 누적상대도수의 꺾은선 그래프와 함께 그리겠습니다.
fig = plt.figure(figsize=(10, 7))
ax1 = fig.add_subplot(111)
# y축의 스케일이 다른 그래프를 ax1과 동일한 영역에 생성
ax2 = ax1.twinx()
# 상대도수의 히스토그램으로 하기 위해서는, 도수를 데이터 수로 나눌 필요가 있음
# 이것은 hist의 인수 weight를 지정하면 실현 가능
weights = np.ones_like(english_scores) / len(english_scores)
rel_freq, _, _ = ax1.hist(english_scores, bins = 25, range=(0, 100), weights=weights)
cum_rel_freq = np.cumsum(rel_freq)
class_value = [(i + (i+4))//2 for i in range(0, 100, 4)]
# 꺾은선 그래프를 그림
# 인수 ls를 '--'로 하면 점선이 그려짐
# 인수 marker를 'o'으로 하면 데이터 점을 그림
ax2.plot(class_value, cum_rel_freq, ls = '--', marker = 'o', color = 'black')
# 꺾은선 그래프의 눈금선 제거
ax2.grid(visible = False)
ax1.set_xlabel('score')
ax1.set_ylabel('relative frequency')
ax2.set_ylabel('cumulative relative freqency')
ax1.set_xticks(np.linspace(0, 100, 25+1))
plt.show()

- 표로 데이터를 보는 것과는 또 다른 느낌입니다.
2.4.3 상자그림
- 상자그림은 데이터의 산포도를 표현하는 것입니다.
- 데이터의 분포와 이상값을 시각적으로 파악할 수 있고, 개인적으로 데이터 분석을 하기 앞서, 데이터를 파악할 때 꼭 하는 작업입니다.
- 다음과 같은 구성입니다.

fig = plt.figure(figsize = (5, 6))
ax = fig.add_subplot(111)
ax.boxplot(english_scores, labels=['english'])
plt.show()

- 중앙값이 평균값보다는 작고, 낮은 점수 부분에 이상값이 보입니다.
- 대체적으로 점수가 60점 전후에 많이 모여 있다는 것을 알 수 있네요.
지금까지 1차원 데이터를 정리하는 것에 대해서 차근차근 살펴보았습니다.
감사합니다.
'Python > 통계분석' 카테고리의 다른 글
| [누구나 파이썬 통계분석]_Ch03. 2차원 데이터 정리_상관성 (1) | 2024.02.11 |
|---|---|
| [누구나 파이썬 통계분석]_Ch02.1차원 데이터 정리_도수분포표 (0) | 2024.01.11 |
| [누구나 파이썬 통계분석]_Ch02.1차원 데이터 정리_정규화 (1) | 2024.01.08 |
| [누구나 파이썬 통계분석]_Ch02.1차원 데이터 정리_산포도 지표 (1) | 2024.01.08 |
| [누구나 파이썬 통계분석]_Ch02. 1차원 데이터 정리_대푯값 (1) | 2024.01.05 |