사분위 범위(IQR)
사분위수(Quartile)
값을 같은 개수로 4개로 나눈 각각의 값
1사분위수(Q1)
25th Percentile
2사분위수(Q2)
Median(중앙값), 50th Percentile
3사분위수(Q3)
75th Percentile
사분위간 범위(Interquartile Range, IQR)
Q3 - Q1
Maximum
Q3 + 1.5 * IQR
Minimum
Q1 - 1.5 * IQR
Outliers
Minimum 보다 작거나
Maximum보다 큰 값
예시 1
A 마을의 나이가 다음과 같다고 가정해 보자.
1사분위수(Q1) | 25th Percentile → 35 |
2사분위수(Q2) | Median(중앙값), 50th Percentile-> 47 |
3사분위수(Q3) | 75th Percentile → 80 |
사분위간 범위(Interquartile Range, IQR) | Q3 - Q1 -> 45 |
Maximum | Q3 + 1.5* IQR → 80 + 1.5 * 45 = 147.5 |
Minimum | Q1 - 1.5 * IQR → 35-1.5*45 = -32.5 |
Outliers | • Minimum 보다 작거나 • Maximum 보다 큰 값 |
변동계수
변동계수
- 상대적으로 얼마나 변동이 많은지를 보기 위한 지표
- 단위가 다르거나, 표준편차가 비슷한 그룹끼리 비교하고 싶을 때 일정한 기준에 따른 비교가 가능하다.
변동계수(CV) = 표준편차 / 평균
[A회사] 평균 매출액 : 100억, 표준 편차 : 12억
[B회사] 평균 매출액 : 40억, 표준 편차 : 2억
[A 회사] CV: 12억 / 100억 = 0.12
[B 회사] CV: 2억 / 40억 = 0.05
B회사보다 A회사가 크게 변동했다. A회사가 더 불안정하다는 뜻이다.
왜도와 첨도
왜도 (Skewness)
- 분포의 비대칭도를 나타내는 통계량
- 비대칭이 커질수록 왜도의 절댓값은 증가
- 일반적으로 왜도가 -1~+1 범위는 치우침이 없는 데이터라고 한다.
첨도 (Kurtosis)
- 꼬리 부분의 길이와 중앙 부분의 뾰족함으로 데이터의 분포를 알 수 있음
- Mesokurtic : 정규 분포 모양
- Leptokurtic : 중앙 부분은 Mesokurtic보다 높고 뾰족하기 때문에 이상치(outlier)가 많을 수 있음
- Platykurtic : Leptokurtic와 반대, 이상치(outlier)가 없음, 데이터 다시 확인 필요
이산화 진행할 경우
* 왜도가 작은 경우, |왜도| < 1의 경우, Equal Width Binning(동일 너비 분할) 사용
* 왜도가 큰 경우, |왜도| > 1의 경우, Equal Frequency Binning(동일 빈도 분할) 사용
이후에 나오는 코드는 이전 글과 이어지니 이전글을 읽고 오면 좋을 것 같다.
Pandas를 이용한 기초 통계 계산 (1)
python의 pandas를 이용해 데이터의 기초 통계를 알아보자.데이터 불러오기import pandas as pd import matplotlib.pyplot as pltimport seaborn as snsimport numpy as npfrom datetime import datetime from statsmodels.tsa.seasonal import seas
yijoon009.tistory.com
분산, 표준편차
표준편차가 클수록 평균이랑 데이터들이 멀리 떨어져 있다.라고 이해하면 된다.
df.describe()
분산
import numpy
val = df['사고건수']
var = numpy.var(val)
var
>>> 9.052115794766637
표준편차
std = math.sqrt(var)
std
>>> 3.008673427736323
다른 방법도 있다.
std = numpy.std(val)
std
년, 월 기준으로 표준편차를 구하려고 하면 다음과 같다.
pd.DataFrame(df.groupby('ym').사고건수.std()).reset_index()
boxplot
describe에서 나오는 min, max값은 실제로 데이터의 최솟값과 최댓값이다.
우리가 25%, 50%, 75% 사분위에서 말하는 min(Q1 - 1.5 * IQR), max(Q1 + 1.5 * IQR) 값과는 다른 값이다.
- 25%: Q1
- 50%: Q2
- 75%: Q3
boxplot 그리기
boxplot으로 쉽게 그래프를 살펴보자
plt.boxplot(df['사고건수'])
plt.show()
중앙값이 3으로 잘 나오고, 75%에 해당하는 값은 5, 25%에 해당하는 값으로는 1로 잘 나오고 있다. 해당 그림에서 max값을 넘어간 값은 이상치값이라고 표현되고, min값은 25%와 동일한 1로 나와있다.
그래프 두 개 그리기
그래프를 두개 동시에 그릴 수 도 있다.
fig, ax = plt.subplots()
ax.boxplot([df['사고건수'], df['중상자수']])
plt.show()
위 그래프의 순서를 조금 바꿔주자.
그래프 순서 바꾸기
fig, ax = plt.subplots()
ax.boxplot([df['사고건수'], df['중상자수']])
plt.title('2020년 사고건수, 중상자수 Boxplot')
plt.xticks([1,2], ['사고건수', '중상자수'])
plt.show()
그래프를 분석해 보자면, 사고건수가 굉장히 넓게 분포되어 있다. 그리고 사고건수의 중앙값은 중상자수의 중앙값보다 크다. 중상자수의 최솟값과 25% 값이 동일하다. 그리고 outliers도 조금 타이트하다.
시도 별 분포
이제 시도 별로 분포를 확인해 보자.
sns.boxplot(x='시도', y='사고건수', data=df)
plt.show()
이제 hue를 ym으로 줘서 그려보자
sns.boxplot(x='시도', y='사고건수', hue='ym', data=df)
plt.show()
그 외 다양한 그래프
이 외에도 굉장히 다양한 그래프 분포를 시각화할 수 있다.
위 그래프 같은 경우에는 강원도는 아마 최빈값이 1로 나올 테고 제주는 아마 고르게 분포되어 있을 거란 게 예상이 되는 그래프다.
'EDA' 카테고리의 다른 글
Pandas를 이용한 기초 통계 계산 (1) (0) | 2024.08.26 |
---|---|
[넷플릭스 데이터 분석 - 3] 넷플릭스 데이터 시각화(수치 시각화, 워드 클라우드) (5) | 2024.08.05 |
[넷플릭스 데이터 분석 - 2] Feature Engineering (0) | 2024.08.05 |
[넷플릭스 데이터 분석 - 1] 결측치 처리 (0) | 2024.08.05 |