기초 분석과 데이터 정제

교재 6.12 ~ 6.14 절. describe() 로 기술통계 한번에, 결손값 3단계 처리, 시계열을 위한 DatetimeIndex.


1. describe() — 기술통계 한 방에

PYTHON
weather = pd.read_csv('weather.csv', encoding='CP949')
weather.describe()

출력되는 값:

지표의미
count유효값 개수 (결손 제외)
mean평균
std표준편차 (베셀 보정 적용)
min / max최솟값 / 최댓값
25% / 50% / 75%사분위수
  • 문자열 열은 자동 제외
  • 개별 계산: df.mean(), df.std(), df.max()

1.1 베셀 보정 — 한 줄 요약

판다스의 std() 는 분모 n − 1 (베셀 보정) 으로 나눕니다. NumPy 의 np.std() 는 기본 분모 n. 결과가 미묘하게 다른 이유.

📐 편차 / 분산 / 표준편차의 정의와 손계산기술통계 페이지 에서 자세히 다룹니다. 시험 손계산이 필요하면 그쪽으로.


2. 결손값 3단계 처리

2.1 탐지 — isna()

PYTHON
df.isna().sum()     # 열별 결손 개수
df.count()          # 유효값 개수 (df.shape[0] - df.isna().sum())

2.2 제거 — dropna()

PYTHON
df.dropna()                  # 결손 있는 행 제거
df.dropna(axis=1)            # 결손 있는 열 제거
df.dropna(how='all')         # 모두 NaN 인 행만 제거

2.3 대체 — fillna()

PYTHON
df.fillna(0)                         # 0 으로 채움 (평균을 왜곡할 수 있음)
df['풍속'].fillna(df['풍속'].mean())  # 평균으로 채우기 (추천)
df.fillna(method='ffill')            # 앞의 값으로 채우기 (시계열)

주의: 단순히 0 으로 채우면 표본 크기는 늘지만 평균·분산이 왜곡될 수 있습니다. 열 평균으로 대체하는 것이 현명한 기본 선택.


3. 시계열 데이터와 DatetimeIndex

시계열(time series) 은 시간의 흐름에 따라 순차적으로 관측한 값들의 집합.

PYTHON
pd.DatetimeIndex(['2020-01-15', '2020-02-01 13:45', '20200303'])
# DatetimeIndex(['2020-01-15', '2020-02-01 13:45:00', '2020-03-03'], dtype='datetime64[ns]')

다양한 형식을 자동 파싱하고 속성으로 분해할 수 있습니다.

PYTHON
dti = pd.DatetimeIndex(df['일시'])
dti.year    # 연
dti.month   # 월
dti.day     # 일
dti.hour    # 시
dti.minute  # 분

3.1 'month' · 'year' 열 만들기

PYTHON
df['month'] = pd.DatetimeIndex(df['일시']).month
df['year']  = pd.DatetimeIndex(df['일시']).year

이렇게 만들어 둔 파생 열은 다음 단원의 groupby 에서 월별·연별 통계를 낼 때 키로 쓰입니다.


4. 데이터 정제 체크리스트

  • 전체 크기 확인 — df.shape
  • 열별 유효값 확인 — df.count() · df.isna().sum()
  • 기술통계 훑기 — df.describe()
  • 문자열 열 존재 여부 — df.dtypes
  • 결손 처리 전략 선택 — dropna vs fillna
  • 날짜 열이 있다면 DatetimeIndex 로 변환

📝 Checkpoint

Quiz

기초 분석 · 데이터 정제 Checkpoint

Q 1 / 3

판다스 std() 가 표본 크기 n 대신 n-1 로 나누는 이유는?


🔗 다음 학습