파이썬을 활용한 데이터 분석 입문

[Python]데이터 전처리 - 데이터 정렬과 메소드 체이닝

엔피디 2024. 8. 12. 22:08

 

이번 포스팅에서는 데이터를 특정 변수에 대해 정렬하는 방법과 여러 명령을 동시에 처리할 수 있는 메소드 체이닝에 대해 알아보겠습니다.

 


실습 준비

colab 실행

# gpa(grade point average) 평점 데이터 불러오기 
gpa = pd.read_csv('/content/drive/MyDrive/Data/gpa.csv')

# student_id로 인덱스 만들기
gpa = gpa.set_index('student_id')

# 5줄만 출력하기
gpa.head()

 


정렬(Sorting)

정렬은 데이터프레임이나 시리즈의 데이터를 특정 기준에 따라 순서를 재배치하는 작업을 의미합니다. 정렬은 주로 데이터를 더 직관적으로 분석하거나 원하는 순서대로 표시할 때 사용됩니다.

 

정렬 방법

df.sort_values('변수 값')

 

오름차순

숫자나 문자, 날짜 등의 값을 작은 것부터 큰 순서대로 정렬하는 것을 의미합니다. 즉, 값이 점점 커지는 순서로 나열하는 것입니다.

# student_id를 기준으로 데이터 오름차순 정렬
gpa.sort_values('student_id') 
# credit과 GPA를 기준으로 오름차순 정렬
gpa.sort_values(['credit', 'GPA']) 

 

오름차순은 sort_values에 파라미터로 정렬할 기준인 변수 값을 넘겨주면 됩니다. 두 가지 이상의 변수 값을 기준으로 정렬시 리스트의 형태로 데이터를 넘겨주면 됩니다.

 

내림차순

숫자나 문자, 날짜 등의 값을 큰 것부터 작은 순서대로 정렬하는 것을 의미합니다. 즉, 값이 점점 작아지는 순서로 나열되는 방식입니다.

# student_id를 기준으로 데이터 내림차순 정렬 
gpa.sort_values('student_id', ascending = False)
# credit과 GPA를 기준으로 내림차순 정렬 
gpa.sort_values(['credit', 'GPA'], ascending = False)

 

이런식으로 뒤에 ascending 파라미터에 False를 넘겨주면 됩니다. 반대로 오름차순은 True를 넘겨주면 되겠죠?

 


메소드 체이닝(Method Chaining)

메소드 체이닝(Method Chaining)이란 하나의 객체에서 여러 메소드를 연속해서 호출할 수 있는 프로그래밍 기법을 말합니다. 메소드 체이닝을 사용하면 코드가 간결해지고, 한 줄에 여러 작업을 수행할 수 있어 가독성이 높아집니다. 메소드 체이닝의 기본 개념은 각 메소드가 호출된 후에 그 메소드가 작업을 수행하고, 그 결과로 원래 객체 자체나 다른 객체를 반환하여 다시 메소드를 호출할 수 있게 하는 것입니다.

 

이전 포스트에서 다루었던 이상치 제거와 연계하여 코드를 작성하겠습니다.

# credit 이상치 제거

# 1사분위수 구하기
Q1 = gpa['credit'].quantile(0.25)

# 3사분위수 구하기
Q3 = gpa['credit'].quantile(0.75)

# IQR 구하기
IQR = Q3 - Q1

# 하한선 구하기
lower_line = Q1 - 1.5 * IQR

# 상한선 구하기
upper_line = Q3 + 1.5 * IQR

# 정상 범위 조건
condition1 = (gpa['credit'] >= lower_line) & (gpa['credit'] <= upper_line)
# GPA 이상치 제거

# 1사분위수 구하기
Q1 = gpa['GPA'].quantile(0.25)

# 3사분위수 구하기
Q3 = gpa['GPA'].quantile(0.75)

# IQR 구하기
IQR = Q3 - Q1

# 하한선 구하기
lower_line = Q1 - 1.5 * IQR

# 상한선 구하기
upper_line = Q3 + 1.5 * IQR

# 정상 범위 조건
condition2 = (gpa['GPA'] >= lower_line) & (gpa['GPA'] <= upper_line)

 

먼저 이상치가 제거된 정상범위 데이터를 조건 형태로 저장합니다.

 

# 여러 명령어 동시에 수행하기 
gpa[condition1 & condition2].sort_values(['credit', 'GPA'], ascending=False).head(10)

 

이런식으로 수행할 명령어 앞에 점(.)을 붙여 이상치 제거, 내림차순 정렬, 위에서 부터 10개 출력하기 명령어를 동시에 수행할 수 있습니다.

 

가독성을 높이는 법

# 명령어 단위로 나눠 가독성 높이기
gpa[condition1 & condition2] \\
    .sort_values(['credit', 'GPA'], ascending=False) \\
    .head(10) 

명령어 단위로 역슬레시(\)를 붙이고 엔터키를 눌러 메소드 체이닝을 하는 방법도 있습니다. 지금은 명령어가 적어서 오히려 복잡해 보일 수 있지만, 명령어의 갯수가 늘어나면 명령어 단위로 코드를 확인할 수 있어 코드의 가독성을 높힐 수 있습니다. 주의할점은 역슬레시 뒤에 띄어쓰기 등 어떠한 작업 없시 엔터로 줄바꿈이 되어야 합니다.

 

메소드 체이닝을 통해 각 단계를 별도로 나누지 않고, 연속적으로 수행할 수 있어 코드가 더 직관적이고 읽기 쉬워집니다.


 

이번 포스팅에서는 sort_values()를 통해 데이터를 오름차순, 내림차순 정렬하는 방법과 코드를 간결하고 직관적이게 해주는 메소드 체이닝 기법에 대해 알아보았습니다. 모두 데이터 분석을 할 때 유용하게 사용할 수 있으므로 기억해두시면 좋을 것 같습니다.