카테고리 없음

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

unocho 2025. 2. 6. 22:07

설날이 훌쩍 지나가고 사주차가 다가왔다. 벌써 스터디의 50%가 지나갔다니... 책을 잘 읽어보려고 하지만 실제 실습을 모두 해보지 않아 습득하는 지식이 조금 낮다고 판단되어 이번주부터는 조금 더 집중하여 보고자 한다..!

 

통계로 요약하기

데이터 파일을 읽어온 후 각각 메서드 활용에 따라 다른 결과를 볼 수 있다

기술 통계 구하기

Describe() 메서드를 활용하면 데이터에 대한 요약 통계를 보여줄 수 있다. Info()와 유사한 메서드지만 보여지는 통계 결과가 다르다. 

Describe() 메서드 사용에 따라 도출된 결과:

1. count: 데이터 컬럼별 누락된 값을 제외한 개수

2. mean: 데이터 컬럼별 평균

3. std: 데이터 컬럼별 표준편차

4. min: 데이터 컬럼별 최솟값

5. 50%: 데이터 컬럼의 50% 지점에 위치한 값

6. 25%, 75% : 데이터 컬럼별 25%, 75% 지점에 위치한 값

   -> 다른 지점의 값 추출을 위해 percentile을 변경하여주면 됨. describe(percentile[0.3, 0.6, 0.9])

7. max : 데이터 컬럼별 최대 값

 

Describe() 에 include 를 넣게 된다면 다른 데이터 열의 기술통계를 볼 수 있음

Describe(include = 'object') 메서드를 활용하여 도출된 결과:

1. count: 누락된 값을 제외한 데이터 개수

2. uinque: 고유한 값의 개수

3. top: 가장 많이 등장한 값

4. freq: top행에 등장한 항목의 빈도수

 

평균 구하기

Mean() 메서드를 사용하면 평균을 제공하여 줍니다

pd.mean() 결과:

- 평균값 도출

 

Median() 메서드를 활용하면 중앙값을 구할 수 있습니다.

pd.median() 결과:

- 중앙값 도출

 

이전에 알려드린 drop_duplicate()메서드와 median(), mean()값을 통해 중복값을 제거한 중앙값을 구할 수도 있습니다. 

 

최솟값, 최댓값 구하기

Max(), min() 값을 통하여 최솟값과 최댓값을 구할 수 있습니다.

 

Quantile()메서드를 통하여 분위수 값을 계산 할 수 있습니다.

quantile(0.25) 결과: 

- 하위 25%에 위치한 값 

 

Intrapolation 보간을 통해 두지점 사이에 놓인 특정 위치 값을 구할 수 있습니다

quantile()을 통하여 백분위 값을 구할 수도 있는데요. 적은 개수의 수자 내 백분위를 계산하는 것은 쉽지만, 다량의 데이터 내 백분위 계산은 바로 하기 어려운 점이 있습니다.

그런 상황에 백분위를 구하기 위하여 아래 방법을 사용하면 됩니다.

데이터에 10이 위치한 백분위를 찾기 위함

borrow_10_flag = pd['특정조건'] < 10 을 사용하여 불리언 배열 도출

borrow_10_flag.mean() -> 0.6402  통하여 평균을 구함

pd['특정조건'].quantile(0.65) -> 10 을 통하여 대략 백분위는 0.65일 것으로 추출하였으며, 검증까지 완료함

 

분산 구하기

분산은 데이터가 평균에서 퍼져있는 정도를 나타내주기 때문에 분산만으로 정도를 판단하기는 어렵습니다. 

Var() 메서드를 통한 분산 계산 할 수 있습니다

 

표준편차 구하기

표준편차는 분산에 제곱근을 한 수치입니다. 표준편차를 통하여 평균을 중심으로 대에터가 얼만큼 떨어져 분표하여 있는지 표현하는 값 입니다.  

std() 메서드를 통하여 표준편차를 계산할 수 있습니다.

평균이 11이나 표준편차를 통하여 나온 값이 19라면, 아마 평균보다 훨씬 큰 값이 있기 때문에 표준편차가 큰 것으로 예상 할 수 있습니다

 

최빈값 구하기

최빈값은 가장 많이 등장한 값을 의미합니다.

Mode()메서드를 통하여 최빈값을 찾을 수 있습니다

 

분포 요약하기

대표적인 그래프는 산점도, 히스토그램, 상자 수염 그림이 있습니다.

산점도 그리기

matplotlib의 scatter()함수를 통하여 스캐터 그래프를 그릴 수 있습니다

plt.scatter(X, Y)를 사용하면 X,Y 좌표를 평면에 그리게 됩니다. 그래프의 투명도를 alpha로 조정 할 수 있습니다. 

히스토그램 그리기

hist()함수를 통하여 히스토그램을 그릴 수 있습니다.

plt.hist(리스트, bins=5) 를 사용하면 데이터를 총 5개의 구간으로 나누어 히스토그램을 그립니다. 

넘파이가 제공하는 histogram_bin_edges()함수를 통하여 다섯 구간의 경계값을 출력 할 수 있습니다. 

 

히스토그램을 그릴 때, 한 구간의 도수가 너무 큰 경우 제대로 표현이 어려운데 이럴 때는 y 축을 로그 스케일로 바꾸어 조정하면 값 마다의 차이가 줄어들 수 있습니다. 

plt.hist(리스트)

plt.yscale('log')

y 값을 조정하는 것과 같이, x값 조정도 가능합니다. 기본으로 x축은 10개의 구간으로 나뉘어져 있지만, bins 매개변수를 통하여 100개로 바꾸면 분포가 더 세밀하게 보여질 수 있습니다. 

상자수염 그리기

상자수염은 최솟값, 사분위 3개, 최댓값을 사용해 데이터를 요약하는 그림입니다.

상자수염을 그리는 방법은 아래와 같습니다

1. 데이터의 사분위를 계산합니다. 25%, 75%를 밑면과 윗면으로 하는 직사각형을 그립니다. 

2.중간값, 50%에 위치한 지점에 수평선을 긋습니다

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

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

 

boxplot()함수를 활용하여 상자수염 그리기가 가능하나 데이터 사분위가 매우 작을 경우 상자가 작아 y 축을 로그 스케일로 바꾸는 것 도 좋음

 

 

금주 과제