이번 글은 코드잇 강의를 수강하면서 배운 내용을 주로 하여 정리되어 있습니다. (코드잇 스프린트 데이터 애널리스트 트랙 1기 훈련생)
상자그림 (Box Plot)
- 상자 그림에서 박스 중간에 있는 선을 50% 지점인 중간값(Median)이라고 합니다.
- 상자의 아래 부분은 25% 지점으로 제 1 사분위수(Q1)이라고 합니다.
- 상자의 아래 부분은 75% 지점으로 제 3 사분위수(Q3)이라고 합니다.
- 박스 밖에 동떨어져 존재하는 값들을 이상치(Outlier)라고 합니다.
- 제 3사분위수(Q3)에서 제 1사분위수(Q1)를 뺀 범위를 사분위수 범위(IQR ; Interquartile range)라고 하며, 그리고 1, 3 사분위수에서 1.5*IQR만큼 떨어진 값들까지 정상 범주라고 생각하면 됩니다.
상자 그림을 통해 이상치의 유무를 확인할 수 있고, 최솟값과 최댓값의 위치 또한 확인할 수 있다.
상자 그림 그리기
df['칼럼명'].plot(kind='box') # 지정한 칼럼에 대한 상자 수염 그래프 그리기
plt.show()
df[['칼럼명1', '칼럼명2']].plot(kind='box') # 지정한 2가지 칼럼에 대한 상자 수염 그래프 그리기
plt.show()
df.plot(kind='box') # 데이터프레임 내의 각 칼럼에 대한 모든 상자 수염 그래프 그리기
plt.show()
사분위수 범위 및 이상치 찾아내기
q1 = df['칼럼명'].quantile(0.25) # 제 1 사분위수 구하기
q3 = df['칼럼명'].quantile(0.75) # 제 3 사분위수 구하기
iqr = q3 - q1 # 제 3 사분위수에서 제 1 사분위수를 뺀 값을 iqr 구하기
lower_bound = q1 - 1.5 * iqr # 최솟값 구하기
upper_bound = q3 + 1.5 * iqr # 최댓값 구하기
outlier = (df['칼럼명'] < lower_bound) | (df['칼럼명'] > upper_bound) # 이상치 찾아내기
df['칼럼명'][outlier]
히스토그램 (Histogram)
히스토그램은 일반적으로 연속형 데이터를 시각적으로 표현할 때 사용합니다.(이산형 데이터에도 사용 가능)
나이도 이산형 데이터라고 볼 수 있으며, 나이를 히스토그램으로 그려볼 수 있습니다.
연속형 데이터를 범위로 묶어서 볼 수 있습다.(데이터의 분포를 파악하는 그래프)
통계 지식이 없는 사람들도 쉽게 이해 가능한 그래프입니다.
히스토그램 그리기
데이터프레임명['컬럼명'].plot(kind='hist')
plt.show()
히스토그램의 구간을 따로 설정하지 않으면 자동적으로 10개로 나누어집니다.
히스토그램의 목적은 구간별로 데이터가 얼마나 많은지 보는 것이므로 상황에 따라서 구간이 개수를 정하는 것이 중요합니다.
# 히스토그램의 구간을 많게 해서 분포를 자세히 보고싶으면 bins를 크게 한다.
데이터프레임명['컬럼명'].plot(kind='hist', bins=100)
plt.show()
확률 밀도 함수 (PDF ; Probability Density Function)
값들을 몇가지 묶음으로 분류하는 히스토그램(대략적인 데이터 분포를 확인할 때 좋다.)보다 연속형 데이터를 좀 더 세밀하게 표현할 수 있는 그래프입니다.
- 각 구간이 전체에서 차지하는 비중을 그래프로 나타낸다.(확률에 대해 얘기한다.)
- 확률 밀도 함수의 그래프 아래 공간의 넓이는 1이다.
- 연속형 데이터의 특성을 살려 분석할 수 있다.
- 확률 밀도 함수는 모집단 전체를 표현한다는 비현실적인 가정을 하고 있어 완벽히 실현은 불가능하다.(이상적인 개념)
KDE Plot (Kernel Density Estimation Plot)
주어진 데이터만 가지고 확률밀도함수에 대한 추정으로 그래프를 표현합니다.
즉, KDE plot은 표본을 바탕으로 모집단을 추론하는 확률밀도함수처럼 표현하는 그래프입니다.
데이터프레임명['컬럼명'].plot(kind='kde')
plt.show()
# kde 분포를 더 세세하게 표현할 지 설정 가능
데이터프레임명['컬럼명'].plot(kind='kde', bw_method=0.1)
plt.show()
# bw_method의 값이 작을수록 더 세세하게 표현한다.
데이터 분포의 모양
정규분포 (Normal Distribution)
가운데가 볼록하고 양 끝으로 갈수록 데이터가 줄어드는 분포 형태입니다.
- 중간에 데이터가 몰려있고. 엄청 크거나 작은 값은 상대적으로 적습니다.(가운데를 중심으로 좌우 대칭)
- 종 모양과 닮아 Bell Curve라고 부르기도 합니다.
왜도(Skewness)
데이터가 기울어진 정도를 말합니다.
- Right_skewed (Positively_skewed) : 왼쪽에 데이터가 몰려있어, 오른쪽으로 긴 꼬리가 생기는 모양(데이터가 커지는 방향이 오른쪽으로 양수 방향으로 커져 Positively_skewed라고 한다.(오른쪽으로 기울어짐)
- Left_skewed (Negatively_skewed) : 오른쪽에 데이터가 몰려있어, 왼쪽으로 긴 꼬리가 생기는 모양(왼쪽으로 기울어짐)
Positively_skewed : 왜도 > 0 / 정규분포 : 왜도 = 0 / Negatively_skewed : 왜도 < 0
왜도의 절댓값이 클수록 데이터가 더 많이 기울어졌다고 합니다.
첨도(Kurtosis)
데이터가 뾰족한 정도를 말합니다. (데이터가 얼마나 뾰족한지)
첨도가 높을수록 그래프가 뾰족해지며, 가운데에 집중적으로 데이터가 심하게 몰려있고 양 끝으로 갈수록 데이터가 없음을 의미합니다.
첨도가 낮으면, 데이터가 고르게 분포해있음을 의미합니다.
분산과 표준편차
분산 (var ; Variance)
편차 제곱의 평균 (편차 : 값이 평균에서 얼마나 떨어져있는지에 대한 수치)
- 편차의 합은 0입니다.
- 편차를 제곱하는 이유는 값을 다 양수로 통일시키고 편차가 더 큰 값을 부각시키기 위해서입니다.
표준편차 (std ; Standard Deviation)
분산의 제곱근
- 제곱근을 하는 이유는 계산하면서 제곱이 된 단위를 원래대로 돌리기 위해서입니다.
분산/표준편차가 작으면 데이터가 대체로 평균 주위에 모여있습니다.
분산/표준편차가 크면 데이터가 넓게 펴져 있습니다.
데이터프레임명['컬럼명'].var() # 분산 구하기
데이터프레임명['컬럼명'].std() # 표준편차 구하기 (pandas의 분산과 표준편차를 계산할 때 기본적으로 n-1로 나누어진다.)
# 표본의 분산과 표준편차를 n으로 나누어 계산하면 편차가 작아져 실제 편차를 과소평가하게 되는 경우가 발생한다.
# 그래서 표본의 분산과 표준편차를 계산할 때는 n-1로 나누어 편차를 키우는 방법을 사용한다.
np.std(데이터프레임명['컬럼명']) # numpy 라이브러리를 활용한 표준편차 구하기
# (numpy의 표준편차는 n로 나누어지며, 이는 모분산의 분산과 표준편차를 구하는 것과 같다고 생각하면 된다.pandas와 계산법이 달라 수치가 미세하게 다르다.)
모집단, 표본 누적값 계산하기(누적합, 누적곱)
누적합
데이터프레임명['컬럼명'].cumsum() # 컬럼의 누적합이 계산된다.
# 오른쪽 그림에서 누적합이 계산되어 점점 증가하는 경향의 그래프를 확인할 수 있다.
df['컬럼명_cumsum'] = df['컬럼명'].cumsum() # 컬럼의 누적합이 계산된 열이 새로 입력된다.
누적곱
데이터프레임명['컬럼명'].cumprod() # 컬럼의 누적곱이 계산된다.
데이터프레임명['cumulative_컬럼명'] = interest_df['컬럼명'].cumprod() # 컬럼의 누적곱이 계산된 열이 새로 입력된다.
이번 글에서는 통계 / 데이터 시각화 / 상자그림 / 히스토그램 / 확률 밀도 함수 / KDE plot / 데이터 분포의 모양 / 분산과 표준편차 / 누적값 계산하기가 포함된 내용을 정리했으며, 데이터 분석과 데이터를 다루는 경우에 모두 필수적인 개념들로 꼭 잊지 말고 알아가야 하는 내용인 것 같습니다.
글 읽어주셔서 감사합니다.
출처 및 참고자료 : 코드잇 사이트 강의 '기초 통계와 데이터 시각화' https://www.codeit.kr/topics/statistics-and-visualization
'프로그래밍 언어 > Python' 카테고리의 다른 글
[파이썬 개념 정리 9] 맥 운영체제에서 파이썬 환경 구축 내용 정리 (0) | 2024.07.15 |
---|---|
[파이썬 개념 정리 8]Seaborn 라이브러리를 이용한 시각화 개념 (2) | 2024.07.05 |
[파이썬 개념 정리 6]Pandas 라이브러리 개념 정리 (0) | 2024.06.29 |
[파이썬 개념 정리 6]Matplotlib 라이브러리 개념 정리 (0) | 2024.06.29 |
[파이썬 개념 정리 5]Numpy 라이브러리 개념 정리 (0) | 2024.06.29 |
데이터 분석을 공부하고 카페를 열심히 돌아다니는 이야기
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!