내용
Numpy statistics
최대값과 최소값
배열의 최대, 최소등의 통계량을 계산하기 위한 함수들
함수 | 내용 | |
---|---|---|
np.max(객체, axis=None) | 지정한 축을 기준으로 최대값 | axis=0: 열기준 axis=1: 행기준 axis=None:객체를 1차원으로 전환하여 최대값을 계산 |
np.amax(객체, axis=None) | 지정한 축을 기준으로 최대값 | |
np.nanmax(객체, axis=None) | 요소들 중 Nan를 무시 | |
np.argmax(객체, axis=None) | 최대값의 인덱스를 반환 | |
np.min(객체, axis=None) | 지정한 축을 기준으로 최소값 | |
np.amin(객체, axis=None) | 지정한 축을 기준으로 최소값 | |
np.nanmin(객체, axis=None) | 요소들 중 Nan를 무시 | |
np.argmin(객체, axis=None) | 최소값의 인덱스를 반환 | |
np.maximun(배열1, 배열2...) | 각 배열의 동일한 인덱스를 가진 원소들을 비교하여 최대값을 반환 | |
np.fmax(배열1, 배열2,...) | 배열간 동일한 인덱스의 원소들 사이의 nan값을 무시하고 최대값 계산 | |
np.minimun(배열1, 배열2...) | 각 배열의 동일한 인덱스를 가진 원소들을 비교하여 최소값을 반환 | |
np.fmin(배열1, 배열2,...) | 배열간 동일한 인덱스의 원소들 사이의 nan값을 무시하고 최대값 계산 |
import numpy as np import pandas as pd import FinanceDataReader as fdr
np.random.seed(1) arr=np.around(np.random.rand(5, 4), 3) arr
array([[0.417, 0.72 , 0. , 0.302], [0.147, 0.092, 0.186, 0.346], [0.397, 0.539, 0.419, 0.685], [0.204, 0.878, 0.027, 0.67 ], [0.417, 0.559, 0.14 , 0.198]])
np.max(arr, 1)
array([0.72 , 0.346, 0.685, 0.878, 0.559])
np.argmax(arr, 1)
array([1, 3, 3, 1, 1])
np.amin(arr, 0)
array([0.147, 0.092, 0. , 0.198])
arr[1,3]=np.nan arr[3,1]=np.nan arr
array([[0.417, 0.72 , 0. , 0.302], [0.147, 0.092, 0.186, nan], [0.397, 0.539, 0.419, 0.685], [0.204, nan, 0.027, 0.67 ], [0.417, 0.559, 0.14 , 0.198]])
np.max(arr, axis=1)
array([0.72 , nan, 0.685, nan, 0.559])
np.nanmax(arr, axis=1)
array([0.72 , 0.186, 0.685, 0.67 , 0.559])
np.random.seed(2) arr2=np.around(np.random.rand(5,4),3) arr2
array([[0.436, 0.026, 0.55 , 0.435], [0.42 , 0.33 , 0.205, 0.619], [0.3 , 0.267, 0.621, 0.529], [0.135, 0.514, 0.184, 0.785], [0.854, 0.494, 0.847, 0.08 ]])
np.maximum(arr, arr2)
array([[0.436, 0.72 , 0.55 , 0.435], [0.42 , 0.33 , 0.205, nan], [0.397, 0.539, 0.621, 0.685], [0.204, nan, 0.184, 0.785], [0.854, 0.559, 0.847, 0.198]])
np.fmax(arr, arr2)
array([[0.436, 0.72 , 0.55 , 0.435], [0.42 , 0.33 , 0.205, 0.619], [0.397, 0.539, 0.621, 0.685], [0.204, 0.514, 0.184, 0.785], [0.854, 0.559, 0.847, 0.198]])
차이 계산
함수 | 내용 |
---|---|
np.diff(객체, n=1, axis=1) | 지정된 축(axis)과 지정된 기간(n)을 기준으로 차이를 반환 |
np.ptp(객체, axis=None) | 지정된 행 또는 열에서 최대값-최소값을 계산하여 반환 |
np.percentile(객체, q, axis=None) =np.quantile(객체, q, axis=None) | 객체에서의 [0, 100]사이의 지정된 백분율(q)에 속한 값을 반환 객체내에 nan 값이 존재하면 이 함수는 nan을 반환 |
np.nanpercentile(객체, q, axis=None) =np.quantile(객체, q, axis=None) | =np.percentile(), nan 값을 무시 |
np.diff(arr, axis=1)
array([[ 0.303, -0.72 , 0.302], [-0.055, 0.094, nan], [ 0.142, -0.12 , 0.266], [ nan, nan, 0.643], [ 0.142, -0.419, 0.058]])
np.ptp(arr, axis=1)
array([0.72 , nan, 0.288, nan, 0.419])
np.percentile(arr, [0.25, 0.75], axis=1)
array([[0.002265, nan, 0.397165, nan, 0.140435], [0.006795, nan, 0.397495, nan, 0.141305]])
np.nanpercentile(arr, [0.25, 0.75], axis=1)
array([[0.002265, 0.092275, 0.397165, 0.027885, 0.140435], [0.006795, 0.092825, 0.397495, 0.029655, 0.141305]])
np.quantile(arr, [0.25, 0.75], axis=1)
array([[0.2265 , nan, 0.4135 , nan, 0.1835 ], [0.49275, nan, 0.5755 , nan, 0.4525 ]])
중간값과 평균
함수 | 내용 |
---|---|
np.median(객체, axis=None) | 지정된 행 또는 열에서 중간값을 반환 |
np.nanmedian(객체, axis=None) | 중간값을 계산하는 함수로 Nan을 무시 |
np.mean(객체, axis=None) | 지정된 행 또는 열을 기준으로 산술평균을 반환 |
np.nanmean(객체, axis=None) | 위와 같은 함수로 Nan을 무시 |
np.average(배열객체, axis, weights) | 배열의 행, 열, 또는 전체의 평균을 반환 가중치를 지정하면 그것을 고려 가중치를 지정할 경우 axis를 반드시 함께 지정해야 함 |
np.median(arr, 0), np.nanmedian(arr, 0)
(array([0.397, nan, 0.14 , nan]), array([0.397, 0.549, 0.14 , 0.486]))
np.mean(arr, 0), np.nanmean(arr, 0)
(array([0.3164, nan, 0.1544, nan]), array([0.3164 , 0.4775 , 0.1544 , 0.46375]))
np.average(arr2, 0)
array([0.429 , 0.3262, 0.4814, 0.4896])
np.average(arr2, axis=0, weights=np.linspace(0, 1, arr2.shape[0]))
array([0.4841, 0.4382, 0.5387, 0.4352])
표준편차와 분산
함수 | 내용 | 참고 |
---|---|---|
np.std(객체, axis=None, ddof=0...) | 표준편차를 반환 | ddof는 자유도를 계산하기 위해 고려되는 수 ddof=0 → 전체수-0 Nan이 포함되어 있는 경우 Nan을 반환 |
np.var(객체, axis=None, ddof=0...) | 분산을 계산 | |
np.nanstd() np.nanvar() | Nan을 무시하고 표준편차와 분산을 계산 |
np.std(arr, 1), np.var(arr, 1)
(array([0.25778516, nan, 0.11458185, nan, 0.16846736]), array([0.06645319, nan, 0.013129 , nan, 0.02838125]))
np.nanstd(arr, 1), np.nanvar(arr, 1)
(array([0.25778516, 0.0385602 , 0.11458185, 0.27119775, 0.16846736]), array([0.06645319, 0.00148689, 0.013129 , 0.07354822, 0.02838125]))
np.std(arr2, 1, ddof=1), np.var(arr2, 1, ddof=1)
(array([0.23024968, 0.1742766 , 0.17296315, 0.3044235 , 0.36663095]), array([0.05301492, 0.03037233, 0.02991625, 0.09267367, 0.13441825]))
상관행렬과 공분산
함수 | 내용 |
---|---|
np.corrcoef(객체, 객체2=None) | Peason 상관계수 행렬을 반환 |
np.cov(객체, 객체2=None) | 공분산행렬을 반환 |
다음은 일정기간의 코스피 주가 자료입니다. 이 자료는 Close, Open, High, Low의 특성(feature, 변수)의 일일 주가로 구성되어 있습니다. 변수 Close와 Open의 1일간의 차이에 대한 상관행렬과 공분산 행렬을 계산해 봅니다.
import FinanceDataReader as fdr st=pd.Timestamp(2022,1, 20) et=pd.Timestamp(2022, 2, 11) da=fdr.DataReader("KS11", st, et).iloc[:,:4] da.tail(2)
Close | Open | High | Low | |
---|---|---|---|---|
Date | ||||
2022-02-09 | 2768.85 | 2772.63 | 2773.38 | 2753.51 |
2022-02-10 | 2768.23 | 2787.44 | 2788.27 | 2764.06 |
da1=np.diff(da, n=1, axis=0) np.around(da1[-2:,], 1)
array([[22.4, 4.9, -6.5, 26.8], [-0.6, 14.8, 14.9, 10.5]])
np.corrcoef(da1[:,0], da1[:,1])
array([[1. , 0.23146059], [0.23146059, 1. ]])
np.cov(da1[:,0], da1[:,1])
array([[2070.64877197, 482.18945455], [ 482.18945455, 2095.92070909]])
빈도수와 히스토그램
- np.bincount(1차원 배열객체)
- 객체 내의 각 요소의 빈도수를 반환
np.random.seed(3) arr=np.random.randint(1, 10, 20) arr
array([9, 4, 9, 9, 1, 6, 4, 6, 8, 7, 1, 5, 8, 9, 2, 7, 3, 3, 2, 4])
np.bincount(arr)
array([0, 2, 2, 2, 3, 1, 2, 2, 2, 4])
- np.unique(객체, return_index=False, return_inverse=False, return_count=False):
- 객체의 고유값들을 반환 즉, 동일한 수치가 반복될 경우 그 수치 하나만 반환
- return_index=True: 그 고유값이 최초로 나오는 인덱스를 반환
- return_inverse=True: 객체를 반환
- return_counts=True: 고유값들의 각각의 빈도수를 반환
np.random.seed(4) arr=np.random.randint(1, 10, 100) arr[:3]
array([8, 6, 2])
np.unique(arr, return_index=True, return_counts=True)
(array([1, 2, 3, 4, 5, 6, 7, 8, 9]), array([16, 2, 6, 15, 11, 1, 13, 0, 3]), array([10, 8, 11, 9, 9, 10, 12, 17, 14]))
- np.histogram(객체, bins=10, range=None, weights=None, density=None):
- 객체의 요소들 bins에 따라 소그룹으로 분류하여 각 그룹의 상한값과 하한값을 포함하는 객체와 각 그룹에 포함되는 빈도수를 반환
- density=True로 지정한 경우 빈도수 대신 각 구간의 확률밀도를 반환
- bins: 소그룹의 수 또는 상한과 하한을 포함하는 1차원 배열 객체
- range: 구간을 지정한 경우 요소들 중 그 범위에 포함된 빈도수 또는 확률밀도를 반환
np.random.seed(5) x=np.random.randn(100)
fre, bin=np.histogram(x, bins=10) fre, bin
(array([ 1, 1, 4, 8, 27, 22, 16, 12, 6, 3]), array([-2.85968797, -2.33064205, -1.80159614, -1.27255022, -0.74350431, -0.21445839, 0.31458753, 0.84363344, 1.37267936, 1.90172527, 2.43077119]))
den,bin2=np.histogram(x, bins=10, density=True) den, bin2
(array([0.01890195, 0.01890195, 0.0756078 , 0.15121561, 0.51035268, 0.41584292, 0.30243122, 0.22682341, 0.11341171, 0.05670585]), array([-2.85968797, -2.33064205, -1.80159614, -1.27255022, -0.74350431, -0.21445839, 0.31458753, 0.84363344, 1.37267936, 1.90172527, 2.43077119]))
np.histogram(x, 3, range=[1, 5])
(array([17, 1, 0]), array([1. , 2.33333333, 3.66666667, 5. ]))
댓글
댓글 쓰기