수치형 데이터 - EDA

추차차·2022년 6월 25일
0

파이썬 기초

목록 보기
2/3
post-thumbnail

데이터를 불러오고 나면 우선 EDA(Exploratory Data Analysis) 즉, 탐색적 데이터 분석을 하는 것이 중요하다.

EDA란 무엇일까?

EDA는 말 그래도 데이터를 탐색하고 이해하는 과정이라고 하면 될 것이다. 막연하게 데이터에 대한 이해를 하지 않고 코드를 짜기 시작하면 유의미한 결과를 도출해내기 매우 어렵다.

EDA를 어떤식으로 진행할까?

탐색적 데이터 분석에 순서와 정답은 존재하지 않는 것 같다. 최대한 다양하게 혹은 효율적으로 그 데이터에 대한 이해도를 높이면 되는 과정이기 때문이다.

데이터 크기, 일부, 요약본 확인하기

1.나는 데이터를 불러오면 raw 데이터의 크기를 보는 것으로 시작한다. df.shape()를 사용하면 데이터 행과 열의 갯수를 확인할 수 있다.

  1. 두번째로는 raw 데이터의 일부를 확인다. df.head() 혹은 df.tail()을 통해 일부의 데이터를 보는 것이다.
  2. 세번째로 확인하는 것은 데이터의 요약본을 보는 것이다. df.info()를 사용하면 데이터의 요약본을 확인할 수 있는데, 대표적으로 확인해 볼 수 있는 정보는 다음과 같다.
    • 칼럼의 이름
    • 결측치가 없는 행의 갯수
    • 데이터 타입
    • 데이터 메모리의 크기

결측치 확인하기

위에서 결측치에 대한 정보를 얼추 확인할 수 있었는데 다음의 코드를 사용하면 결측치에 대한 정보를 더 자세하게 확인할 수 있다.

df.isnull().sum()

뒤에 sum()이라는 코드를 적어주면 결측치의 총합계를 보여준다. 그 외에 .mean() 과 같은 함수를 적으면 비율을 보여주는 등 여러가지 방법을 통해 결측치에 대해 확인할 수 있다. 그 외에 결측치를 히트맵 형식으로 나타내는 방법도 있는데 예를 들어, seaborn의 히트맵을 통해 결측치에 대한 정보를 확인해볼 수 있다. 예시 코드는 다음과 같다.

plt.figure(figsize=(12,10)) #그래프의 크기를 정해줌
sns.heatmap(df.isnull(),cmap="gray") #히트맵을 그리기

기술통계 확인하기

df.describe()
df.describe(include= 'object')

를 사용하면 여러가지 정보를 확인할 수 있는데, 우선 describe속에 아무런 값을 넣어주지 않으면 수치형 변수들에 대한 기술 통계 값을 보여준다.

사진에서도 알 수 있다시피 행의 갯수, 평균, 표준편차, 최솟값, 25%, 50%, 75%에 대한 정보, 최대값을 확인해볼 수 있다.
범주형 데이터의 기술 통계값을 확인해보면 행의 갯수, 유니크한 값의 개수, 가장 빈도수가 높은 값, 가장 빈도수가 높은 값의 빈도수에 대한 정보를 확인해볼 수 있다.

수치형 변수 탐색하기

꿀팁 중 하나로 여러 라이브러리들을 가지고 시각화를 진행하면 어느 라이브러리로 시각화를 한것인지 헷갈리는 경우가 있는데, 데이터프레임의 이름.플롯이름 라고 적으면 대부분 pandas를 이용한 것이고, sns.플롯이름 이라고 적으면 seaborn을 이용한 것이다. matplotlib도 역시 plt.플롯이름이라고 작성하여 시각화를 진행한다.

여기서부터는 진짜 순서가 없는 것 같다. 그러나 나는 우선 수치형 변수들에 대한 histogram을 먼저 파악하는 것을 선호한다. 히스토그램은 막대 형식으로 전체적으로 변수의 값들이 어떤식으로 분포되어 있는지 확인하기 용이하기 때문이다.

df.hist(figsize=(12,10),bins=50)
plt.show()

위에서 히스토그램이 데이터의 분포를 확인하기 용이하다고 였는데, 분포라고 하면 등장하는 개념들 중에 왜도와 첨도가 있다.

  • 왜도는 분포의 비대칭성을 나타낸다. 즉, 분포가 정규분포에 비해서 얼마나 비대칭인가를 나타내는 척도여서 왜도가 양의 값을 가지면 데이터 평균이 정규분포보다 왼쪽으로 치우친 것이고 음의 경우 그 반대의 상황을 의미한다. 보통 절대값이 3 미만일 때 기준에 부합하고, -2~2 정도는 왜도가 그리 크지 않다고 한다.
  • 첨도는 쉽게말해 정규분포보다 더 뾰족하냐를 나타내는 지표로 샘플의 점수가 평균을 중심으로 가까이 몰려 있으면 첨도가 커진다. 정규 분포의 첨도는 0이고 이를 기준으로 매겨진다.

당연히 파이썬에서도 비교적 쉽게 이 정보를 확인할 수 있는데, 다음의 코드를 사용하면 된다.

df.skew()
df.kurt()

위 코드를 사용하면 각 변수들에 대한 첨도와 왜도에 대한 정보가 나온다.

그렇다면 분포에 대한 시각화를 하기 좋은 방법에는 어떤 것들이 있을까?

  1. distplot 사용하기
sns.displot(data=df,x=변수명,kde=True)

위의 코드를 사용하면 막대 히스토그램과 비슷한 형태의 그래프를 그림과 동시에 kde=True 라는 옵션이 들어가 선을 그려 주어 개별 변수에 대해 분포를 살펴보기 편하게 해준다. 물론, distplot외에 kdeplot만을 따로 그려서 볼 수도 있다.

  1. boxplot 사용하기
sns.boxplot(data=df,x=변수명)

박스 플롯은 변수에 대한 많은 내용을 포함하고 있는데, 최대값, 최소값, 중앙값, 이상치, 1,2,3사분위에 대한 정보가 있다. 박스 플롯을 사용하면 한눈에 많은 정보를 확인할 수 있어 수치형 변수 분석에 매우 효과적일 것이다.

  1. violinplot 사용하기

    sns.violinplot(data=df,x=변수명)

    바이올린 플롯은 박스 플롯과 비슷하게 연속형 데이터의 분포를 설명하기 위한 그래프인데 카테고리 값에 대한 각 분포의 전체적인 형상을 잘 보여준다.

  2. scatterplot 사용하기
    위에서 우리는 하나의 변수에 대한 분석을 위한 플롯들을 확인하였다. 그렇다면 두개 이상의 변수를 분석하기에 용이한 플롯은 무엇이 있을까?
    우선, scatterplot이 있다. 한국어로는 산점도라고 불리우는 이 그래프는 두 변수에 대하여 점을 통해 데이터를 표현한다.

    sns.scatterplot(data=df,x='mpg',y='weight',hue='origin')

    예를 들어 seaborn에 내장된 mpg 데이터 셋을 통해 mpg와 weight 변수의 산점도를 그린다고 하면 다음과 같이 그려진다.

    두 변수의 값에 해당하는 수치에 점을 찍으므로 관계를 잘 나타낸다. hue를 사용함으로써 각 점에 해당하는 origin 이 어딘지 색깔로 표현해줄 수 있다는 것을 알 수 있다.

  3. regplot 사용하기
    위에서 산점도에 대해 알아보았는데, 이러한 산점도에 회귀 선을 그려주는 plot 도 존재한다.

sns.regplot(data=df,x='mpg',y='weight')

위의 코드를 실행하면, 다음과 같은 플롯을 얻을 수 있다.

  1. pairplot 사용하기
    pairplot은 각 칼럼별 데이터에 대한 상관관계 혹은 분류적 특성을 확인해볼 수 있는데, 좀 오래 걸리므로 샘플링 후 하는 것을 권장한다.
sns.pairplot(data=df.sample(100))

이때에도 hue 를 사용하여 색깔을 여러 정보를 표현할 수 있다.

그 외에, residplot: 회귀선과 잔차에 대한 정보를 시각화를 할 수 있고, lmplot을 이용하면 범주값에 따라서 색상을 부여하거나, 여러 서브 플롯을 그리는 것도 가능하다. jointplot은 2개의 수치형 변수를 여러가지 plot의 조합으로 보여주는 것이 가능하다.
코드들은 다음과 같다.

# residplot
sns.residplot(data=df,x=변수1,y=변수2,color='green')

# lmplot
sns.lmplot(data=df,x=변수1,y=변수2,markers='x',hue=카테고리컬 변수,col=카테고리컬 변수)

# jointplot
sns.jointplot(data=df,x=변수1,y=변수2,kind='''"scatter", "kde" , "hist", "hex", "reg", "resid" 중 하나''',color=색상)

각 플롯들은 위에서 주어진 예시의 형태뿐 아니라 정말 다양하게 색상과 모양으로 다양한 정보를 담아낼 수 있다.

상관 분석

위키백과에 따르면 상관 분석은 확률론과 통계학에서 두 변수 간에 어떤 선형적 관계를 갖고 있는 지를 분석하는 방법이다. 두 변수는 서로 독립적인 관계이거나 상관된 관계일 수 있으며 이때 두 변수간의 관계의 강도를 상관관계(Correlation, Correlation coefficient)라 한다. 상관분석에서는 상관관계의 정도를 나타내는 단위로 모상관계수로 ρ를 사용하며 표본 상관 계수로 r 을 사용한다.

상관관계의 정도를 파악하는 상관 계수는 두 변수간의 연관된 정도를 나타낼 뿐 인과관계를 설명하는 것은 아니다. 두 변수간에 원인과 결과의 인과관계가 있는지에 대한 것은 회귀분석을 통해 인과관계의 방향, 정도와 수학적 모델을 확인해 볼 수 있다고 한다.

피어슨 상관계수는 변수들관의 관련성을 구하느 이변량 상관 분석인데 가장 널리 쓰인다.

  • r이 -1.0과 -0.7 사이이면, 강한 음적 선형관계
  • r이 -0.7과 -0.3 사이이면, 뚜렷한 음적 선형관계
  • r이 -0.3과 -0.1 사이이면, 약한 음적 선형관계
  • r이 -0.1과 +0.1 사이이면, 거의 무시될 수 있는 선형관계
  • r이 +0.1과 +0.3 사이이면, 약한 양적 선형관계
  • r이 +0.3과 +0.7 사이이면, 뚜렷한 양적 선형관계
  • r이 +0.7과 +1.0 사이이면, 강한 양적 선형관계
    라고 보면 된다.
    출처: 위키백과 주소
corr=df.corr()
sns.heatmap(corr,annot=True,cmap='coolwarm',vmax=1,vmin=-1)

과 같이 상관관계 시각화할 수 있다.

profile
데이터 꿈나무 (시리즈로 들어가면 글이 정리되어있습니다!)

0개의 댓글