오늘은 연속형 데이터를 파악하는 방법에 대해 알아보자.
범주형 데이터를 분석하는 방법은 아래의 링크에서 확인할 수 있다.
● 연속형 변수의 요약 통계량 파악하기 : df명.describe()
연속형 변수란 숫자형 자료(numerical/continuos 변수)를 의미하는데, describe 함수를 통해 이 데이터의 기술 통계량을 확인해보자. 그럼 범주형 변수가 아닌 숫자형 변수에 대해 개수, 평균, 표준편차, 최솟값, 중위수, 최댓값 등의 요약된 통계량을 확인할 수 있다.
DF.describe()
● 통계량으로 데이터 해석하기
- 평균값(mean)과 중위수(50%) 차이 비교하기
이 때, 평균값(mean)과 중위수(50%)의 차이를 주목할 필요가 있다. 두 값의 차이가 작을수록 이상치가 적은 데이터를 의미한다. 위 데이터에서 roe에 비해 salary와 sales는 mean과 50%의 값 차이가 크므로 이상치가 다수 존재할 것으로 보인다.
- 왜도(skewness)와 첨도(kurtosis) 파악하기
좀 더 구체적으로 데이터를 분석하기 위해 왜도와 첨도를 알아보자.
▶ 왜도(skewness) - 분포의 비대칭도를 나타내는 통계량 (분포가 비대칭일수록 왜도의 절댓값 증가) : df명.skew()
- 왜도 > 0 (skewed to the right) : 데이터 분포가 오른쪽으로 긴 꼬리를 가지는 경우 = 왼쪽에 값이 더 많다 (Median < Mean)
- 왜도 = 0 : 정규분포, T 분포 등 대칭인 분포 (Median = Mean)
- 왜도 < 0 (skewed to the left) : 데이터 분포가 왼쪽으로 긴 꼬리를 가지는 경우 = 오른쪽에 값이 더 많다 (Median > Mean)
skew 함수로 데이터의 왜도를 보면 salary와 sales는 높은 왜도값을 가지는 걸 알 수 있다. 이는 두 칼럼의 데이터는 오른쪽으로 긴 꼬리를 갖는 형태의 분포를 띈다는 의미로, 데이터에 큰 값을 갖는 이상치들이 많다는 것을 확인할 수 있다.
DF.skew()
▶ 첨도(kurtosis) - 분포의 꼬리부분의 길이와 중앙부분의 뾰족함에 대한 정보를 제공하는 통계량 : df명.kurtosis()
- 첨도 > 0 (Leptokurtic) : 정규분포보다 꼬리가 두껍고 중앙이 뾰족한 모양을 가진 T분포 (이상치가 많음)
- 첨도 = 0 (Mesokurtic) : 정규분포
- 첨도 < 0 (Platykurtic) : 정규분포보다 꼬리가 얇고 평균을 중심으로 더 넓게 펼쳐진 분포 (극값이 적으므로 확인 필요)
kurtosis 함수로 데이터의 첨도를 보면 salary와 sales의 첨도값이 매우 높은 것을 알 수 있다. 이는 두 데이터가 정규분포보다 중앙부분에 덜 집중되어 아웃라이어가 많다는 의미이다.
DF.kurtosis()
- 그 외 데이터에 대한 다양한 기술통계량 확인하기
함수 | 의미 | 사용 예시 |
count | NA 값을 제외한 값의 수 반환 | df명.함수명(), df명['컬럼명'].함수명() |
describe | 시리즈 혹은 데이터프레임의 각 열에 대한 기술 통계 | df명.함수명(), df명['컬럼명'].함수명() |
min, max | 최소, 최대값 | df명.함수명(), df명['컬럼명'].함수명() |
argmin, argmax | 최소, 최대값을 갖고 있는 색인 위치 반환 | df명['컬럼명'].함수명() |
idxmin, idxmax | 최소, 최대값 갖고 있는 색인의 값 반환 | df명['컬럼명'].함수명() |
quantile | 0부터 1까지의 분위수 계산 | df명.함수명(x), df명['컬럼명'].함수명(x) |
sum | 합 | df명.함수명(), df명['컬럼명'].함수명() |
mean | 평균 | df명.함수명(), df명['컬럼명'].함수명() |
median | 중위값 | df명.함수명(), df명['컬럼명'].함수명() |
mad | 평균값에서 절대 평균편차 | df명.함수명(), df명['컬럼명'].함수명() |
var | 표본 분산 | df명.함수명(), df명['컬럼명'].함수명() |
std | 표본 표준편차 | df명.함수명(), df명['컬럼명'].함수명() |
skew | 표본 비대칭도 | df명.함수명(), df명['컬럼명'].함수명() |
kurt | 표본 첨도 | df명.함수명(), df명['컬럼명'].함수명() |
cumsum | 누적 합 | df명.함수명(), df명['컬럼명'].함수명() |
cummin, cummax | 누적 최소값, 누적 최대값 | df명.함수명(), df명['컬럼명'].함수명() |
cumprod | 누적 곱 | df명['컬럼명'].함수명() |
diff | 1차 산술차 | df명['컬럼명'].함수명() |
pct_change | 퍼센트 변화율 계산 | df명['컬럼명'].함수명() |
corr | 데이터프레임의 모든 변수 간 상관관계 계산하여 반환 | df명.함수명() |
cov | 데이터프레임의 모든 변수 간 공분산을 계산하여 반환 | df명.함수명() |
● 연속형 데이터 - 히스토그램으로 시각화하기 : df명['컬럼명'].hist(bins=구간너비, figsize=도표크기)
정규성 여부, 이상치 존재여부 등을 시각적으로 파악하기 위해 matplotlib 패키지를 이용하여 히스토그램을 그려보자.
hist 함수를 사용하여 bins로 전체 구간 너비를 설정해주고 figsize로 전체 그래프의 가로, 세로 사이즈를 설정해준다.
아래 히스토그램을 통해 정규성 여부, 이상치 존재여부 등을 시각적으로 파악하면, roe에 비해 salary와 sales는 오른쪽으로 긴 꼬리를 가지고 있는 분포를 띄며, 값이 큰 이상치들이 존재하는 것을 확인 할 수 있다.
import matplotlib.pyplot as plt
DF.hist(bins=50, figsize=(20,15))
'빅데이터 분석기사[python] > pandas와 기본 데이터 처리' 카테고리의 다른 글
[python 파이썬, pandas 판다스] 데이터 탐색 (범주형 자료) (0) | 2023.02.03 |
---|---|
[python 파이썬, pandas 판다스] pandas와 numpy 전환 (0) | 2022.05.11 |
[python 파이썬, pandas 판다스] 데이터 값 변경하기, 바꾸기 (0) | 2022.05.11 |
[python 파이썬, pandas 판다스] 데이터 특정 조건 추출 (0) | 2022.05.11 |
[python 파이썬, pandas 판다스] 데이터 변환2 (열 필터링, 열 추가, 열 삭제) (0) | 2022.05.10 |