오늘 내용은 코드 실습과 병행해서 정리해야겠다.
데이터의 전체 분포를 알아보는 데에도 백분위수는 유용하다. 주로 사분위수Quantile나 십분위수Decile이 공식적으로 사용되는데, 이 중에서도 사분위수는 꼬리 부분, 즉 외측 범위를 묘사하는 데 유용하다.
주별 살인율의 백분위수를 각각 구해보면, 5% 백분위수는 1.6% 정도인 데 비해 95% 백분위수는 6.5%에 달한다. 중간값을 보면 10만명 당 4건 꼴로 살인이 발생하는 것을 알 수 있다.
이 백분위수를 시각적으로 표현해 데이터의 분산도를 손쉽게 파악할 수 있게 만든 것이 투키에 의해 처음 소개된 상자그림(Box plot)이다. 실제로 의사소통을 할 때는 주로 박스플롯이라고 얘기했던 듯. 박스플롯으로 주별 인구를 나타낸 결과는 아래와 같다.
박스플롯 읽는 법은 크게 아래와 같다.
중간값은 상자 안의 초록색 수평선으로 표시된다. 주별 인구의 중간값이 약 500만 정도 된다는 걸 바로 알 수 있다.
상자의 위쪽과 아래쪽 경계는 각각 75%백분위수, 25%백분위수를 의미한다. 박스 경계가 걸쳐져 있는 범위를 보면 75%와 25% 백분위수의 차이, 즉 주 절반 정도가 200만에서 700만 정도에 분포한다는 것을 알 수 있다.
위아래로 뻗어있는 수염Whisker은 각각 Q1-1.5×IQR, Q3+1.5×IQR까지다. IQR의 150% 범위까지는 허용하되, 그 범위를 넘어가는 값은 이상치(특잇값)로 간주된다. 이상치는 하나의 점 또는 원으로 표시된다.
도수분포표는 변수의 범위를 동일한 크기의 구간으로 나눈 다음, 각 구간마다 몇 개의 변숫값이 존재하는지를 나타내기 위해 사용한다. 판다스에서 cut 함수를 쓰면 각 구간에 매핑하는 시리즈를 만들 수 있다. (이 때 sort_index()를 써서 출력 순서를 제어하지 않으면 빈도수를 기준으로 내림차순 정렬되기 때문에 구간이 꼬이게 됨)
도수분포표와 백분위수 모두 구간을 나눠서 데이터를 살펴보는 접근법이다. 다만,
위에서 만든 도수분포표를 시각화하면 히스토그램이 된다. x축에는 구간 정보만 표시하고 y축에는 해당 구간별 데이터의 갯수를 표시한다.
보통 히스토그램에는 아래의 정보가 담겨 있다.
밀도 그림은 데이터의 분포를 연속된 선으로 보여준다. 좀 더 부드러운 버전의 히스토그램이라고 생각하면 될 듯. 밀도는 커널밀도추정을 통해 데이터로부터 직접 계산한다.
판다스에서는 밀도 그림을 생성하기 위해 density 메서드를 제공한다. 아래는 코드와 출력 결과 예시.
각 코드의 의미는 아래와 같다.
위에서 그렸던 히스토그램과의 가장 큰 차이는 y축의 스케일. 밀도 그림에서는 갯수가 아닌 비율을 나타낸다. (density=True) 밀도 곡선 아래의 총 면적은 1이고, 구간의 갯수 대신 x축의 두 점 사이의 곡선 아래 면적을 계산한다.
세 줄 요약