통계
평균
데이터 값을 모두 더한 후 데이터 개수로 나눈 값.
중앙값
전체 데이터를 크기 순서대로 일렬로 늘어 놓았을 때 중간에 위치한 값.
전체 데이터 개수가 짝수일 때는 중간의 두 데이터의 평균을 계산한다.
분위수
순서대로 나열된 데이터를 일정한 간격으로 나누는 기준점.
예를 들어 사분위수는 데이터를 4등분하며, 25%, 50%, 75%에 위치한 값이다.
백분위수는 데이터를 100개의 구간으로 나눈다.
분산
데이터가 평균에서 얼마나 멀리 퍼져 있는지를 알려주는 값.
각 데이터를 평균에서 뺀 다음 제곱한 후 전체 데이터 개수로 나누어 구한다.
표준편차
분산의 제곱근.
데이터의 분포 정도를 알려준다.
표준편차는 원본 데이터와 단위가 같기 때문에 분산보다 해석하기 쉬워 자주 쓰인다.
최빈값
데이터에서 가장 많이 등장하는 값.
숫자와 문자 데이터에 모두 적용 가능하다.
통계 핵심 함수
함수/메소드 | 기능 |
---|---|
DataFrame.describe() | 데이터프레임의 기술통계량을 출력한다. |
Series.mean() | 데이터에서 평균을 계산한다. |
numpy.mean() | 입력된 배열의 평균을 계산한다. |
Series.median() | 데이터에서 중앙값을 찾는다. |
numpy.median() | 입력된 배열의 중앙값을 찾는다. |
Series.quantile() | 데이터에서 분위수를 계산한다. |
numpy.quantile() | 입력된 배열의 분위수를 계산한다. |
Series.var() | 데이터의 분산을 계산한다. |
numpy.var() | 입력된 배열의 분산을 계산한다. |
Series.std() | 데이터의 표준편차를 계산한다. |
numpy.std() | 입력된 배열의 표준편차를 계산한다. |
Series.mode() | 데이터에서 최빈값을 찾는다. |
그래프
맷플롯립
matplotlib은 파이썬의 대표적인 그래프 패키지이다.
산점도, 히스토그램, 상자 수염 그림을 비롯하여 막대 그래프, 선 그래프 등 많은 종류의 그래프를 지원한다.
또한 그래프의 구성 요소를 다양하게 제어할 수 있는 많은 옵션을 제공한다.
산점도
데이터를 화면에 뿌리듯 그리는 그래프를 의미한다.
좀 더 형식적으로 말하면, 두 변수 혹은 두가지 특성 값을 직교 좌표계에 점으로 나타내는 그래프이다.
주로 pyplot의 scatter()
메소드를 통해 그리게 된다.
히스토그램
수치형 특성의 값을 일정한 구간(bin)으로 나누어 구간 안에 포함된 데이터 개수를 막대 그래프로 그린 것.
이때 구간 안에 속한 데이터 개수를 ‘도수(frequency)’라고 한다.
주로 pyplot의 hist()
메소드를 통해 그리게 된다.
참고: 히스토그램에 나오는 구간과 도수를 표로 요약한 것을 ‘도수분포표’라고 한다.
상자 수염 그림
상자 수염 그림은 최솟값
, 세 개의 사분위수
, 최댓값
이렇게 다섯 개의 숫자를 사용해 데이터를 요약하는 그래프를 의미한다.
여기서 제 1사분위수와 제3사분위수 사이의 거리를 IQR(interquartile range) 라고 한다.
주로 pyplot의 boxplot()
메소드를 통해 그리게 된다.
Matplotlib.pyplot의 주요 함수/메소드
함수/메소드 | 기능 |
---|---|
plt.scatter() | 2차원 평면에 산점도를 그린다. |
plt.hist() | 히스토그램을 그린다. |
plt.boxplot() | 상자 수염 그림을 그린다. |
plt.xscale() | x축의 스케일을 지정한다. |
plt.yscale() | y축의 스케일을 지정한다. |
np.random.seed() | 난수의 시드값을 고정한다. |
np.random.randn() | 표준정규분포를 따르는 난수를 생성한다. |
Matplotlib
맷플롯립은 크게 다음 세가지 객체를 사용하여 그래프를 구성한다.
- 피겨(Figure)
- rcParams
- 서브플롯(subplot)
다음 세가지에 대해 알아보면서 맷플롯립을 이해해보도록 하자.
Figure 객체
맷플롯립의 Figure는 모든 그래프 구성 요소를 담고 있는 최상위 객체로, 그래프를 그릴 때 figure() 함수로 피겨 객체를 명시적으로 생성하면 다양한 그래프 옵션을 조절할 수 있다.
hist(), scatter(), boxplot() 모두 내부적으로 figure 객체를 만든다.
주로 figure객체를 직접 생성하는 경우, 다음과 같은 것들을 조정한다.
- 크기 및 해상도
figsize=(가로인치, 세로인치)
: 논문·보고서 규격에 맞추거나 화면 비율 조정dpi
: 출력 해상도 (화면·인쇄용 차이 반영)
- 배경·테두리 색상
facecolor
: 그림 배경색edgecolor
: 테두리 색frameon=False
: 테두리 제거
- 레이아웃 자동 조정
constrained_layout=True
: Matplotlib 3.2 이상 권장- 이후
fig.tight_layout()
으로 여백·레이블 겹침 최소화
- 서브플롯 및 축(axes) 추가
fig.add_subplot()
또는fig.add_axes()
: 자유도 높은 위치·크기 지정GridSpec
활용한 복잡한 레이아웃 구성
이렇게 만들어진 figure 객체는 plt.show() 호출 시 소멸된다.
rcParams 객체
rcParams는 맷플롯립 그래프의 생성 시 기본값을 관리하는 객체이다.
rcParams 객체는 객체에 담긴 값을 출력하는 것 뿐만 아니라, 새로운 값으로 바꿀 수도 있다.
산점도의 옵션을 바꿔보며 빠르게 이해해보자.
현재 산점도의 마커 모양 바꾸기
기본적으로 산점도는 점(.) 모양으로 마커를 표기하고 있다.
해당 기본값을 rcParams를 통해 확인해보자.
이 마커를 별 모양으로 바꿀 수 있을까?
다음과 같이 별 모양으로 바꾸게 될 때, 산점도의 변화를 파악해보자.
마커가 별 모양으로 바뀐 것을 확인할 수 있었다.
하지만 이는 해당 pyplot의 기본 값을 바꾼 형태이기 때문에, 이후 생성되는 모든 산점도의 마커가 별(*)모양으로 표기되게 된다.
그렇기 때문에 일시적으로 특정 마커를 사용하는 산점도를 만들고 싶을 땐 아래 방식을 이용한다.
scatter() 호출 시, 파라미터로 marker=십자(+)를 사용하여, 이번에 생성되는 산점도에 한에 마커를 +로 바꿀 수 있었다.
더욱 많은 마커 옵션은 해당 링크에서 확인 가능하다.
https://matplotlib.org/stable/api/markers_api.html
피겨 생성 시의 기본값을 알거나 바꾸고 싶다면, rcParams를 찾아보자.
서브플롯(subplot)
하나의 피겨 객체 안에는 여러개의 서브플롯(subplot)을 담을 수 있다.
서브플롯이란 맷플롯립의 Axes 클래스의 객체를 말하며, 하나의 서브플롯은 두개 이상의 축(Axis)을 포함한다.
서브플롯을 정의하려면 subplots()
메소드에 원하는 서브플롯 개수를 지정하면 된다.
서브플롯 메소드는 피겨 객체와 각 서브플롯을 나타내는 Axes 객체의 배열을 반환한다.
Axes 객체의 배열로 특정 Axes에 접근하고, 해당 Axes가 표현할 그래프를 지정한 뒤 fig.show()를 호출한다.
한 피겨 안에 포함할 Axes 객체의 개수를 행과 열의 크기 형태로 지정 가능하다.
fig, axs = plt.subplots(1, 2, figsize=(10, 4))
Matplotlib.figure 조작의 주요 함수/메소드
함수/메소드 | 기능 |
---|---|
plt.figure() | 피겨 객체를 만들어 반환한다. |
plt.subplots() | 피겨와 서브플롯을 생성하여 반환한다. |
Axes.set_xscale() | 서브플롯의 x축 스케일을 지정한다. |
Axes.set_yscale() | 서브플롯의 y축 스케일을 지정한다. |
Axes.set_title() | 서브플롯의 제목을 설정한다. |
Axes.set_xlabel() | 서브플롯의 x축 이름을 지정한다. |
Axes.set_ylabel() | 서브플롯의 y축 이름을 지정한다. |
맷플롯립의 기본 폰트는 한글을 지원하지 않는다.
따라서 그래프에 한글을 표현하고 싶다면, 한글 폰트를 설치한 뒤 matplotlib의 font_manager를 이용해 해당 폰트를 등록하고, rcParams에 해당 폰트를 기본 사용으로 설정해야 한다.
'CS Repository > 기초 통계학' 카테고리의 다른 글
[혼자 공부하는 데이터 분석] 데이터 정제하기 (2) | 2025.07.22 |
---|---|
[혼자 공부하는 데이터 분석] 데이터 분석 기초를 시작하며 (0) | 2025.07.11 |
공공 데이터셋 탐색 사이트 (1) | 2025.07.11 |
[개발자를 위한 통계학 찍먹하기] 0편 - 동기 (0) | 2025.05.06 |