25.05.19 코딩 공부 시작

코딩 척척석박사 분들 피드백 환영합니다.

공대생이 코딩에서 살아남기

특강/전처리 & 시각화

[전처리&시각화] 3일차(05.30)

코딩 아가 2025. 5. 30. 20:58

고급 전처리 메서드

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: 분할-적용-결합
    1. 기본 GroupBy 사용법
      • # 지역별 그룹 생성
        grouped = df.groupby('region')
        # 각 그룹 확인하기
        for name, group in grouped:
    2. 집계 함수 적용
      • # 지역별 매출 합계
        region_sum = df.groupby('region')['sales'].sum()
    3. agg(): 여러 통계량 결합
      • # 한 컬럼에 여러 함수 적용
        region_agg = df.groupby('region')['sales'].agg(['sum', 'mean', 'count'])
        # 여러 컬럼에 각각 다른 함수 적용
        multi_agg = df.groupby('region').agg({
            'sales': ['sum', 'mean'],                   # sales는 합계와 평균
            'product': 'count'                             # product는 개수만
    4. 여러 컬럼으로 그룹화
      • # 지역과 제품을 모두 고려한 그룹화
        region_product = df.groupby(['region', 'product'])['sales'].sum()
  • 피벗 테이블: 복잡한 데이터를 보기 쉬운 표 형태

 

df.pivot_table(values='집계할컬럼', index='행컬럼', columns='열컬럼', aggfunc='집계함수', ill_value= '결측치 대신 사용할 값')
    1. 기본 피벗 테이블
    2. 다양한 집계 함수 사용
    3. 합계 행/열 추가
    4. 수동으로 합계 추가
  • 데이터 결합
    1. concat(): 동일한 구조의 데이터 연결
    2. merge(): 서로 다른 테이블 결합