본문 바로가기
공부한 것들../Numpy

Numpy 데이터 정렬

by bottle-an00 2024. 9. 12.

# 데이터 정렬...?

데이터 분석에 있어 난잡하게 구성된 데이터를 사용하는 것보다 수치형 또는 범주형 데이터의 경우 오름차순으로 정렬하여 데이터를 나열하는 것이 데이터가 가진 의미를 파악하기에도 용이한 경우가 있다. numpy에서는 이를 위해 아래와 같은 함수를 제공한다.

 

  • numpy.sort()
  • numpy.argsort()

이번 포스팅에서는 위의 함수의 API Refernce을 통해 parameter와 사용법을 이해하고 이를 활용하여 데이터를 오름차순, 내림차순으로 정렬하는 방법을 예시코드와 함께 정리하겠다. 

 

# API Reference 

# numpy.sort()

API Reference :: numpy.sort()

 

numpy.sort()는 기본적으로 오름차순 정렬만 지원한다. 정렬된 결과를 return값으로 반환하지만 원본 데이터는 변경하지 않는다.

# parameter 정리

  • a (array_like) : 정렬할 배열.
  • axis: 정수 또는 None (선택 사항). 배열을 정렬할 축을 지정한다. None일 경우, 배열이 평탄화된 후에 정렬된다. 기본값은 -1이며, 이는 마지막 축을 기준으로 정렬한다.
  • kind: 정렬 알고리즘을 지정한다. 기본값은 'quicksort'이다. 'stable'과 'mergesort'는 내부적으로 timsort 또는 radix sort를 사용하며, 실제 구현은 데이터 타입에 따라 달라질 수 있다. 'mergesort'는 하위 호환성을 위해 유지된다.
  • order: 배열이 필드를 가진 경우, 비교할 필드의 순서를 지정한다. 문자열로 단일 필드를 지정할 수 있으며, 모든 필드를 지정할 필요는 없지만, 지정되지 않은 필드는 dtype에 정의된 순서에 따라 비교에 사용된다.
  • stable: 정렬의 안정성을 설정한다. True일 경우, 동일하게 비교되는 값들의 상대적인 순서를 유지한다. False 또는 None일 경우, 이 순서가 보장되지 않는다. 내부적으로 이 옵션이 kind='stable'을 선택한다. 기본값은 None이다.

# 예시코드

# 오름차순 정렬

import numpy as np

example = np.array([3,6,7,2])
print("1D-Array Sample")
print(example)

result = np.sort(example)
print("\nResult of np.sort")
print('Result :: ',result)
print("Origin :: ",example)

 

1D-Array Sample
[3 6 7 2]

Result of np.sort
Result ::  [2 3 6 7]
Origin ::  [3 6 7 2]

 

# 내림차순 정렬 "::-1" 활용

import numpy as np

example = np.array([3,6,7,2])
print("1D-Array Sample")
print(example)

result = np.sort(example)
print("\nResult of Descending Order")
print('Result :: ',result[::-1])
print("Origin :: ",example)

 

1D-Array Sample
[3 6 7 2]

Result of Descending Order
Result ::  [7 6 3 2]
Origin ::  [3 6 7 2]

 

# axis parameter 사용

import numpy as np

example = np.array([[9,11],[28,4]])
print("2D-Array Sample")
print(example)

result = np.sort(example, axis=0)
print("\nResult of np.sort axis = 0")
print('Result :: \n',result)
print("Origin :: \n",example)

result = np.sort(example, axis=1)
print("\nResult of np.sort axis = 1")
print('Result :: \n',result)
print("Origin :: \n",example)

 

 2D-Array Sample
[[ 9 11]
 [28  4]]

Result of np.sort axis = 0
#axis = 0 방향으로 오름차순으로 정렬된 것을 확인할 수 있다.
Result :: 
 [[ 9  4]
 [28 11]]
Origin :: 
 [[ 9 11]
 [28  4]]

Result of np.sort axis = 1
#axis = 1 방향으로 오름차순으로 정렬된 것을 확인할 수 있다.
Result :: 
 [[ 9 11]
 [ 4 28]]
Origin :: 
 [[ 9 11]
 [28  4]]

 

# order paramter 사용

import numpy as np

dtype = [('name', 'S10'), ('height', float), ('age', int)]
values = [('Arthur', 1.8, 41), ('Lancelot', 1.9, 38),
          ('Galahad', 1.7, 38)]
          
a = np.array(values, dtype=dtype)       # create a structured array
print(a)
print(np.sort(a, order='height'))
A ::
[(b'Arthur', 1.8, 41) (b'Lancelot', 1.9, 38) (b'Galahad', 1.7, 38)]

Sort with order'height' value
[(b'Galahad', 1.7, 38) (b'Arthur', 1.8, 41) (b'Lancelot', 1.9, 38)]

 

# numpy.argsort()

API Reference :: numpy.argsort()

 

numpy.argsort()는 오름차순으로 정렬된 배열의 인덱스 값만 반환하는 함수이다. 

 

# parameter 정리

  • a (array_like): 정렬할 배열.
  • axis: 정수 또는 None (선택 사항). 배열을 정렬할 축을 지정한다. 기본값은 -1로, 마지막 축을 기준으로 정렬한다. None일 경우, 배열이 평탄화된 후에 정렬된다.
  • kind: 정렬 알고리즘을 지정한다. 기본값은 'quicksort'이다. 'stable'과 'mergesort'는 내부적으로 timsort를 사용하며, 실제 구현은 데이터 타입에 따라 달라질 수 있다. 'mergesort'는 하위 호환성을 위해 유지된다.
  • order: 배열이 필드를 가진 경우, 비교할 필드의 순서를 지정한다. 단일 필드는 문자열로 지정할 수 있으며, 모든 필드를 지정할 필요는 없다. 지정되지 않은 필드는 dtype에 정의된 순서대로 비교에 사용된다.
  • stable: 정렬의 안정성을 설정한다. True일 경우, 동일하게 비교되는 값들의 상대적인 순서를 유지한다. False 또는 None일 경우, 이 순서가 보장되지 않는다. 기본값은 None이며, 내부적으로 이 옵션이 kind='stable'을 선택한다.

# 예시코드

# 오름차순 인덱스 반환

import numpy as np

name = np.array(["John", "Samuel", "Kate", "Miek", "Sarah"])
score = np.array([78,84,96,88,82])

sort_indexes = np.argsort(score)
print("\nnp.argsort() Result :")
print("sort indexes :", sort_indexes)

print("sort Names :: ",name[sort_indexes] )
print("sort Values :: ",score[sort_indexes] )
np.argsort() Result :
sort indexes : [0 4 1 3 2]
sort Names ::  ['John' 'Sarah' 'Samuel' 'Miek' 'Kate']
sort Values ::  [78 82 84 88 96]

 

'공부한 것들.. > Numpy' 카테고리의 다른 글

Numpy 데이터 조회를 위한 인덱싱 및 슬라이싱  (0) 2024.09.12
Numpy 집계 함수  (0) 2024.09.12
Numpy 기본 연산  (0) 2024.09.12
Numpy ndarray shape 변경  (0) 2024.09.12
Numpy :: 데이터 타입  (0) 2024.09.12