본문 바로가기
데이터 분석/SQL과 Python

[Python] 그룹별 구간 나누기

2022. 12. 7.

이 정도 수치면 그룹 내에서 높은걸까? 낮은걸까?

→ 각 데이터 값의 그룹 내 위치, 중요도, 우선순위 등을 알아보자

[Step 1] 수치형 데이터의 구간 나누기

pd.qcut(data['close_price'], 3).value_counts()

pd.cut(data['close_price'], 3).value_counts()
qcut()과 cut() 함수
-> cut은 절대평가, qcut은 상대평가

출처: [Python Pandas] 동일 길이로 나누어서 범주 만들기 pd.cut(), 동일 개수로 나누어서 범주 만들기 pd.qcut()

[Step 2] 나누어진 구간에 라벨링하기

pd.qcut(data['close_price'], 3, labels = ['L', 'M', 'H'])

pd.cut(data['close_price'], 3, labels = ['L', 'M', 'H'])

[Step 3] 라벨링한 값을 새로운 열로 추가하기

data['close_price_group'] = pd.qcut(data['close_price'], 3, labels = ['L', 'M', 'H'])

data[["ticker", "sector", "close_price", "sector_mean", "close_price_group"]]

-> 라벨링한 값은 전체 close_price 를 기준으로 그룹지어 라벨링한 것이기 때문에 sector를 기준으로 group by 가 한 번 더 필요하다

[Step 4] 그룹별 구간 데이터 라벨링

data["price_s_level"] = data.groupby(['sector'])['close_price'].\
			transform(lambda x: pd.qcut(x, 3, labels = ['L', 'M', 'H']))

data[["ticker", "sector", "sector_count", "sector_mean", "close_price", "price_s_level"]]

-> sector 열을 기준으로 group by() 하고 close_price 열에 대해 계산한 값을 새로운 열로 추가(transform())한다. 이 때 close_price 열에 대해 동일 갯수로 나눠주는 계산(qcut())을 람다 함수(lambda x:)로 수행한다.

 

위 내용은 데이터사이언티스트 이지영님의 유튜브 '비전공자도 할 수 있는 파이썬 데이터 분석 핵심편'을 참고하여 작성한 내용입니다.

 

이걸 SQL로 한다면?
-> NTILE과 WIDTH_BUCKET이 각각 qcut과 cut 에 대응되는 내용인 것 같은데 SQL로도 테스트 필요함!

댓글