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의 강력한 기능을 체험해 보세요!
'Python > NumPy' 카테고리의 다른 글
NumPy 텍스트 파일 읽기 및 쓰기 (loadtxt, savetxt) (0) | 2025.10.20 |
---|---|
NumPy 배열 파일 저장 및 로드 (save, load, savez) (0) | 2025.10.19 |
NumPy로 배우는 데이터 분석: 배열 필터링과 수정 (0) | 2025.10.17 |
NumPy 데이터 분석: 조건에 따른 데이터 선택 (Boolean Indexing) (0) | 2025.10.16 |
NumPy로 배우는 선형대수: 고유값과 고유벡터 (0) | 2025.10.15 |