기초 분석과 데이터 정제
교재 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 - 결손 처리 전략 선택 —
dropnavsfillna - 날짜 열이 있다면
DatetimeIndex로 변환
📝 Checkpoint
Quiz
기초 분석 · 데이터 정제 Checkpoint
Q 1 / 3