데이터 사이언스 - 4. 탐색적 데이터 분석 (EDA) (4.1 데이터 구조 및 기본 통계 분석)

2025. 3. 20. 12:42데이터 분석/데이터 사이언스

4.1 데이터 구조 및 기본 통계 분석

데이터 분석의 첫 번째 단계는 데이터의 구조를 이해하고 기본적인 통계 정보를 확인하는 것이다.
이 과정에서는 데이터의 분포를 파악하고, 이상치(Outlier)나 결측치(Missing Value)를 확인할 수 있다.

이 장에서는 Pandas의 기본 함수(describe(), info(), value_counts())를 활용하여 데이터를 탐색하고, 데이터 분포를 시각적으로 분석하는 방법(Histogram, Boxplot)을 다룬다.


4.1.1 데이터 구조 확인 (describe(), info())

데이터를 이해하기 위해 가장 먼저 확인해야 할 것은 데이터프레임의 구조(컬럼, 데이터 타입, 결측치, 통계값 등)이다.
Pandas의 describe()와 info() 메서드를 활용하면 이를 쉽게 확인할 수 있다.

① df.info() - 데이터 구조 및 결측치 확인

import pandas as pd

# 샘플 데이터 생성
data = {
    "Name": ["Alice", "Bob", "Charlie", "David", "Emma"],
    "Age": [25, 30, 35, 40, None],
    "Score": [85, 90, 88, 92, 87]
}

df = pd.DataFrame(data)

# 데이터 구조 확인
print(df.info())

출력 결과 예시

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 5 entries, 0 to 4
Data columns (total 3 columns):
 #   Column  Non-Null Count  Dtype  
---  ------  --------------  -----  
 0   Name    5 non-null      object 
 1   Age     4 non-null      float64
 2   Score   5 non-null      int64  
dtypes: float64(1), int64(1), object(1)
  • Non-Null Count → 결측치 여부 확인 가능 (Age 컬럼에 결측치 존재)
  • Dtype → 데이터 타입 확인 (object, int64, float64)

② df.describe() - 기본 통계 정보 확인

print(df.describe())

출력 결과 예시

             Age     Score
count   4.000000  5.000000
mean   32.500000  88.400000
std     6.454972   2.702702
min    25.000000  85.000000
25%    28.750000  87.000000
50%    32.500000  88.000000
75%    36.250000  90.000000
max    40.000000  92.000000
  • count → 데이터 개수
  • mean → 평균값
  • std → 표준편차 (데이터의 변동성)
  • min, max → 최솟값, 최댓값
  • 25%, 50%, 75% → 사분위수

4.1.2 범주형 데이터 개수 확인 (value_counts())

범주형 데이터의 분포를 확인하려면 value_counts()를 사용하면 된다.
이 함수는 특정 컬럼에서 각 고유값의 개수를 계산해준다.

# 범주형 데이터 샘플 생성
df["Category"] = ["A", "B", "A", "C", "B"]

# value_counts() 사용
print(df["Category"].value_counts())

출력 결과

A    2
B    2
C    1
Name: Category, dtype: int64
  • 카테고리 A와 B가 각각 2개, C가 1개 존재

비율(%)로 확인

print(df["Category"].value_counts(normalize=True) * 100)
A    40.0
B    40.0
C    20.0
Name: Category, dtype: float64
  • 각 카테고리의 비율을 백분율(%)로 출력 가능

4.1.3 데이터 분포 확인 (Histogram, Boxplot)

데이터의 분포를 이해하는 것은 이상치(Outlier) 탐색 및 데이터의 변동성 분석에 매우 중요하다.
가장 많이 사용되는 방법은 히스토그램(Histogram)과 박스플롯(Boxplot)이다.


① 히스토그램 (Histogram)

히스토그램은 데이터를 구간별로 나누어 개수를 시각적으로 표현하는 그래프이다.
이를 통해 데이터의 분포 형태(정규 분포, 치우친 분포 등)를 파악할 수 있다.

import matplotlib.pyplot as plt
import seaborn as sns

# 히스토그램 시각화
plt.figure(figsize=(6,4))
sns.histplot(df["Score"], bins=5, kde=True, color="blue")  # kde=True: 커널 밀도 추정
plt.xlabel("Score")
plt.ylabel("Count")
plt.title("Histogram of Scores")
plt.show()

히스토그램 해석

  • X축: 데이터 값의 범위
  • Y축: 각 구간에 해당하는 데이터 개수
  • kde=True 옵션을 사용하면 데이터 밀도를 부드럽게 나타내는 곡선이 추가됨

② 박스플롯 (Boxplot)

박스플롯은 데이터의 최소값, 최대값, 중앙값(50%), 사분위수(25%, 75%)를 시각적으로 표현하는 그래프이다.
이상치(Outlier)도 함께 확인할 수 있다.

plt.figure(figsize=(4,5))
sns.boxplot(y=df["Score"], color="orange")
plt.ylabel("Score")
plt.title("Boxplot of Scores")
plt.show()

박스플롯 해석

  • 박스 내부: 1사분위수(Q1) ~ 3사분위수(Q3)
  • 가운데 선: 중앙값(50%)
  • 수염(whiskers): 데이터의 최소값, 최대값
  • 박스 외부 점: 이상치(Outlier)

4.1.4 데이터 탐색 및 분석 방법 비교

분석 방법 설명 사용 예시
info() 데이터 구조, 결측치 확인 데이터 타입, 개수 확인
describe() 기본 통계값 확인 평균, 표준편차, 사분위수
value_counts() 범주형 데이터 개수 확인 카테고리별 빈도수
Histogram 데이터 분포 확인 연속형 데이터의 패턴 탐색
Boxplot 이상치 탐색 및 변동성 확인 데이터의 중앙값과 이상치 탐색

결론

데이터 분석을 시작할 때 데이터의 구조를 파악하고, 분포를 시각적으로 확인하는 과정이 필수적이다.

  • info(), describe(), value_counts() → 데이터의 기본 정보 및 통계값 확인
  • 히스토그램(Histogram)데이터의 분포 형태 분석
  • 박스플롯(Boxplot)이상치 및 변동성 확인

이러한 기법을 활용하면 데이터의 특성을 정확하게 이해할 수 있으며, 데이터 전처리 및 머신러닝 모델링에 필요한 인사이트를 얻을 수 있다.