본문 바로가기
데이터분석

[빅분기 실기] 작업형1 문제 유형별 코드 정리

by 코듀킹 2024. 11. 24.

내가 헷갈린 문제 유형만 정리한 문서

 

 

1. 날짜 데이터 활용

# 날짜 형식으로 변환
print(pd.to_datetime(df['datetime']))

# 초 단위로 변환
print(df['datetime']).dt.total_seconds())

# 분 단위로 변환
print(df['datetime']).dt.total_seconds() / 60)

# 날짜만 추출
print(df['datetime']).dt.date)

# 시간만 추출
print(df['datetime']).dt.hour)

# 분만 추출
print(df['datetime']).dt.minute)

# 요일 추출
print(df['datetime']).dt.day_name())

# date type 인덱스에서 주 단위로 sum() 집계 하기
print(df.resample('W').sum())

# 날짜 형식 변환
print(df['datetime']).strftime('%Y-%m-%d'))
# datetime.date(2023, 3, 28) -> '2023-03-28'

# 날짜와 시, 분, 초가 숫자로 되어있는 경우
df['num_date'] = df['num_date'].astype(str) # 20110101 -> '20110101'
df['num_time'].apply(lambda x: f'{x:06}') # 2800 -> '002800'
print(pd.to_datetime(df['num_date'] + df['num_time'],
                                         format="%Y%m%d%H%M%S")) #2011-01-01 00:28:00

 

2. 사분위수

# 1, 3사분위수 구하기
Q1, Q3 = df['age'].quantile([0.25, 0.75])

# IQR 구하기
print(Q3 - Q1)

# 이상치 구하기
print(df.loc[df['컬럼'] < Q1 - 1.5 * IQR])
print(df.loc[df['컬럼'] > Q3 + 1.5 * IQR])

 

3. 표준화

# 방법1
from scipy.stats import zscore
zscore(df['숫자타입컬럼'])

# 방법2
from sklearn.preprocessing import StandardScaler
StandardScaler().fit_transform(df[['숫자타입컬럼']])

# 방법3
from sklearn.preprocessing import StandardScaler
import numpy as np
StandardScaler().fit_transform(np.array(df['숫자타입컬럼']).reshape(-1,1))

 

4. 공분산

# 공분산
df.cov()

# 상관계수
df.corr()

# 결정계수
df.corr() ** 2

# 오즈비
np.exp(model.params['A'])

 

5. 결측치 특정값으로 채우기

df = df.fillna(df['city'].map({'서울':1,'경기':2,'부산':3,'대구':4}))

# 이전 값으로 채우기
df = df.fillna(method = 'bfill')

# 이후 값으로 채우기
df = df.fillna(method = 'pad')

# 최빈값으로 채우기1
from sklearn.impute import SimpleImputer
df['숫자타입컬럼'] = SimpleImputer(strategy ='most_frequent').fit_transform(df[['숫자타입컬럼']])

# 최빈값으로 채우기2
df['숫자타입컬럼'] = df['숫자타입컬럼'].fillna(df['숫자타입컬럼'].mode()[0])

 

6. 올림내림

import numpy as np
np.ceil() # 올림
np.floor() # 내림
np.trunc() # 버림

 

7. 왜도와 첨도

# 왜도
df['숫자타입컬럼'].skew()

# 첨도
df['숫자타입컬럼'].kurt()

 

8. 로짓 변환

np.log1p(df['숫자타입컬럼'])

 

9. 누적합

df['숫자타입컬럼'].cumsum()

 

10. 여존슨, 박스칵스

# 여-존슨 yeo-johnson
from scipy.stats import yeojohnson
yeojohnson(df['숫자타입컬럼'])[0]

# 박스-콕스 box-cox
from scipy.stats import boxcox
boxcox(df['숫자타입컬럼'])[0]
  • 박스-콕스 변환은 데이터가 정규 분포를 따르지 않을 때, 이를 정규 분포에 가깝게 변환하기 위해 사용되는 방법입니다. 이 방법은 연속적이고 양수인 데이터에만 적용됩니다.
  • 여존슨 변환은 박스-콕스 변환의 확장판입니다. 박스-콕스 변환은 양수 데이터에만 적용될 수 있지만, 여존슨 변환은 양수와 음수 데이터 모두에 적용할 수 있습니다. 이는 박스-콕스 변환이 제한되는 경우를 해결하기 위한 방법입니다.

11. 분산

df['숫자타입컬럼'].var()

 

12. 구간 분할

pd.qcut(df['숫자타입컬럼'], q=3, labels=['group1', 'group2', 'group3'])

 

13. 중복데이터 제거

# A열을 기준으로 중복된 데이터 제거하기
df.drop_duplicates(subset=['A'])

 

14. 시차 컬럼 만들기

# A 컬럼의 1일 시차가 있는 컬럼 만들기
df['NewColumn'] = df['A'].shift(1)

 

15. 시그모이드 함수

def sigmoid(x):
    return 1 / (1 + np.exp(-x))

df['sigmoid'] = df['숫자타입컬럼'].apply(sigmoid)

 

16. relu

def relu(x):
    return np.maximum(0, x)

df['숫자타입컬럼'] = df['숫자타입컬럼'].apply(relu)

 

추가적으로 groupby, value_counts, loc, iloc, merge, concate, drop, drop_duplicate, duplicated, reset_index, set_index, idxmax, unstack, sort_values, replace, np.round 등 기본적인 함수들은 충분히 알고 있어야 좋다. 해당함수들에 대한 설명은 Pandas 카테고리에 대부분 글을 포스팅해놓았기 때문에 참고하길 추천한다.

 

댓글