본문 바로가기
데이터 분석/데이터 전처리

[Pandas] Tip!! 원하는 데이터 구간 만들기 (feat. IntervalIndex.from_tuples)

by 부자 꽁냥이 2023. 1. 17.

안녕하세요~ 꽁냥이에요. 지난 포스팅에서는 Pandas의 cut과 qcut데이터를 구간으로 나누어 보는 방법에 대해서 소개했는데요. 이번 포스팅에서는 번외로 데이터로부터 구간을 만드는 것이 아닌 직접 구간을 만드는 방법을 소개하려고 합니다.

 

cut과 qcut 사용 방법은 아래 포스팅을 참고하시기 바랍니다.

 

[Pandas] 35. 데이터 구간 나누기 (feat. cut, qcut)

 

[Pandas] 35. 데이터 구간 나누기 (feat. cut, qcut)

안녕하세요~ 꽁냥이에요. 데이터 분석을 하다 보면 데이터를 특정 칼럼값을 기준으로 구간을 나누어야 할 때가 있는데요. Pandas에서 제공하는 cut과 qcut을 이용하면 쉽게 구간을 나눌 수 있어요.

zephyrus1111.tistory.com


   원하는 데이터 구간 만들기

a. 기본 사용법

Pandas에서 제공하는 IntervalIndex.from_tuples 함수를 이용하면 자기가 원하는 구간을 만들 수 있습니다. 이 함수에 튜플로 이루어진 배열을 넣어주기만 하면 되지요. 각 튜플은 구간의 최소값과 최대값 갖도록 해주면 됩니다. 코드를 통해서 바로 알아보겠습니다.

 

아래 코드는 (0, 4], (4, 8] 이라는 구간을 만들어서 해당 구간에 들어가는 데이터 개수와 상대 도수를 출력합니다.

 

import pandas as pd
import numpy as np

a = np.array([1, 3, 4, 7, 8])
bins = pd.IntervalIndex.from_tuples([(0, 4), (4, 8)]) ## (0, 4], (4, 8] 구간 생성
cut = pd.cut(a, bins=bins)
cut.describe() ## 구간에 들어가는 데이터 빈도수와 상대 도수 출력

 

b. 응용하기

먼저 10점 만점인 시험에서 학생들의 성적을 0~1, 1~2, ..., 9~10 총 10 구간으로 나눈 뒤 해당 구간에 들어가는 학생 수를 알아보도록 하겠습니다. 먼저 데이터를 만들어줍니다.

 

score = np.array([0, 0, 2, 6, 6, 7, 6, 7, 8, 8, 9, 9, 9, 8, 9, 10, 5, 4])

 

이제 원하는 구간을 만들고 해당 구간에 대응하는 도수와 상대 도수를 출력해보겠습니다.

 

list1 = [(-0.01, 1)]+list(zip(range(1, 10), range(2, 11))) ## 구간 리스트

bins = pd.IntervalIndex.from_tuples(list1)
cut = pd.cut(score, bins=bins)
cut.describe() ## 도수, 상대 도수 출력

 

이때 (0, 1)에서 0 대신 0보다 약간 작은 -0.01을 넣어줬습니다. IntervalIndex.from_tuples로 만들어진 구간을 bins에 넣으면 include_lowest=True로 해도 작동하지 않았기 때문에 어쩔 수 없이 0을 포함하도록 해준 조치입니다.

 

위 코드를 실행하면 아래와 같이 각 구간별 도수와 상대 도수가 잘 나오는 것을 알 수 있습니다.

 


Pandas 기능을 살펴보다가 구간을 직접 만들 수 있는 방법이 있어서 소개했습니다. 이게 잘 사용되지는 않지만 알아두면 쓸모는 있어 보이더라고요. ㅎㅎ

 

부디 이번 포스팅이 어떤 분들에게는 도움이 되시길 바라며 이상 포스팅 마치겠습니다.

 


댓글


맨 위로