[Python Data Analysis]10.array 관련 함수 사용하기
in Development on DataAnalysis
array 관련 함수 사용하기
각 성분에 적용되는 함수
numpy에서는 array에 적용할 수 있는 다양한 함수를 제공합니다. 이들 중 array의 각 성분에 대하여 특정한 계산을 일괄적으로 수행하기 위한 함수들이 있습니다.
arr array가 정의되어 있다고 할 때, np.sqrt() 함수를 적용하면 arr array의 각 성분에 대해 제곱근을 일괄적으로 계산합니다. 반면 np.log10() 함수를 적용하면 각 성분에 대해 밑이 10인 상용로그 값을 계산합니다.
numpy에서 한 개의 array의 각 성분에 적용되는 함수 정리
함수 | 설명 |
---|---|
abs | 각 성분의 절댓값 계산 |
sqrt | 각 성분의 제곱근 계산 (array ** 0.5 의 결과와 동일) |
square | 각 성분의 제곱 계산 (array ** 2 의 결과와 동일) |
exp | 각 성분을 무리수 e의 지수로 삼은 값을 계산 |
log, log10, log2 | 자연로그(밑이 e), 상용로그(밑이 10), 밑이 2인 로그를 계산 |
sign | 각 성분의 부호 계산 (+인 경우 1, -인 경우 -1, 0인 경우 0) |
ceil | 각 성분의 소수 첫 번째 자리에서 올림한 값을 계산 |
floor | 각 성분의 소수 첫 번째 자리에서 내림한 값을 계산 |
isnan | 각 성분이 NaN(Not a Number)인 경우 True를, 그렇지 않은 경우 False를 반환 |
isinf | 각 성분이 무한대(infinity)인 경우 True를, 그렇지 않은 경우 False를 반환 |
cos, cosh, sin, sinh, tan, tanh | 각 성분에 대한 삼각함수 값을 계산 |
만약 크기가 같은 두 개의 array x, y가 아래와 같이 주어졌을 때, np.maximum() 함수를 적용하면 두 array를 동일한 위치의 성분끼리 비교하여 값이 더 큰 성분을 선택, 새로운 array의 형태로 제시합니다.
x = np.array([ 0.97121145, 1.74277758, 0.17706708, -1.14078851, 1.02197222,
-0.75747493, 0.4994057 , -0.03462392])
y = np.array([ 0.91984849, 1.98745872, -0.11232596, 1.47306221, 1.24527437,
-0.77047603, 0.30708743, -1.76476678])
np.maximum(x, y)
>>> array([ 0.97121145, 1.98745872, 0.17706708, 1.47306221, 1.24527437,
-0.75747493, 0.4994057 , -0.03462392])
numpy에서 두 개의 array의 각 성분에 적용되는 함수 정리
함수 | 설명 |
---|---|
add | 두 array에서 동일한 위치의 성분끼리 더한 값을 계산 (arr1 + arr2의 결과와 동일) |
subtract | 두 array에서 동일한 위치의 성분끼리 뺀 값을 계산 (arr1 - arr2의 결과와 동일) |
multiply | 두 array에서 동일한 위치의 성분끼리 곱한 값을 계산 (arr1 * arr2의 결과와 동일) |
divide | 두 array에서 동일한 위치의 성분끼리 나눈 값을 계산 (arr1 / arr2의 결과와 동일) |
maximum | 두 array에서 동일한 위치의 성분끼리 비교하여 둘 중 최댓값을 반환 |
minimum | 두 array에서 동일한 위치의 성분끼리 비교하여 둘 중 최솟값을 반환 |
통계 함수
numpy에서는 array 내 전체 성분에 대한 통계량을 계산하는 함수 또한 제공합니다. 예를 들어 arr array가 정의되어 있을 때, .sum() 함수를 적용하면 arr array 내 모든 성분의 합을 계산하며, .mean() 함수를 적용하면 arr array 내 전체 성분에 대한 평균값을 계산합니다.
array에 대하여 합이나 평균 등을 계산할 때, 전체 성분 대신 ‘행 방향’ 혹은 ‘열 방향’의 성분들에 대해서만 합 혹은 평균 등을 계산하도록 할 수 있습니다. 2차원 array에 대하여 .sum(axis=0)을 실행하면 ‘행 방향’으로 성분들의 합을 구하게 되어, 결과적으로 각 열의 합을 계산한 결과를 산출합니다. 반면 .sum(axis=1)을 실행하면 ‘열 방향’으로 성분들의 합을 구하게 되여, 곧 각 행의 합을 계산한 결과를 산출합니다.
numpy의 array에 적용되는 통계 함수 정리
numpy의 array에 적용되는 통계 함수 정리
함수 | 설명 |
---|---|
sum | 전체 성분의 합을 계산 |
mean | 전체 성분의 평균을 계산 |
std, var | 전체 성분의 표준편차, 분산을 계산 |
min, max | 전체 성분의 최솟값, 최댓값을 계산 |
argmin, argmax | 전체 성분의 최솟값, 최댓값이 위치한 인덱스를 반환 |
cumsum | 맨 첫번째 성분부터 각 성분까지의 누적합을 계산 (0에서부터 계속 더해짐) |
cumprod | 맨 첫번째 성분부터 각 성분까지의 누적곱을 계산 (1에서부터 계속 곱해짐) |
정렬 함수 및 기타 함수
데이터 상에서 TOP 30 혹은 상위 5%에 해당하는 값이 무엇인지 추출해야 하는 경우가 자주 있는데, 정렬 함수는 이와 같은 작업을 위해 필수적인 함수라고 할 수 있습니다.
arr = array([-0.21082527, -0.0396508 , -0.75771892, -1.9260892 , -0.18137694,
-0.44223898, 0.32745569, 0.16834256])
위와 같은 arr array가 정의되어 있다고 할 때, np.sort() 함수를 적용하면 arr array의 성분이 오름차순으로(크기가 커지는 순서대로) 정렬됩니다.
np.sort(arr)
>>> array([-0.21082527, -0.0396508 , -0.75771892, -1.9260892 , -0.18137694,
-0.44223898, 0.32745569, 0.16834256])
만약 위의 경우에서 내림차순으로 정렬하고 싶다면, np.sort(arr)[::-1]을 실행하면 됩니다. 이는 numpy 인덱싱 시 사용되는 일종의 꼼수이니 잘 기억해 두시면 유용할 것입니다.
정렬 함수는 2차원 array에도 적용할 수 있습니다.
arr2d = np.array([[-1.25627232, 1.65117477, -0.04868035],
[ 0.7405744 , -0.67893699, -0.28428494],
[ 0.02640821, -0.29027297, 0.34441534],
[ 0.68394722, 0.26180229, 0.76742614],
[ 1.00806827, 0.77977295, -1.36273314]])
2차원 arr2d array를 하나 정의하였을 때, np.sort(arr, axis=0)을 실행하면 ‘행 방향’으로 오름차순 정렬이 이루어집니다. axis 인자의 값을 1로 바꾸면 ‘열 방향’으로 오름차순 정렬이 이루어질 것입니다.
np.sort(arr, axis=0)
>>> array([[-1.25627232, -0.67893699, -1.36273314],
[ 0.02640821, -0.29027297, -0.28428494],
[ 0.68394722, 0.26180229, -0.04868035],
[ 0.7405744 , 0.77977295, 0.34441534],
[ 1.00806827, 1.65117477, 0.76742614]])
만약 길이가 아주 긴 large_arr array가 정의되어 있을 때, 해당 array 상에서 상위 5%에 위치하는 값은 다음과 같이 찾아낼 수 있습니다.
np.sort(large_arr)[::-1][int(0.05 * len(large_arr))]
large_arr을 먼저 오름차순으로 정렬한 뒤, int(0.05 * len(large_arr))을 통해 상위 5%에 해당하는 인덱스를 계산한 후, 이를 사용하여 정렬 결과에 대한 인덱싱을 수행하는 과정으로 진행하였습니다.
마지막으로, 중복된 성분을 포함하고 있는 array에 대하여, np.unique() 함수를 사용하면 중복된 값을 제외한 유니크한 값만을 추출할 수 있습니다. 예를 들어 해당 array의 이름이 names 였다면, np.unique(names)을 실행하면 중복된 성분이 제거된 새로운 array를 얻을 수 있습니다.