데이터 과학 프로젝트의 첫 걸음, 탐색적 데이터 분석
작성자 : 김종호
Chapter 1. 탐색적 데이터 분석
자 통계학의 매력에 함 빠져봅시다~
1.1 정형화된 데이터의 요소
현재 우리 사회에서는 이미지, 텍스트, 비디오 등 다양한 형태의 데이터가 쏟아지고 있다. 이 데이터들은 주로 비구조화 상태로 존재하며, 이 책에서 다루는 통계적 개념을 활용하기 위해서는 이를 정형화된 형식으로 가공해야 한다. 정형 데이터 중 가장 일반적인 형태는 행과 열이 있는 테이블 형태이다.
정형 데이터 : 값과 숫자로 구성되며, 접근과 해석이 용이한 조직화된 데이터
정형 데이터는 주로 수치형 데이터와 범주형 데이터로 나뉜다. 수치형 데이터는 연속형과 이산형으로 나누어지며, 범주형 데이터는 명목형과 순서형으로 나뉜다.
이를 예시와 함께 그림으로 보자면
이렇습니다~
간단히 요약하자면, 연속형 데이터는 연속적인 값을 가지며 주로 실수로 표현되고, 이산형 데이터는 개별적인 값을 가진다. 명목형은 순서 없이 범주를 표현하고, 순서형은 범주 간 상대적인 순위를 나타낸다.
이렇게까지 귀찮게 데이터 종류를 왜 분류할까? 데이터를 분석하고 예측을 모델링할 때, 시각화, 해석, 통계 모델 결정 등에 데이터 종류가 중요한 역할을 하기 때문 !
1.2 테이블 데이터
데이터 분석에서 가장 대표적으로 사용되는 객체의 형태는 엑셀 스프레드시트나 데이터베이스 테이블과 같은 테이블 데이터이다.
테이블 데이터에서 feature는 테이블의 열로 속성, 특징, 예측변수를 나타내고 Record는 테이블의 행으로 관측값, 샘플, 케이스를 나타낸다.
테이블 데이터 : 각 레코드(사건)를 나타내는 행과 피처(변수)를 나타내는 열로 이루어진 2차원 행렬을 의미하는 용어 (ex.파이썬의 pandas의 DataFrame)
1.3 위치 추정
위치 추정은 대부분의 값이 어디쯤에 위치하는지(중심 경향성)을 나타내는 추정값을 말한다. 이런 위치 추정을 하는 가장 기초적인 단계 중 하나는 각 특성(feature)의 대푯값을 계산하는 것이다.
대부분의 사람들은 데이터를 추정하려면 평균을 구하면 될 것이라 생각한다. but! 평균은 이상치의 영향 또는 비대칭 분포와 같은 상황에서 데이터의 중심 경향성을 대표하는 좋은 방법이 아니다! 이제 평균을 포함해서 다양한 위치 추정 방법에 대해 알아보자
이상치의 영향 : 데이터가 [1,2,3,4,1000]이 있을 때 평균은 약 252이지만, 중심은 데이터는 1~4사이에 모여있다. 이상치가 큰 값을 가지면 평균이 그 영향을 받아 중심 경향성을 왜곡할 수도 있다.
-
평균 : 모든 값의 총합을 값의 개수로 나눈 값
- 절사평균 : 정렬한 후에 양끝에서 일정 개수의 값을 삭제한 뒤 남은 값들을 가지고 구한 평균
- ex) 교수님이 중간고사를 치고난 후에 학생들이 얼마나 잘 이해하고 있는지 확인할 때, 백지를 낸 학생들(0점)과 그냥 뛰어난 학생들(100점)을 제외하고 평균을 구하면 학생들이 얼마나 잘 따라오는지 확인할 수 있다.
- 가중평균 : 각 데이터 값에 사용자가 지정한 가중치를 곱한 값들의 총합을 다시 가중치의 총합으로 나눈 값
- ex) 학생 성적 계산, 과목의 학점에 따라 각 과목 성적을 곱한 후 합산하여 평균 성적을 구하는 방법
- 중앙값 : 데이터를 정렬했을 때 가운데 위치한 값
- 평균과는 다르게 극단적으로 큰 값이나 작은 값의 영향을 크게 받지 않아, 평균에 비해 위치 추정이 더 유리하다.
- 짝수 개일 경우 가운데 있는 두 값의 평균으로 대체
1.4 변이 추정
변이 추정은 데이터 값의 분포를 추정하고 얼마나 밀집해 있는지 퍼져 있는지를 파악하는 과정으로, 데이터의 분포를 이해하거나 요약하는데 도움을 준다. 위치를 추정하는데 다양한 방법(평균, 중간값 등)이 있었던 것처럼, 변이를 추정하는데도 다양한 방법이 있다.
- 편차 : 관측 데이터와 위치 추정값 사이의 차이
- 데이터가 중앙값을 주변으로 얼마나 퍼져있는지 확인 가능하다.
- 음의 편차가 양의 편차를 상쇄하기 떄문에 편차 자체의 평균은 구하지 않고 편차의 절대값의 평균(평균절대편차), 제곱을 사용하는 것(분산)을 이용한다.
- 분산 : 제곱편차의 평균
- 값이 클수록 데이터가 평균에서 멀리 떨어져 있고 분포가 넓다는 것을 의미한다.
- 표준편차 : 분산의 제곱근
- 분산보다 훨씬 이해하기가 쉽다 –> 분산은 데이터의 단위를 제곱했기 때문에 크기가 크지만 표준편차는 제곱근이라서 데이터의 단위가 표준편차의 단위와 동일하다.
- 중위절대편차 : 데이터에서 중간값을 뺀 값들의 중앙값을 구하는 것
- 중간값의 특징을 따라 극단값의 영향을 받지 않는다.
- 절사평균과 유사하게 절사표준편차를 계산하는 것이 가능하다.
- 백분위수 : 분위수를 분수 형태로 나타낸 것
- 중간값은 50번째 백분위수
1.5 데이터 분포 탐색하기
1.3~1.4절에서 다룬 추정들은 주로 데이터의 위치 또는 변이를 단일한 수치로 요약하는 역할을 한다. 그러나 이러한 요약 통계량만으로는 데이터의 분포에 대한 전체적인 특성을 파악하기 어려울 때가 있다. 그렇기에 전반적으로 어떻게 분포하고 있는지를 알아보는 것 역시 유용하다!
- 상자그림 : 백분위수를 이용해 데이터의 분산을 시각화한 것
IQR(Inter Quatile Range) : 상위 25%값(Q1)과 상위 75값(Q3)의 차이
pyplot의 boxplot() 함수
-
도수분포표 : 데이터를 구간으로 나누어, 각 구간의 빈도를 나타낸 표
import pandas as pd import numpy as np import matplotlib.pyplot as plt x = np.arange(0,100,2) y = np.random.randint(0,100,100) hist, edges = np.histogram(x, 4) # 첫번째 구간 0~24.5 빈도는 13, 두번째 구간 24.5~49 빈도는 12 print(edges, hist)
[ 0. 24.5 49. 73.5 98. ] [13 12 12 13]
-
히스토그램 : 도수분포표를 시각화한 것
plt.hist(y,bins=x) plt.show()
- 밀도 그림 : 데이터의 분포를 연속된 선으로 나타낸다.
- 부드러운 히스토그램
- 커널밀도추정을 통해 데이터로부터 직접 계산
- 밀도 곡선 아래의 총 면적은 1
- 구간의 개수 대신 x축의 두 점 사이의 곡선 아래 면적을 계산하며, 이는 두 점 사이에 있는 분포의 비율에 해당한다.
import seaborn as sns # kdeplot # y가 density를 나타냄 sns.kdeplot(y,fill=True) plt.show()
- 밀도 그림 : 데이터의 분포를 연속된 선으로 나타낸다.
1.6 이진 데이터와 범주 데이터 탐색하기
범주형 데이터를 나타내기 좋은 도표로는 막대도표가 있다.
범주형 데이터가 2개인 것은 이진 데이터라고 부른다.
-
막대도표 : 어떤 범주형 자료를 보여줄 때 주로 사용되며, x축 위에 각 범주들을 놓고, y축은 각 범주에 해당하는 횟수나 비율을 표시한다.
import matplotlib.pyplot as plt import numpy as np x = np.arange(3) years = ['2030', '2040', '2050'] values = [100, 400, 900] plt.bar(x, values) plt.xticks(x, years) plt.show()
막대 도표와 히스토그램은 매우 유사한 모습을 가지고 있지만, 차이점이 있다.
막대 도표에서 x축은 주로 범주나 카테고리를 나타내는 반면, 히스토그램은 수치적인 범위나 값의 분포를 보여준다. 또한, 히스토그램에서는 막대들이 일반적으로 서로 붙어있으며 중간에 간격이 있다면 해당 값 범위에 속하는 데이터가 없음을 나타낸다. 이에 빈해 막대 도표에서는 막대들이 서로 떨어져 있어 각 범주나 카테고리 간의 독립성을 강조한다.
1.7 상관관계
탐색적 데이터 분석이라고 하면 예측값과 목푯값과의 상관관계를 조사해보는 것을 빼놓을 수 없다!
x가 큰 값을 가지면, y도 큰 값을 갖고, x가 작은 값을 가지면 y도 작은 값을 갖는 경우, x와 y는 서로 양의 상관관계를 갖는다고 말한다. 반대의 경우에는 서로 음의 상관관계를 갖는다고 한다.
x 증가 -> y 증가 or x 감소 -> y 감소 : 양의 상관관계
x 증가 -> y 감소 or x 감소 -> y 증가 : 음의 상관관계
- 상관계수 : 상관관계를 나타내는 지표, 수치적 변수들 간에 어떤 관계가 있는지를 나타내기 위해 사용되는 측정량
col1 = [10,20,30,40,50,60]
col2 = [1,4,8,9,10,20]
col3 = [6,5,4,3,2,1]
data = {"col1":col1,"col2":col2,"col3":col3}
df = pd.DataFrame(data)
df.corr()
상관관계가 있다고 해서 인과관계가 있다는 것은 아니다! 상관관계가 높다고 해서 두 변수에서 하나의 변수가 다른 변수의 원인을 설명할 수는 없다. 그냥 두 변수 간에 관련성이 높을 뿐이다.
1.8 두 개 이상의 변수 탐색하기
-
수치형 변수 대 수치형 변수를 시각화
-
데이터가 적은 경우에는 산점도를 사용하면 되지만 수십만개가 넘으면 육각형 구간과 등고선을 이용해서 시각화를 한다.
- 육각형 구간
ax = kc_tax0.plot.hexbin(x='SqFtTotLiving', y='TaxAssessedValue', gridsize=30, sharex=False, figsize=(5, 4)) ax.set_xlabel('Finished Square Feet') # 집의 크기 ax.set_ylabel('Tax Assessed Value') # 과세 평가 금액 plt.tight_layout() plt.show()
시각화 결과를 통해 집의 크기와 과세 평가 금액 간에 양의 상관관계가 나타남을 확인할 수 있다. 뿐만 아니라 집들이 그룹으로 구분되어 있는데, 예를 들어 최하위 그룹의 집들과 비교하여 상위 그룹의 집들은 동일한 크기를 가지지만 더 높은 과세 평가 금액을 가지고 있음을 알 수 있다.
-
등고선
fig, ax = plt.subplots(figsize=(4, 4)) sns.kdeplot(data=kc_tax0.sample(10000), x='SqFtTotLiving', y='TaxAssessedValue', ax=ax) ax.set_xlabel('Finished Square Feet') ax.set_ylabel('Tax Assessed Value') plt.tight_layout() plt.show()
등고선은 이 두 변수로 이루어진 지형에서의 등고선을 나타낸다. 등고선 상의 점들은 밀도를 나타내며, ‘꼭대기’ 방향으로 이동할수록 밀도가 높아진다.
-
- 범주형 변수 대 범주형 변수
- 분할표 : 범주별 빈도수를 기록한 표 ex) excel의 피벗 테이블, python의 pivot_table
- 범주형 변수 대 수치형 변수
- 상자그림 : 1.5절에서 설명
- 바이올린 도표 : 상자그림을 보완한 형태로, y축을 따라 밀도추정 결과를 동시에 시각화
- 장점 : 상자그림에서는 보이지 않는 데이터의 분포 확인 가능
이렇게 “데이터 과학을 위한 통계” Chapter 1 리뷰를 마치겠습니다~!~!