본문 바로가기
카테고리 없음

[혼공분석] 4주차_데이터 요약하기

by netsgo 2024. 8. 5.

 

 

[한빛미디어] 혼자 공부하는 데이터 분석 with 파이썬

좋은 개발자는 컴퓨터를 분석의 대상으로 바라볼 뿐, 두려워하지 않는다!‘전공서가 너무 어려워서 쉽게 배우고 싶을 때’, ‘개발자가 되고 싶은데 뭐부터 봐야 하는지 모를 때’ ‘기술 면접

hongong.hanbit.co.kr

 

Pandas 기술통계

Pandas는 데이터프레임에서 기본적인 몇 가지 기술통계를 자동으로 추출해 주는 describe() 메서드를 제공한다.

ns_book6.describe()

 

count 누락된 값을 제외한 데이터 개수
mean 평균
std 표준편차
min 쵯소값
25% 25% 값
50% 중앙값
75% 75% 값
max 최댓값

 

25%, 50%, 75% 이외의 위치에 해당하는 값을 확인하고 싶다면 percentiles 매개변수를 사용한다.

describe(percentiles = [0.3, 0.6, 0.9])

 

중앙값 구하기

중앙값은 데이터를 순서대로 늘어 놓았을 때 중앙에 위치한 값이다. Pandas에서는 중앙값을 구하기 위한 median() 메서드를 제공한다. 중복값을 제외하고 중앙값을 구하려면 drop_duplicates() 메서드와 함께 median()을 사용한다.

ns_book7['대출건수'].drop_duplicates().median()

 

백분위 구하기

어떤 숫자의 백분위를 구하는 방법이 있을까? 1, 2, 3, 4, 5에서 4의 백분위는 0.75라고 쉽게 알 수 있다. 그렇지만 데이터의 수가 많아지면 이런 방법으로는 찾기가 어려울 것이다. 

특정한 값에 대하여 불리언 배열을 만들고 이 불리언 배열에서 True의 값을 모두 헤아린 후 전체 데이터의 개수로 나눈다면 백분위와 거의 비슷한 값을 얻을 수 있다. Pandas에서 True는 1, False는 0으로 취급하므로 불리언 배열의 평균을 구하면 특정한 값이 차지하는 비율을 얻을 수 있다.

borrow_10_flag = ns_book7['대출건수'] < 10
borrow_10_flag.mean()

Numpy 기술통계

average()

Numpy의 average() 함수는 weights 매개변수를 이용하여 가중치를 적용한 가중 평균을 계산할 수 있다.

대출건수의 평균을 구할 때 도서권수의 역수를 가중치로 적용한다면 다음과 같다.

np.average(ns_book7['대출건수'], weights = 1/ns_book7['도서권수'])

 

분산

Pandas는 분산을 계산할 때 자유도를 고려하여 계산하기 때문에 분산을 계산하는 수식에서 분모에 (n-1)을 사용한다. 반면에 Numpy의 분산은 분모를 n으로 사용하기 때문에 두 분산 사이에 차이가 발생한다.


분포 요약하기

산점도 그리기

산점도는 두 변수의 값을 직교 좌표계에 점으로 나타내는 그래프이며 scatter() 함수로 그린다.

import matplotlib.pyplot as plt

plt.scatter(ns_book7['번호'], ns_book7['대출건수']
plt.scatter(ns_book7['도서권수'], ns_book7['대출건수']
plt.show()

 

히스토그램그리기

히스토그램은 수치형 특성의 값을 일정한 구간으로 나누어 구간 안에 포함된 데이터 개수를 막대 그래프로 그린 것이다. 가간 안에 속한 데이터 개수를 도수라고 부른다.

import matplotlib.pyplot as plt

plt.hist([0, 3, 5, 6, 7, 7, 8, 13], bins = 5)
plt.hist(np.random.randn(1000))
plt.show()

 

 

구간 조정하기

한 구간의 도수가 너무 커서 다른 구간에는 도수가 표시되지 않는 현상이 발생할 수 있는데 y축을 로그 스케일로 바꾼다면 문제를 해결할 수 있다.

plt.hist(ns_book7['대출건수'], bins = 100)
plt.yscale('log')
plt.show()

 

상자 수염

상자 수염은 최솟값, 세 개의 사분위수, 최댓값의 5개의 숫자를 이용해 데이터를 요약하는 그래프이다. 대략적인 과정은 다음과 같다.

 

1. 먼저 사분위를 구하고 25%, 75% 지점을 밑면과 윗면으로 하는 직사각형을 그린다.

2. 중간값에 해당하는 지점에 수평선을 그린다.

3. 사각형의 밑면과 윗면에서 사각형의 높이의 1.5배만큼 떨어진 거리 안에서 가장 멀리 있는 샘플까지 수직선을 그린다.

4. 이 수직선 밖에서 최솟값과 최댓값까지 데이터를 점으로 표시한다. 이 영역의 데이터를 이상치라고 한다.

 

 

plt.boxplot(ns_book7[['대출건수', '도서권수']]
plt.yscale('log')
plt.boxplot(ns_book7[['대출건수', '도서권수']], vert = False)
plt.xscale('log')
plt.show()