빅데이터분석기사

작업형 제1유형 헷갈리는 내용 정리

_jju 2026. 6. 10. 22:16

IQR을 활용한 이상치 찾기

# pandas 활용
Q1 = df[col].quantile(.25)
Q3 = df[col].quantile(.75)

# numpy 활용
Q1 = np.percentile(df[col], 25)
Q3 = np.percentile(df[col], 75)

Q1 - IQR*1.5 보다 작거나

Q3 + IQR*1.5 보다 크면 이상치로 판단(포함x)

 

올림, 내림, 절사

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

groupby와 map, transform

# city별 중앙값으로 대체
# 인덱스 안맞을 때 transform으로 해결하는 방법
medi_seri = df['f1'].groupby(df['city']).transform('median')
df['f1'].fillna(medi_seri)
# city별 중앙값으로 대체
# 인덱스 안맞을 때 map으로 해결하는 방법
medi_seri = df['f1'].groupby(df['city']).median()
df['f1'].fillna(df['city'].map(medi_seri))

 

왜도와 첨도, 로그변환

  • 왜도: 분포의 비대칭 정도
  • 첨도: 꼬리의 두꺼운 정도
# 왜도구하기
df(['']).skew()

# 첨도구하기
df(['']).kurt()

 

  • 로그스케일링으로 변환하는 방법
df['SalePrice'] = np.log1p(df['SalePrice'])

넘파이에 log1p가 있다는 것을 기억할 것

 

파이썬의 조건식

파이썬에서 조건식 만들 때는 절대 and나 or 사용하지 말것

반환되는게 true/false값이 들어있는 series 형태로 반환되는거지 단일 불리언 값으로 반환되는게 아니기에 영문자 and, or 쓰면 에러가 난다

-> 무조건 괄호 묶고 &나 |나 ~ 쓰기!

 

한 칼럼의 결측치가 있는 행을 지우는 방법

# 내가 푼 방법
cond = df['f1'].isna()
df = df.drop(df[cond].index)

# 더 쉬운 방법 2개
df = df.dropna(subset=['f1'])

df = df[df['f1'].notna()] # notna는 isna의 반대함수로 널이 아닌 값들만 모으는 함수

 

groupby...

result = df.groupby(['city', 'f2'])['f1'].sum()

df에 대해서 그룹으로 먼저 묶고, f1칼럼의 값을 sum하는 아주 합리적인 흐름!!!

 

조건에 맞는 값을 변경할 때

제발 loc을 써라 loc[조건, '컬럼명']으로 쓰기도 하고 loc[행인덱스, 컬럼인덱스] 이런식으로 쓰기도 하고...

df[cond]['f4'] = 'INFJ'
# 위와 같이 하면 절대 안된다!! 임시객체를 수정하는거지 df는 수정이 안되는 것

# 값을 수정한다는 말이 나오면 무조건 무조건 loc을 떠올리자
# df.loc[조건, '컬럼명'] = 값
df.loc[cond, 'f4'] = 'INFJ'

 

누적합과 결측치 앞뒤 값으로 채우는 방법

누적합 구하는 함수: cumsum()

결측치를 뒤에 나오는 값으로 채울 때: df.fillna(method = 'bfill')

결측치를 이전값으로 채울 때: df.fillna(method = 'pad')

 

수치형변수 표준화

표준화하는 식이

이거니까 컬럼의 평균과 표준편차를 구해서 빼고 나눠서 z-score값을 구해도 된다. 하지만 sklearn의 preprocessing의 StandardScaler를 사용할 수도 있다는 점!

from sklearn.preprocessing import StandardScaler

scaler = StandardScaler()
df['f5'] = scaler.fit_transform(df[['f5']])

sklearn의 함수들에 넣는 데이터는 항상 2차원이여야 하기에, 한줄짜리 series를 넣고싶어도 꼭 대괄호 두개를 써서 데이터프레임 형태로 써야한다.

그리고 fit만 하면 그 컬럼의 평균과 표준편차를 저장하기만 한다. 무조건 fit_transform을 통해 변환한 값을 반환해야한다.

 

MinMaxScaler

마찬가지 sklearn의 preprocessing 안에 있다. MinMaxScaler()이라는 스케일러를 사용하여 fit_transform() 하면 된다.

이렇게 구하는 방법 말고 두번째 방법으로는

# min-max scale 방법2
df['f5_2'] = df['f5'].transform(lambda x: ((x - x.min()) / (x.max() - x.min())))

위의 모듈이 생각나지 않는다면 방법2처럼 직접 minmax스케일링 식에 넣어도 된다. x에서 최소값 뺀거/최대값에서 최소값 뺀거

이게 민맥스 스케일링이다. 참고로 transform(함수)는 이 함수에 값을 넣은 결과값을 같은 길이로 반환하는 함수다. 

 

분위수

quantile(0.05)

 

정렬

정렬은 sort_values(by='컬럼명')

 

상위n개 하위n개 뽑기

df['a'].nlargest(10)

df['a'].nsmallest(10)

이렇게 할 수도 있고

정렬된 상태라면

df['a'].head(10)

df['a'].tail(10)

이렇게 뽑기도 가능

건너뛴 문제

  1. 10번 Yeo-Johnson & Box-Cox
  2. 20번 데이터병합
  3. 21번 Binning Data
  4. 24번 Lagged Feature
  5. 28번 

시계열데이터 년 월 일

df['Date'] = pd.to_datetime(df['Date'])
df['year'] = df['Date'].dt.year
df['month'] = df['Date'].dt.month
df['day'] = df['Date'].dt.day

일단 pd.to_datetime 함수를 이용해서 datetime형으로 변환해주면,

dt.year

dt.month

dt.day

이렇게 분리해낼 수 있다.

이건 함수아니니까 괄호하지마

 

그리고 to_datetime()으로 형변환할때 판다스꺼니까 pd 붙이는거 제발 절대 까먹지마라

df['date'] = pd.to_datetime(df['date'], format='%Y%m%d')

format 옵션도 기억해야하고

이 to_datetime() 함수는 str데이터에 대해서 적용되는거니까 string으로 형변환하고 해주고 쓰거나 정수형이면 format함수 쓰거나 

시계열데이터 무슨요일?

dt.dayofweek
dt.weekday

월요일0~일요일6 으로 매핑

마찬가지 함수 아니니까 괄호하지마

 

시계열데이터 몇주차?

몇주찬지 알아보려면 앞에서 본 것 처럼

dt.week

를 쓸 수도 있다. 하지만 여러해의 데이터가 같이 있다면, 22년도 1주차와 23년도 1주차가 같은 week값을 가진다.

주별 통계값을 구하는 중인데 여러해의 데이터가 같이 있다면 groupby(['year', 'week']) 이런식으로 년도도 꼭 묶어주도록 하자.

 

두번째 방법으로,

인덱스가 시계열데이터인 경우 쓸 수 있는

df_w = df.resample('W').sum()

이 resample()이라는 함수도 있다. 

만약 인덱스가 아니라 컬럼에 날짜데이터가 있다면, resample('W', on='Date') 이런식으로 on 옵션에 컬럼이름을 넣어주면 된다.

  • 주 단위 W
  • 2주 단위 2W
  • 월 단위 M

중복제거

df = df.drop_duplicates(subset=['age'])

 

drop_duplicates(subset=) 외우자! 

도저히 생각안날땐 코딩을 하자..

# age 컬럼 중복 제거
x = 0
idx = 1
for y in df.loc[1:,'age']:
    if y == df.loc[x, 'age']:
        df = df.drop(idx)
        idx += 1
    else:
        idx += 1

for문에서 인덱스까지 같이 반환하는 함수 enumerate()마저 또 까먹어서 idx 변수 만들어서 함... 

 

문자열 다루기

컬럼이 string 타입이 아닐 때 -> astype(str)

 

startswith()

endswith()

contains()

얘네로 문자열을 다루는데, 시리즈.startswith() 이렇게 쓰면 에러가 난다.

이 함수들은 시리즈가 아니라 오직 str에 대해서만 작동하기에

df['f1'].str.startswith()

이런식으로 꼭 .str을 붙여주어야 한다!

 

그리고 replace(): 앞 인수를 뒤의 인수로 바꾸기

df['menu'].str.replace(' ','')

이렇게 하면 공백이 사라지겠지

 

 

 

'빅데이터분석기사' 카테고리의 다른 글

기출풀이  (0) 2026.06.18
작업형3 추가적으로  (0) 2026.06.14
작업형2 문풀  (0) 2026.06.14
빅분기 실기 작업형2 정리  (0) 2026.05.17
1과목 - 빅데이터 분석 기획  (2) 2026.03.16