Python/NumPy

NumPy 데이터 분석: 데이터 정렬 및 검색

임베디드 친구 2025. 10. 18. 18:15
반응형

NumPy 데이터 분석: 데이터 정렬 및 검색

NumPy는 데이터 과학 및 분석에서 매우 중요한 역할을 하는 라이브러리입니다. 특히, 데이터를 정렬하고 검색하는 기능은 데이터 전처리 및 분석에서 필수적입니다. 이번 포스팅에서는 NumPy를 사용하여 데이터를 정렬하고 검색하는 방법에 대해 알아보겠습니다. 예제 코드와 함께 sort, argsort, searchsorted 함수의 사용법을 상세히 살펴보겠습니다.


1. 데이터 정렬 (sort 함수)

numpy.sort 함수는 배열의 요소를 정렬하는 데 사용됩니다. 정렬은 기본적으로 오름차순으로 이루어지며, 축(axis)을 지정하여 원하는 방향으로 정렬할 수 있습니다.

기본 사용법

import numpy as np

# 1차원 배열 정렬
arr = np.array([3, 1, 4, 1, 5, 9, 2])
sorted_arr = np.sort(arr)
print("원본 배열:", arr)
print("정렬된 배열:", sorted_arr)

출력:

원본 배열: [3 1 4 1 5 9 2]
정렬된 배열: [1 1 2 3 4 5 9]

원본 배열은 변경되지 않으며, 정렬된 배열이 반환됩니다.

다차원 배열 정렬

다차원 배열에서는 axis 매개변수를 사용하여 정렬 방향을 지정할 수 있습니다.

# 2차원 배열 정렬
arr_2d = np.array([[8, 3, 1], [2, 5, 7]])

# 행(axis=1) 기준 정렬
sorted_by_row = np.sort(arr_2d, axis=1)

# 열(axis=0) 기준 정렬
sorted_by_col = np.sort(arr_2d, axis=0)

print("원본 배열:\n", arr_2d)
print("행 기준 정렬:\n", sorted_by_row)
print("열 기준 정렬:\n", sorted_by_col)

출력:

원본 배열:
 [[8 3 1]
 [2 5 7]]
행 기준 정렬:
 [[1 3 8]
 [2 5 7]]
열 기준 정렬:
 [[2 3 1]
 [8 5 7]]

2. 정렬된 인덱스 반환 (argsort 함수)

numpy.argsort 함수는 배열을 정렬했을 때의 인덱스를 반환합니다. 이를 통해 원본 배열의 순서를 유지한 상태로 정렬된 데이터를 참조할 수 있습니다.

기본 사용법

# 정렬된 인덱스 반환
arr = np.array([40, 10, 20, 30])
sorted_indices = np.argsort(arr)

print("원본 배열:", arr)
print("정렬된 인덱스:", sorted_indices)
print("정렬된 배열:", arr[sorted_indices])

출력:

원본 배열: [40 10 20 30]
정렬된 인덱스: [1 2 3 0]
정렬된 배열: [10 20 30 40]

다차원 배열에서 사용

다차원 배열에서도 axis를 지정하여 사용할 수 있습니다.

# 2차원 배열에서 argsort 사용
arr_2d = np.array([[50, 20, 30], [10, 40, 60]])
row_indices = np.argsort(arr_2d, axis=1)

print("원본 배열:\n", arr_2d)
print("행 기준 정렬된 인덱스:\n", row_indices)

출력:

원본 배열:
 [[50 20 30]
 [10 40 60]]
행 기준 정렬된 인덱스:
 [[1 2 0]
 [0 1 2]]

3. 정렬된 배열에서 값 검색 (searchsorted 함수)

numpy.searchsorted 함수는 정렬된 배열에서 특정 값이 들어갈 수 있는 인덱스를 반환합니다. 이 함수는 이진 탐색을 기반으로 동작하며, 정렬된 데이터를 빠르게 검색하는 데 유용합니다.

기본 사용법

# 정렬된 배열에서 값 검색
sorted_arr = np.array([10, 20, 30, 40, 50])
indices = np.searchsorted(sorted_arr, [25, 35])

print("정렬된 배열:", sorted_arr)
print("검색할 값들의 인덱스:", indices)

출력:

정렬된 배열: [10 20 30 40 50]
검색할 값들의 인덱스: [2 3]

side 매개변수 사용

side 매개변수를 통해 값이 동일한 경우 왼쪽(left) 또는 오른쪽(right) 중 어디에 삽입할지 지정할 수 있습니다.

# side 매개변수 사용 예제
indices_left = np.searchsorted(sorted_arr, [30, 40], side='left')
indices_right = np.searchsorted(sorted_arr, [30, 40], side='right')

print("left 기준 인덱스:", indices_left)
print("right 기준 인덱스:", indices_right)

출력:

left 기준 인덱스: [2 3]
right 기준 인덱스: [3 4]

4. 활용 사례

정렬 및 검색을 활용한 데이터 분석

아래는 sort, argsort, searchsorted를 활용하여 데이터 분석에 유용한 작업을 수행하는 예제입니다.

# 학생 성적 데이터 분석
students = np.array(["Alice", "Bob", "Charlie", "David"])
scores = np.array([85, 70, 95, 90])

# 성적 기준 정렬
sorted_indices = np.argsort(scores)
sorted_students = students[sorted_indices]
sorted_scores = scores[sorted_indices]

print("정렬된 학생 목록:", sorted_students)
print("정렬된 성적:", sorted_scores)

# 특정 점수 이상 학생 검색
threshold = 90
insert_idx = np.searchsorted(sorted_scores, threshold, side='left')
high_achievers = sorted_students[insert_idx:]

print(f"{threshold}점 이상인 학생:", high_achievers)

출력:

정렬된 학생 목록: ['Bob' 'Alice' 'David' 'Charlie']
정렬된 성적: [70 85 90 95]
90점 이상인 학생: ['David' 'Charlie']

결론

NumPy의 정렬 및 검색 기능은 데이터 분석에서 매우 중요한 도구입니다. sort, argsort, searchsorted 함수를 사용하면 데이터 정렬, 정렬된 인덱스 관리, 정렬된 배열 내에서 빠른 검색이 가능합니다. 이를 통해 데이터를 효과적으로 처리하고 분석할 수 있습니다.

위에서 살펴본 다양한 예제를 직접 실행해 보며 NumPy의 강력한 기능을 체험해 보세요!

반응형