본문 바로가기
실험실/기타

[파이썬] ydata 프로파일링(Profiling) : EDA를 쉽게 해주는 파이썬(Python) 패키지

by 니나노래방 2024. 4. 28.

글 정보

- 이 글의 개요소개 : Python에서 탐색적 데이터 분석(EDA)를 쉽게 해주는 패키지를 소개하고, 구동 방식을 보여주는 글입니다. 
- 예상 독자 : 
	- 데이터를 빠르게 파악하고 싶은 분들 (탐색에 들어가는 시간을 줄이고 싶은 분들)
	- 처음에 데이터를 보면 멍해지는 저같은 분들..
	- 매번 EDA 하려는 항목과 Python 코드를 생각하기 어려운 분들
- 글의 목표 : Python을 사용하시는 분들에게 가능한 쉽게 탐색적 분석을 할 수 있는 방법을 소개해드립니다. 
- 알면 좋은 개념 : 
	- 데이터프레임의 개념을 이해하고 계셔야 해요.
	- Pandas라는 Python 라이브러리를 알고 계셔야 해요.

 

들어가며

안녕하세요? 오늘은 <데이터 드리븐 보고> 책에서 나왔던 유용한 분석 패키지를 소개하고자 합니다. 

데이터 분석을 하기 위한 중요한 절차로 탐색적 데이터 분석(Exploratory Data Analysis, EDA)가 있는데요.

이 분석을 더 쉽게 할 수 있는 'y데이터 프로파일링(Ydata Profiling)'이라는 툴이에요.

 

*해당 분석 패키지 정보는 <데이터 드리븐 보고>와 공식 문서를 참고하였음을 미리 알려드립니다! 

 

1. EDA란 무엇인가?

탐색적 데이터 분석(Exploratory Data Analysis, EDA)란 기본적인 데이터를 파악하기 위한 절차적 과정입니다. IBM에서는 다음과 같이 EDA를 정의하고 있습니다. 

Exploratory data analysis (EDA) is used by data scientists to ① analyze and ② investigate data sets and ③ summarize their main characteristics, often ④ employing data visualization methods.
EDA란 데이터 사이언티스트들이 데이터셋을 분석하고 검사하며, 주요 특성을 요약하는 것을 의미해요. 시각화 방법을 사용하기도 합니다.

 

① 데이터셋의 분석

데이터셋이 어떤 구조로 되어 있는지 보는 과정입니다. 행(Rows)의 수나 컬럼(Columns, 변수)를 파악하고, 각 변수의 데이터 종류(Data Type)와 항목들(예를 들어 학교라면 고등학교, 중학교, 초등학교, 대학교 같은 것들)은 무엇인지 보는 것입니다. 변수들 간 관계성이 있을지, 경향성은 어떻게 되는지 등을 미리 확인합니다.

 

② 데이터셋의 검사

우리가 추출하는 데이터가 '건강한가?' 들여다볼 수 있어요. 결측치나 이상치가 없는지 확인하면 정제할 때 도움이 됩니다. 

 

③ 주요 특성 요약

데이터셋으로 알 수 있는 주요 특성을 파악합니다. 

- 각 변수별로 어떻게 데이터가 분포되어 있는지, 분포의 모양은 어떤지, 대표값(중앙값, 평균, 4분위수)은 어떤지, 표준편차나 분산등을 파악할 수 있어요. 

- 변수 간 상관관계를 파악할 수 있습니다.

 

④ 시각화로 패턴 찾기

시계열 데이터나 상관관계 그래프, 분포(군집) 등 필요한 결론을 얻을 수 있습니다. 예를 들어 시계열 데이터인 경우, 시간에 따른 패턴을 차트로 그려 간단히 추세나 계절성을 파악하는 거죠. 

 

 

2. 프로파일링(Profiling) 패키지로 그동안의 페인포인트를 해결

EDA를 하면 그 자체로 '분석'이 되기도 하고, 앞으로의 데이터 분석 과정(정제, 가설, 모델링 설정)에도 도움이 되는 중요한 과정이에요.  필하지만 막상 EDA를 할 때면 막막할 때가 있었는데요. 이 문제를 프로파일링 라이브러리가 어떻게 해소해줬는지, 어떤 상황에 쓰는 게 좋을지 알아볼게요. 

 

1) 페인포인트

제가 기존에 EDA를 하면서 느꼈던 어려운 점은 크게 세 가지였습니다. 때문에 EDA 품질이 일관적이기 않거나 과정이 비효율적인 문제가 있었어요. 

 

① 뭐부터 해야하지? (EDA 항목 아이디에이션)

데이터 분석을 할 때 멍을 때릴 때가 있었습니다. 뭘 해야할 지 아이디에이션을 해야 하기 때문인데요. 이 과정이 자동화가 되거나 단축되면 정말 좋겠다는 생각이 들었어요. 

 

② 무슨 코드를 써야하더라? (코드 생각 안남)

어떤 걸 해야할 지 떠올랐지만, 코드는 또 생각이 안나서 다시 검색하는 과정이 발생했습니다. 저는 회사 다닐 때 주로 SQL을 쓰다보니, 파이썬(Python) 코드를 까먹고 헤매는 경우가 종종 있었어요. EDA를 하다보면 데이터 구조를 파악하는 것부터(describe(), Info()보기) 시각화(Matplotlib로 히스토그램이나 상관관계 보기) 은근히 해야할 게 많거든요. 해야할 때마다 이런 코드들을 다시 확인해야하면서 비효율성이 커졌어요.

 

③ 균질적이지 않은 EDA 품질 (빼먹음)

때로는 EDA가 온전하지 않을 때도 있습니다. 대략 어떤 걸 파악해야하는 지는 알고 있지만, 가끔은 까먹기도 했습니다.. 🥲 (반성합니다..)

 

2) Ydata 프로파일링(Profiling)

그런데 책을 보면서 프로파일링 패키지를 알게 되었습니다. 파이썬 환경에서 데이터를 자동으로 분석해서 기본 통계나 시각화를 포함한 간단한 레포트를 만들어 줍니다. 데이터를 2-3줄 내에서 간단하게 요약해주는 녀석이에요. 

 

3) 레포트 주요 항목

항목 설명
Overview (개요) 데이터셋의 기본 구조를 보여주고, 데이터상 특징적인 부분도 알려줍니다. 
- Overview : 변수의 갯수, 결측데이터 수, 중복데이터 수, 메모리 크기 등, 데이터 타입
- Alerts : 중복값, 상관관계가 높음, 결측치가 두드러지는 컬럼을 알려줌
Variables (변수) 변수별 특징을 자세히 볼 수 있습니다. 
- 제공 정보 : 유니크값, 결측값, 평균, 최소값 최대값, 0값, 음수 개수
- 시각화 : 히스토그램 (분포 확인 가능)
Interactions (상관관계, 2변수) 두 변수간 상관관계를 시각적으로 보여줍니다 (2변수 상관관계 그래프)
Correlations (상관관계, 히트맵) 여러 변수간 상관관계를 시각적으로 보여줍니다 (히트맵)
Missing Values (결측치) 컬럼별 결측치 수를 보여줍니다. 
Duplicate Rows (중복값) 컬럼별 주요 중복데이터와, 중복 개수를 보여줍니다. 
Sample (예시) 데이터표의 예시를 보여줍니다. (맨 처음 몇개의 행과 마지막 몇 개의 행을 보여줍니다. 
판다스(Pandas) 라이브러리에서 df.head(), df.tail()과 동일해요.

 

* 단순히 리포트를 제공하는 것 외에 다양한 기능이 있는데, 해당 기능은 다음에 차차 알아보기로 합시다!!

 

 

4) 장점

 

① 간편하다 : 길게는 세 줄이면 된다

코드 세 줄이면 되기 때문에 간편합니다. 

 

② 다양한 EDA 값을 제공한다. 

개요부터 예시까지 다양한 EDA 값을 제공합니다. 

 

③ 균일한 EDA 품질을 보장한다. 

항목이 균일하기 때문에 균등한 EDA 품질을 제공합니다. 

 

 

5) 어느 때 쓰면 좋을까?

이런 '정형화된' 툴의 장점은 균일한 품질을 보장하는 것인데요. 반면 자유도가 떨어지는 문제가 있습니다. 따라서 이 툴에 무조건 의지하지는 않고, 상황에 따라 보조적으로 사용할 필요가 있습니다. 하지만 EDA의 출발점으로는 탁월하다고 생각합니다!

  Ydata Profiling (프로파일링 패키지) 수동으로 하기
장점 - 균등한 품질 제공 
- 빠른 처리
- 높은 자유도
사용례 - 기본 데이터 파악만 빠르게 해야하는 경우
- 구체적인 데이터 파악 이전 단계
- 구체적인 EDA가 필요한 경우 
   예1 : 세그먼트별 EDA가 필요하다 
   예2 : 결측치가 어떤 항목에서 발생하는지 확인한다 
   예3 : 이상치(Outlier) 기준을 설정한다. 

 

 

3. 코드 세 줄로 EDA 리포트 받아보자

그렇다면 이제부터 코드로 EDA 리포트를 직접 받아볼까요? 하나씩 따라해 봅시다. 

 

1) 환경

저는 구글 코랩(Google Colab) 환경에서 EDA를 진행하겠습니다. 

구글 코랩은 구글 드라이브 내에서 실행할 수 있어요. 

 

2) 데이터셋  소개

income이라는 데이터셋을 사용하겠습니다 (원래는 캐글의 Income Dataset의 train.csv 파일을 가져왔으나 이름만 수정했어요)

  • 사람들의 수입과 수입과 관련된 여러 변수(나이, 교육연도, 직업, 인종, 성별) 등을 알 수 있습니다. 
  • 종속변수 : 수입이 5만 불을 넘는지 여부 (명목변수)
  • 독립변수 : 나이, 교육연도(이하 이산변수), 직업, 인종, 성별(이하 명목변수)

3) EDA  돌려보기

패키지를 설치해 줍니다. 

pip install ydata_profiling

 

라이브러리와 패키지를 가져옵니다. 

import pandas as pd
import ydata_profiling
from ydata_profiling import ProfileReport

 

파일을 불러오겠습니다.

df = pd.read_csv("파일 경로")

 

필요한 컬럼만 가져옵니다. 

df = df[['income_>50K','age', 'educational-num', 'occupation', 'race', 'gender']]

 

ProfileReport를 돌려볼까요? 

report = ProfileReport(df)
report

완성되었습니다!

 

 

마치며

1) 요약

EDA를 쉽게 해주는 녀석이지만 한계가 있어요. 커스터마이징이 필요한 경우는 추가적인 분석도 해봐야 합니다! 

 

2) 결론

패키지의 도움으로 모든 것을 데이터 분석가나 기획자가 직접 할 필요는 없게 되었습니다.

한편으로는 우리의 일이 없을까봐(?) 두려움이 있지만, 불필요한 데 시간을 쓰지 않고 더 심화된 분석을 하는 데 도움이 될 거라고 생각합니다. 할 수 있는 것은 최대한 효율화하여 리소스를 줄여보겠습니다. 

 

 

감사합니다. 

 

'실험실 > 기타' 카테고리의 다른 글

노션AI로 표도 쉽게 만들어버리자  (0) 2023.10.30

댓글