kyejin0412 님의 블로그

[TIL] Week 7-4 파이썬 Pandas 기본 과제 오답노트 / window function - shift, rolling, expanding / 상관관계 본문

내일배움캠프-데이터분석

[TIL] Week 7-4 파이썬 Pandas 기본 과제 오답노트 / window function - shift, rolling, expanding / 상관관계

kyejin0412 2025. 12. 4. 18:15

어제 깜빡하고 판다스 과제를 못해서 코드카타 대신 판다스 과제를 했다. 체크 안했으면 못 냈을 뻔..ㄷㄷ

그리고 오늘은 세션이 4개나 있었다...ㅋㅋㅋㅋ 점점 내용도 어려워져서 한번에 이해하기가 어렵고 집중하기도 힘든것 같다.

근데 4개나 있으니 정신이 멍해졌다. 눈도 침침해지는듯..

일단 오늘 알게 된 내용을 정리해보았다. 내용이 정말 많았어서 세션에서 배운 내용을 다 적지는 못했다ㅠ 다 소화를 못했기 때문...추가 공부가 더 필요할 것 같다. 하지만 오늘은... 여기서 마무리하는걸로... (영혼 빠져나감..)


 

1. 파이썬 부등호 2개 사용 가능

그동안 부등호를 조건문 당 하나만 사용할 수 있는 줄 알았는데,

판다스 과제를 통해 2개도 사용가능 하다는 것을 알게 되었다.

 

아래와 같이 사용하면, (5<=x.hour)<12 로 인식한다고 한다. 결론적으로 사용가능!!

'아침' if 5 <= x.hour < 12 else

 

 

2. 람다 함수 사용

판다스 과제에서 마지막 도전 문제를 실패했다.

apply(lambda x: 함수내용) 

람다함수안에 조건문을 하나 넣는 거였는데, 조건이 여러 개인데 elif는 쓸 수 없다고 하니, 어떻게 하나로 써야할 지에서 막혔다.

정답을 보니 else로 이어주면 되더라!

 

또한 datetime으로 포맷을 바꿔주어서, 한줄 한줄의 year, month, day, hour, minute에 접근이 가능하다.

람다함수의 조건문은

"[오른쪽 조건문이 true일 때 값] if 조건문 else ~~ [앞의 조건에 해당되지 않을 때 값]"

위와 같이 쓰면 된다. 

df['Dep_Time'] = pd.to_datetime(df['Dep_Time'], infer_datetime_format=True)
df['Time_of_Day'] = df['Dep_Time'].apply(
    lambda x: '아침' if 5 <= x.hour < 12 else
              '오후' if 12 <= x.hour < 18 else
              '저녁' if 18 <= x.hour < 24 else
              ''
)

 

 

3. mask 메소드 사용시 조건에 소괄호 필수!

 

소괄호를 쓰지 않으면 조건으로 인식이 안되는 것 같다. 

mask = ((조건1) & (조건2)) <-- 이렇게 말이다.

소괄호를 안 쓰는 실수를 했다.. 허허

 

그 외에도 mask와 같은 결과를 내는 슬라이싱, loc이 있다!

# mask 메소드 사용
mask = ((df['Airline'] == 'Air India') & (df['Price'] >= 7000))
df[mask]

# 슬라이싱
df[(df['Airline'] == 'Air India') & (df['Price'] >= 7000)]

# loc 함수 사용
df.loc[(df['Airline'] == 'Air India') & (df['Price'] >= 7000)]

 

 

4. Window function 구현 - shift 메소드

시계열 데이터의 인덱스를 원하는 기간만큼 쉬프트 하는 메서드

  • 문법
    • DataFrame.shift(periods=기간, freq=None, axis=0, fill_value='비었음')
  • 주요 파라미터
    • periods: 이동할 기간. 음수 또는 양수로 입력.
    • freq: 선택 매개변수. Y, M, D, H, T, S, Timestamp, 'Infer' 등이 위치
    • fill_value: shift로 인해 생긴 결측치를 대체할 값 지정
    • axis: 연산할 축방향 설정. 0(행) / 1(열)
  • 예시
    • df.shift(1).head() # 이전 값 땡김
    • df.shift(-1).head() # 이후 값 땡김
    • df.shift(periods=3,freq='D') # 3일 이동
    • df.shift(periods=3,freq='infer') # df의 날짜간격을 분석해서 적당한 주기를 이동

 

 

5. Window function 구현 - rolling 메소드

데이터프레임 내 열에 대하여 일정 크기의 창(window, 범위)를 지정하여 그 window 안의 값을 추가 연산을 통해 계산하는 메서드

 

  • 문법
    • DataFrame.rolling(window, min_periods=None, center=False, win_type=None, on=None, axis=0, closed=None, method='single')
  • 주요 파라미터
    • window: 계산할 창(window)의 크기. 열 기준으로 계산할 경우 행의 수.
    • min_periods: 계산할 최소 크기(기간) . 기본적으로 window 크기와 동일.
    • center: 계산을 중간 행에서 할 지 결정하는 파라미터. 기본값은 False, True 로 할 경우 중간 행을 기준으로 계산
    • win_type: triang / gaussian 등 가중치를 넣어 계산할 경우 계산 방식.
    • on: 시계열 인덱스나, 시계열과 유사한 열이 있을 경우 이 열을 기준으로 rolling을 수행할 수 있음.
    • axis : 연산할 축방향 설정. 0(행) / 1(열)
    • closed: 연산이 닫히는 방향을 설정. left / right / both / neither 이 존재.
      • right: 오른쪽 값을 포함하여 계산
      • left: 왼쪽 값을 포함하여 계산
      • both: 양쪽을 포함하여 계산
      • neither: 양쪽을 포함하지 않고 계산
    • method:{'single' / 'table'} numba를 이용하여 테이블 계산을 진행하여 속도를 높힐지 여부. 현재 'single'만 사용가능.
  • 예시
    • df.rolling(window=3).mean() # 3일 이동평균 구하기
    • df.rolling(window=3).sum() # 3일 누적합 구하기
    • df.rolling(window=3, center=True, closed='left').mean() # 3일 이동평균을 중간 행을 기준으로 계산하고, 왼쪽 값을 포함하여 계산

 

 

6. Window function 구현 - expanding 메소드

  • 정의
    • 행이나 열의 값에 대해 누적으로 연산을 수행하는 메서드
  • 문법
    • df.expanding(min_periods=1, axis=0, method='single').추가메서드()
  • 주요 파라미터
    • min_periods: 연산을 수행할 요소의 최소 갯수입니다. 이보다 작으면 NaN을 출력
    • axis : 연산할 축방향 설정. 0(행) / 1(열)
    • method: 연산방식. single(연산을 한 줄씩 수행) table(전체 테이블에 대해서 롤링수행). 기본값 single , 롤링 연산할 경우 numba 라이브러리 추가로 import 필요.
  • 예시
    • df.expanding(axis=1).sum() #열 기준으로 누적합 계산

 

 

 

7. 상관관계

  • 정의
    • 두 변수간의 직선관계. 인과관계가 아님.
    • 더워서 아이스크림을 샀다.(인과관계)
    • 날씨가 더우면 아이스크림이 잘 팔린다.(상관관계)
  • 지표
    상관계수(Correlation Coefficient)
    상관계수는 -1과 1 사이의 값을 가진다.

    +1에 가까울수록 양의 상관관계(비례)
    0 에 가까울수록 선형적인 관계가 아님을 의미
    - 1에 가까울 수록 음의 상관관계(반비례)

 

 

 

8. 데이터 타입별 상관관계