티스토리 뷰

python

[python] numpy(2)

코딩계란 2024. 2. 13. 01:50
728x90

연산

포함 여부를 판단하는 연산

  • in: 데이터가 포함되어 있으면 True 아니면 False
  • not in: 데이터가 포함되어 있지 않으면 True 아니면 False

 

배열의 전치와 축 변경 

  • 전치: 행과 열을 반전 
  • 축 변경: 3차원 이상에서 데이터의 축 순서를 바꾸는 것 
  • 머신러닝 등을 할 때 데이터의 증강(데이터를 늘리는 것)이나 다양한 패턴을 찾고자 할 때 사용 
  • 행렬은 T라는 속성으로 전치 가능 
  • numpy의 배열에는 transpose라는 메서드를 제공해서 메서드에 축의 순서를 설정하면 축의 순서를 변경해준다. 
  • 실제적으로 3차원 이상의 데이터는 차원 변경을 잘 하지 않는다. 
#행렬의 전치 - 축 변경
import numpy as np

original = np.array([[1,2,3],[4,5,6]])

print(original)
print(original.T)
print(original.transpose(1,0))
# 실행 결과
[[1 2 3]
 [4 5 6]]
[[1 4]
 [2 5]
 [3 6]]
[[1 4]
 [2 5]
 [3 6]]

 

랜덤 관련

  • 머신러닝이나 데이터 분석에서 랜덤은 샘플 데이터 추출에 사용
  • 프로그래밍 언어에서 랜덤은 seed라고 하는 정수를 설정해서 난수표를 만들고 그 난수표에서 순서대로 데이터를 가져온다. 
  • 실제 랜덤을 만들고자 하면 seed 값을 실시간으로 변경해야 한다. 
  • 프로그래밍 언어 별로 seed 값이 기본적으로 실시간으로 변경되는 언어가 있고 고정된 언어가 있다. 

메서드

#시드 설정
numpy.random.seed(seed = 시드 번호)
#0.0 ` 1.0 사이의 숫자를 개수만큼 추출
numpy.random(데이터 개수)
#최소와 최대 사이에서 개수만큼 정수를 추출 
numpy.randint(최소, 최대, 데이터 개수)
#균등 분포에서 데이터 개수만큼 추출 
numpy.rand(데이터 개수)
#표준 편차가 1이고 평균이 0인 정규 분포 사이에서 데이터 개수만큼 추출
numpy.randn(데이터 개수)
#이항분포에서 추출 
#n: 0부터 나올 수 있는 숫자까지의 범위,  p: 확률 , size: 개수
numpy.binomial(n,p,size)

permutation: 정수를 설정해서 랜덤한 배열을 생성
shuffle: 랜덤한 배열을 생성
choice(): 배열에서 복원 추출

 

복원 추출과 비복원 추출

  • 복원 추출: 한 번 시행한 결과를 다시 모집단에 포함시켜 시행
  • 비복원 추출: 한 번 시행한 결과는 모집단에서 배제한뒤 시행
  • 파이썬은 실행될 때 seed를 설정하지 않으면 seed를 실행시간을 기준으로 설정한다. (랜덤한 숫자 추출의 개념)

실습

#seed를 설정하지 않으면 실행 시간을 기준으로 seed가 설정되므로 
#실행할 때마다 다른 숫자가 리턴
result = np.random.normal(size=5)
print(result)

#seed를 42로 고정하면 실행할 때마다 동일한 데이터가 리턴된다. 
#머신러닝에서는 seed를 고정시키고 작업을 수행
np.random.seed(seed=42)
result = np.random.normal(size = 5)
print(result)
#실습 결과
[ 0.49671415 -0.1382643   0.64768854  1.52302986 -0.23415337]
[ 0.49671415 -0.1382643   0.64768854  1.52302986 -0.23415337]

 

numpy의 메서드 

메서드의 분류

  • Unary Function: 매개 변수가 1개인 경우
  • Binary Function: 매개 변수가 2개인 경우 

 

기본 통계 함수 

axis:

  • sum: 합계 
  • prod: 곱
  • nanprod: None은 1로 간주하고 곱
  • nansum: None을 0으로 간주하고 
  • mean: 평균
  • median: 중앙값
  • max:최대
  • min: 최소
  • std: 표준 편차
  • var: 분산
  • percentile: 밴분위수 

* 표준 편차와 분산은 ddof 옵션을 1로 설정해서 비편향 표준 편차와 분산을 구한다.

자유도는 다른 데이터의 값이 결정되면 자동을 값이 결정되는 데이터의 개

 

표준 편차와 분산

  • 표준 편차와 분산은 ddof 옵션에 따라 값이 다르게 나온다. 
  • 표준 편차와 분산은 평균이라는 통계값을 가지고 구한다. 
  • 평균이 결정되면 전체 데이터 개수 - 1 만큼의 값을 알게되면 나머지 1개의 값은 자동으로 결정된다. 자동으로 결정되는 값을 빼고 계산하거나 포함시켜 계산할 수 있다. (ddof 옵션으로 설정 가능)

기술 통계

  • argmin, argmax: 최소값과 최대값을 인덱스
  • comsum: 누적합
  • cumprodu: 누적 곱
  • diff: 차분은 이전 값을 뺀값, n이라는 옵션으로 차수를 설정 

 

소수 관련 함수

소수를 버리거나 올림하거나 반올림해주는 함수를 제공 

 

숫자처리 관현 함수 

절대값, 제곱, 제곱근, 부호 판별 함수를 제공

 

논리 함수

numpy.isnan(배열): 배열에 None, Null이 있는지 확인

numpy.logical_not(조건): 조건에 맞는 데이터인지 아닌지 여부를 리턴 

ar = np.array([10,2,3,np.nan,32])
#결측치 확인 
print(np.isnan(ar))

#결측치를 제외하고 가져오기 
result = ar[np.logical_not(np.isnan(ar))]
print(result)
[False False False  True False]
[10.  2.  3. 32.]

 

2개의 배열을 가지고 작업하는 함수 

  • add, subtract, multiply, divide, floor_divide, mod
  • power
  • maximaum, fmax, minimum, fmin

f가 붙는 함수는 np.nan은 무시한다. 

  • greater, greater_equal, less, less_equal, equal, not, equal

결과가 bool의 배열

  • logical_and, logical_or, logical_xor
  • eXclusive OR(배타적 논리합)
  • where(bool 배열, True일 때 선택할 배열, False일 때 선택할 배열)

집합 관련 함수 

  • unique(): 중복을 제거
  • intersect1d(): 교집합
  • union1d():합집합
  • in1d():데이터의 존재 여부를 bool배열로 확인

 

배열 분할 

numpy.split( 배열, 분할 기준 , axis=축 )

 

배열 결합

  • numpy.concatence(배열1, 배열2, axis = 축)
  • hstack, vstack, dstack, stack, r_, c_, tile: 배열을 연결해주는 함수
  • 테이블의 데이터가 많아서 조회가 그린 경우 테이블을 분할해서 저장
  • 행을 분할하는 겨우: partition
  • 데이터베이스에서는 조인을 통해 하나의 테이블로 변환 
  • hstack: 행의 개수가 같은 두 개 이상의 배열을 옆으로 연결
  • vstack: 열의 개수가 같은 두 개 이상의 배열을 상하로 연결
  • dstack: 차원을 늘려서 결합
  • stack: stack 함수를 확장한 것으로 차원의 위치(axis)를 직접 설정
  • tile(배열, 반복횟수): 배열을 반복해서 하나의 배열 생성
ar = np.array([[1,2,3],[4,5,6]])
br = np.array([[11,22,33],[44,55,66]])
print(np.hstack([ar, br]))
print(np.vstack([ar, br]))
print(np.dstack([ar, br]))
#실행 결과
[[ 1  2  3 11 22 33]
 [ 4  5  6 44 55 66]]
[[ 1  2  3]
 [ 4  5  6]
 [11 22 33]
 [44 55 66]]
[[[ 1 11]
  [ 2 22]
  [ 3 33]]

 [[ 4 44]
  [ 5 55]
  [ 6 66]]]

 

728x90

'python' 카테고리의 다른 글

[python] selenium  (0) 2024.02.13
[python] 데이터 수집  (1) 2024.02.13
[python] numpy(1)  (0) 2024.02.13
[python] sklearn, pandas(2)  (1) 2024.02.13
[python]pandas  (0) 2024.02.07