고급 전처리 메서드
1. 시계열 관련 메서드: 변화의 패턴 중요, 트렌드 파악
- rolling(): 이동평균으로 트렌드 파악하기
# 5일 이동평균 계산(0-3까지는 앞의 5개의 데이터가 없기 때문에 NaN)
stock_df['price_ma5'] = stock_df['price'].rolling(window=5).mean()
print("5일 이동평균 결과:")
print(stock_df[['date', 'price', 'price_ma5']].head(7))

- diff(): 전날 대비 이동평균의 변화, 양수(상승)/음수(하락)
# 이동평균으로 트렌드 확인
stock_df['trend'] = stock_df['price_ma5'].diff()
print("트렌드 변화:")
print(stock_df[['date', 'price', 'price_ma5', 'trend']].tail())

2. 데이터 변화량 계산
- shift(): 시간 이동 후 비교
# 전일 가격 가져오기
stock_df['price_prev'] = stock_df['price'].shift(1)
print("오늘과 어제 가격 비교:")
comparison = stock_df[['date', 'price', 'price_prev']].head(5)
print(comparison.round(2))

- pct_change(): 변화율로 성장률 분석
# 일일 수익률 계산
stock_df['daily_return'] = stock_df['price'].pct_change()
print("일일 수익률:")
returns = stock_df[['date', 'price', 'daily_return']].head(7)
print(returns.round(4))

3. 중복값 제거 및 처리
- duplicated(): 중복 행 식별, 첫 번째 행(False)/그 이후 중복 행(True)
# 모든 중복 행 보기 (첫 번째 발생 포함)(keep=False: )
all_duplicates = trades_df.duplicated(keep=False)
print(f"모든 중복 관련 행의 개수: {all_duplicates.sum()}")
print("\n모든 중복 관련 행들:")
duplicate_rows = trades_df[all_duplicates].sort_values(['stock_symbol', 'trade_date'])
print(duplicate_rows)

- drop_duplicates(): 중복 행 제거
# 완전 중복 제거
clean_trades = trades_df.drop_duplicates()
print(f"중복 제거 후 행 수: {len(clean_trades)}")
# 특정 컬럼 기준으로 중복 제거
# 같은 날짜, 같은 종목의 거래는 하나만 남기기
business_clean = trades_df.drop_duplicates(subset=['stock_symbol', 'trade_date'])
print(f"비즈니스 로직 기준 중복 제거 후: {len(business_clean)}")
business_clean[['stock_symbol', 'trade_date', 'quantity', 'price']]
Apply 함수 마스터하기
- 복잡한 조건문이나 여러 단계의 로직을 간단하게 적용 가능
customers_df['새 컬럼'] = customers_df['기존 컬럼'].apply(새함수)
- apply+lambda함수
# 구매 횟수를 3단계로 분류
customers_df['purchase_level'] = customers_df['purchase_count'].apply(
lambda x: 'High' if x >= 10 else 'Medium' if x >= 5 else 'Low'
)
print("구매 빈도 분류:")
print(customers_df[['customer_id', 'purchase_count', 'purchase_level']])

- apply + chatGPT(직접x)
데이터 집계 및 재구조화
- GroupBy: 분할-적용-결합
- 기본 GroupBy 사용법
-
# 지역별 그룹 생성grouped = df.groupby('region')# 각 그룹 확인하기for name, group in grouped:
-
- 집계 함수 적용
-
# 지역별 매출 합계region_sum = df.groupby('region')['sales'].sum()
-
- agg(): 여러 통계량 결합
-
# 한 컬럼에 여러 함수 적용region_agg = df.groupby('region')['sales'].agg(['sum', 'mean', 'count'])# 여러 컬럼에 각각 다른 함수 적용multi_agg = df.groupby('region').agg({'sales': ['sum', 'mean'], # sales는 합계와 평균'product': 'count' # product는 개수만
-
- 여러 컬럼으로 그룹화
-
# 지역과 제품을 모두 고려한 그룹화region_product = df.groupby(['region', 'product'])['sales'].sum()
-
- 기본 GroupBy 사용법
- 피벗 테이블: 복잡한 데이터를 보기 쉬운 표 형태
df.pivot_table(values='집계할컬럼', index='행컬럼', columns='열컬럼', aggfunc='집계함수', ill_value= '결측치 대신 사용할 값')
-
- 기본 피벗 테이블
- 다양한 집계 함수 사용
- 합계 행/열 추가
- 수동으로 합계 추가
- 데이터 결합
- concat(): 동일한 구조의 데이터 연결
- merge(): 서로 다른 테이블 결합
'특강 > 전처리 & 시각화' 카테고리의 다른 글
| [전처리&시각화] 5일차(06.04)<fig, ax, seaborn, 색상 및 테마> (3) | 2025.06.04 |
|---|---|
| [전처리&시각화] 4일차(06.02) (2) | 2025.06.02 |
| [전처리&시각화] 2일차(05.29) <데이터 정보, 결측치, 이상치> (0) | 2025.05.29 |
| [전처리&시각화] 1일차(05.28) (4) | 2025.05.28 |