머신러닝과 데이터 분석 A-Z 올인원 패키지-데이터 처리를 위한 Python(Numpy) – (1)

2020. 9. 30. 15:25·AI Study/ML_Basic
반응형

* 위 강의노트는 패스트캠퍼스에서 주관하는 강의를 수강하고 작성한 노트입니다. 

1. numpy 모듈 & ndarray 이해하기

  • nunpy를 사용하는 이유
    • 성능 : 파이썬 리스트보다 빠름
    • 메모리 사이즈 : 파이썬 리스트보다 적은 메모리 사용
    • 빌트인 함수 : 선형대수, 통계관련 여러 함수 내장

 

  • ndarray란?
    • numpy에서 사용되는 다차원 리스트를 표현할 때 사용되는 데티어 타입

<캡쳐.png 사용>

numpy모듈 함수 이용하여 ndarrary 데이터 생성하기

# numpy package import
import numpy as np
import matplotlib.pyplot as plt
x = np.array([1, 2, 3]) ## ndarray 생성
y = np.array([2, 4, 6]) 

 

  • np.array로 함수 생성하기
x = np.arrary([1, 2, 3, 4]) # 1차원 array생성
print(x)

y = np.array([2, 3, 4], [1, 2, 5]) # 다차원array 생성

print(type(y)) # 타입 확인

[1 2 3 4 ]
[[2 3 4]
[1 2 5]]

np.arange(10) # 0부터 10미만까지 출력

array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

np.arange(1, 10) # 1부터 10 미만까지 출력

array([1, 2, 3, 4, 5, 6, 7, 8, 9])

np.arange(1, 10, 2) # 1부터 10 미만까지 2씩 건너뛰어서 출력

array([1, 3, 5, 7, 9])

 

  • np.ones, np.zeros로 생성하기
    • np.ones : 모든 원소가 1인 행렬 만들기
    • np.zeros : 모든 원소가 0인 행렬 만들기
np.ones((4, 5)) # 모든 원속 1인 4행 5열

array([[1. , 1., 1., 1., 1.],
[1. , 1., 1., 1., 1.],
[1. , 1., 1., 1., 1.],
[1. , 1., 1., 1., 1.]])

np.zeros((2, 3, 4)) # 모든 원속 0인 3차원 행렬

array([[[0., 0., 0., 0.,],
[0., 0., 0., 0.,],
[0., 0., 0., 0.,]],
[[0., 0., 0., 0.,].
[0., 0., 0., 0.,].
[0., 0., 0., 0.,]]])

 

  • np.empty, np.full로 생성하기
    • np.empty : 초기화된 값을 새엉
    • np.full : 하나의 숫자로 채워진 행렬을 생성
np.empty(2, 3) # random한 숫자로 초기화

arrary([1232131, 1223432423, 2353523],
[25323.534, 2534525, 23523552])

np.full((3, 4), 7)

array([[7, 7, 7, 7],
[7, 7, 7, 7],
[7, 7, 7, 7]])

 

  • np.eye로 생성하기
    • 단위 행렬 생성
np.eye(3) # 행과 열의 길이가 같아야 해서 하나의 값만 받음

array([[1., 0., 0, ],
[0., 1., 0, ],
[0., 0., 1.]])

 

  • np.linspace로 생성하기
    • 숫자 사이의 간격이 모두 동일하게 나누는 수
np.linspace(1, 10, 3) # 처음, 끝, 나누고자 하는 수 

array([1, 5.5, 10])

 

  • reshape 함수 활용
    • ndarray의 형태, 차원을 바꾸기 위해 사용
x = np.arange(1, 16)
print(x)
x.shape # 현재 x의 상태는 길이 15

[1 2 3 4 5 6 7 8 9 10 11 12 13 14 15]
(15, )

x.reshape(3 ,5) # x를 3행 5열로 바꾸기

array([[1, 2, 3, 4, 5],
[6, 7, 8, 9, 10],
[11, 12, 13, 14, 15]])

 

random 서브모듈 함수 이용하기

  • rand 함수
    • 0, 1 사이의 분포로 랜덤한 ndarray 생성
np.random.rand(2, 3) # 2행 3열의 무작위 수 출력

array([[0.95230979, 0.53646642, 0.06261263],
[0.72885464, 0.30390009, 0.85691438]])

 

  • randn 함수
    • n : normal distribution(정규분포)
    • 정규분포로 샘플링된 랜덤 ndarray 생성
np.random.rand(2, 3) # 2행 3열의 정규분포 랜덤숫자 출력

array([[-0.10813, 1.01265, -0.09823],
[0.456234, 0.00234, 0.23451]])

 

  • randint 함수
    • 특정 정수 사이에서 랜덤하게 샘플링
np.random.randint(1, 100, size = (3, 5)) # 1에서 100 사이의 정수를 3행 5열로 random하게 추출

array([[47, 67, 59, 67, 40],
[58, 20, 19, 5 , 44],
[91, 43, 55, 80, 8]])

 

  • seed 함수
    • 랜덤한 값을 동일하게 다시 생성하고자 할 때 사용
np.random.seed(100) # seed값을 줌으로 랜덤한 값 고정
np.random.randn(2, 3)

array([[-0.10813, 1.01265, -0.09823],
[0.456234, 0.00234, 0.23451]])

 

  • choice
    • 주어진 1차원 ndarray로부터 랜덤으로 샘플링
    • 정수가 주어진 경우, np.arange(해당숫자)로 간주
np.random.choice(100, size = (2, 3)) # 100 이하의 정수 중에 2행 3열 출력

array([[79, 80, 62],
[20, 15, 36]])

x = np.array([1, 2, 4, 1.5, 2.6, 4.9])
np.random.choice(x, size = (2, 2), replace = True) # x리스트중에 숫자를 뽑아 2행 2열 생성(중복허용)

array([[1.5, 2.6],
[1, 2.6]])

 

  • 확률분포에 따른 ndarray 생성
    • uniform
    • normal
    • etc.
np.random.uniform(1, 3, size = 2,2)

array([[1.34, 1.58],
[1.22, 2.99]])

indexing과 slicing 이해하기

  • 인덱싱

    • 파이썬 리스트와 동일한 개념으로 사용
    • , 를 사용하여 각 차원의 인덱스에 접근 가능
  • 1차원 벡터 인덱싱

x = np.arange(10)
print(x)

[0 1 2 3 4 5 6 7 8 9]

x[3] = 100 # 3번째 자리를 100으로 바꾸기
print(x)

[0 1 100 3 4 5 6 7 8 9]

  • 2차원 행렬 인덱싱
x = np.arange(10).reshape(2, 5)
print(x)

[[0 1 2 3 4]
[5 6 7 8 9]]

x[1] # 첫번째 행을 출력

[5 6 7 8 9]

x[1, 2] # 첫번째 행의 두번째 열을 가져오기

7

 

  • 슬라이싱

    • 리스트, 문자열, slicing과 동일한 개념으로 사용
    • , 를 사용하여 각 차원 별로 슬라이싱 가능
  • 1차원 벡터 슬라이싱

x = np.arange(10)
print(x)

[0 1 2 3 4 5 6 7 8 9]

x[1:7] # 첫번째부터 7번째까지 슬라이싱

array([1 2 3 4 5 6])

  • 2차원 벡터 슬라이싱
x = np.arange(10).reshape(2, 5)
print(x)

[[0 1 2 3 4]
[5 6 7 8 9]]

x[: , 1:4] # 행은 전부 가져오기, 열은 1에서 3열까지만 차원이 줄지는 않음!

array([[1 2 3],
[4 5 6]])

ndarray 데이터 형태를 바꿔보기

  • ravel, np.ravel
    • 다차원의 배열을 1차원으로 변경
    • ‘order’ 파라미터
      • ’C’ - row 우선 변경
      • ‘F’ - column 우선 변경
x = np.arange(15).reshape(3, 5)
print(x)

[[ 0 1 2 3 4]
[ 5 6 7 8 9]
[10 11 12 13 14]]

print(x.ravel())

array([0 1 2 3 4 5 6 7 8 9 10 11 12 13 14])

print(np.ravel(x)) # x.ravel()과 동일

array([0 1 2 3 4 5 6 7 8 9 10 11 12 13 14])

  • flatten
    • 다차원 배열을 1차원으로 변경
    • ravel과의 차이점 : copy를 생성하여 변경함(즉 원본 데이터가 아닌 복사본을 반환)
    • ‘order’ 파라미터
      • ’C’ - row 우선 변경
      • ‘F’ - column 우선 변경
y = np.arange(15).reshape(3, 5)
print(y)

[[ 0 1 2 3 4]
[ 5 6 7 8 9]
[10 11 12 13 14]]

print(np.flatten(y, order = 'C')) # 행을 기준으로 펼쳐짐

array([0 1 2 3 4 5 6 7 8 9 10 11 12 13 14])

print(np.flatten(y, order = 'F')) # 열을 기준으로 펼쳐짐

array([0 5 10 1 6 11 2 7 12 3 8 13 4 9 14])

 

  • reshape 함수
    • array의 shape를 다른 차원으로 변경
    • 주의할 점은 reshape한 후의 결과의 전체 원소 개수와 이전의 개수가 같아야 가능함
    • 사용 예 : 이미지 데이터 벡터화 - 이미지는 기본적으로 2차원 혹은 3차원이나 트레이닝을 위해 1차원으로 변경하여 사용됨
x = np.arange(10)
print(x)
print(x.shape) # 1차원 길이 10
print(x.ndim) # 1차원

array([0 1 2 3 4 5 6 7 8 9])
(10, )
1

print(x.reshape(2, 5))

[[0 1 2 3 4],
[5 6 7 8 9]]

x.reshape(2, -1) # 하나의 값을 주면 나머지 값을 알아서 유추해서 reshape

[[0 1 2 3 4],
[5 6 7 8 9]]

ndarray 기본 함수 사용하기

x = np.arnage(15).reshape(3, 5)
y = np.arnage(15).reshape(3, 5)
print(x)
print(y)

[[ 0 1 2 3 4],
[ 5 6 7 8 9],
[10 11 12 13 14]]

[[ 0 1 2 3 4],
[ 5 6 7 8 9],
[10 11 12 13 14]]

 

  • 연산함수
    • add, substract, multiply, divide
    • 기본적으로 차원과 행렬의 형태가 같아야 함
np.add(x, y)  # 행렬 덧셈. 차원과 행렬이 같아야함.

[[ 0 2 4 6 8],
[10 12 14 16 18],
[20 24 28 32 36]]

np.subtract(x, y)  # 행렬 뺄셈. 차원과 행렬이 같아야함.

[[ 0 0 0 0 0],
[ 0 0 0 0 0],
[ 0 0 0 0 0]]

np.multiply(x, y)  # 행렬 원소끼리의 곱셈

[[ 0 1 4 9 16],
[ 25 36 49 64 81],
[100 121 144 169 275]]

np.divide(x, y)  # 행렬 원소끼리의 나눗셈

[[ 1 1 1 1 1],
[ 1 1 1 1 1],
[ 1 1 1 1 1]]

 

  • 통계 함수
    • 평균, 분산, 중앙, 최대, 최소값 등등 통계 관련된 함수가 내장
np.mean(y) # y원소들의 평균값
y.mean() # np.mean(y)와 동일

np.max(y) # y의 최대값
np.argmax(y) # flatten한 형태라 가정하고 max값의 위치 출력

np.var(y) # 분산
np.median(y) # 중앙값
np.std(y) # 표준편차

 

  • 집계함수
    • 합계(sum), 누적합계(cumsum) 등등 계산 가능
np.sum(y) # y의 합
np.cumsum(y) # y 의 누적합

np.sum(y, axis = 0) # 축을 기준으로 sum

 

  • any, all 함수
    • any : 특정 조건을 만족하는 것이 하나라도 있으면 True, 아니면 False
    • all : 모든 원소가 특정 조건을 만족한다면 True, 아니면 False
z = np.random.randn(10)
np.any(z > 0) # z의 원소들 중에 하나라도 0보다 크면 True, 아니면 False
np.all(z > 0) # 모든 원소가 0이면 True, 아니면 False

 

  • where 함수
    • 조건에 따라 선별적으로 값을 선택 가능
    • 사용 예) 음수인경우는 0, 나머지는 그대로 값을 쓰는 경우
z = np.random.randn(10)

np.where(z > 0, z, 0) # z가 0보다 크면 z, 아니면 0으로 그대로 사용

 

axis(축) 이해 및 axis를 파라미터로 갖는 함수 활용하기

  • axis 이해하기
    • 몇몇 함수에는 axis keyword 파라미터가 존재
    • axis 값이 없는 경우에는 전체 데이터에 대해 적용
    • axis 값이 있는 경우에는, 해당 axis를 따라서 연산 적용
    • axis를 파라미터로 갖는 함수를 이용하기
      • 거의 대부분의 연산 함수들이 axis 파라미터를 사용
      • 이 경우, 해당 값이 주어졌을 때, 해당 axis를 따라서 연산이 적용
        • 따라서 결과는 해당 axis가 제외된 나머지 차원의 데이터만 남게 됨
        • ex) np.sum, np.mean, …
x = np.arange(10)
print(x)

[ 0 1 2 3 4 5 6 7 8 9 ]

  • 1차원 데이터에 적용하기
print(np.sum(x))
print(np.sum(x, axis = 0)) #1차원 벡터의 경우 차이가 없음
print(np.sum(x, axis = 1)) #차원이 1차원 미만이기 때문에 Error

45
45

  • 2차원 데이터에 적용하기
y = x.reshape(2, 5)
print(np.sum(y))
print(np.sum(y, axis = 0)) # 행방향 sum
print(np.sum(y, axis = 1)) # 열방향 sum

45
[5, 7, 9, 11, 13]
[10, 35]

  • 3차원 데이터에 적용하기
z = np.arange(36).reshape(3, 4, 3)
print(np.sum(y, axis = 0)) # 0번째 축이 없어지고 4행 3열만 남음
print(np.sum(y, axis = 1)) # 1번째 측이 없어지고 3행 3열이 남음
print(np.sum(y, axis = 2)) # 2번째 축이 없어지고 3행 4열이 남음

[[36, 39, 42],
[45, 48, 51],
[54, 57, 60],
[63, 66, 69]]

[[ 18, 22, 26],
[ 66, 70, 74],
[114, 118, 122]]

[[ 3, 12, 21, 30],
[ 39, 48, 57, 66],
[ 75, 84, 93, 102]]

  • axis가 튜플인 경우
np.sum(z, axis = (0, 1)) # 0축과 1툭을 없앰, 2축만 남음

array([198, 210, 222])

반응형

'AI Study > ML_Basic' 카테고리의 다른 글

머신러닝과 데이터 분석 A-Z 올인원 패키지 - 데이터 분석을 위한 Python(Pandas) – (1)  (0) 2020.09.30
머신러닝과 데이터 분석 A-Z 올인원 패키지 - 데이터 처리를 위한 Python(Numpy)(2)  (0) 2020.09.30
머신러닝과 데이터 분석 A-Z 올인원 패키지-데이터 수집을 위한 Python(2)  (0) 2020.09.10
머신러닝과 데이터 분석 A-Z 올인원 패키지 - 데이터 수집을 위한 Python(1)  (0) 2020.09.10
[수강 후기]머신러닝과 데이터분석 A-Z 올인원 패키지 - python programming 기초  (0) 2020.09.08
'AI Study/ML_Basic' 카테고리의 다른 글
  • 머신러닝과 데이터 분석 A-Z 올인원 패키지 - 데이터 분석을 위한 Python(Pandas) – (1)
  • 머신러닝과 데이터 분석 A-Z 올인원 패키지 - 데이터 처리를 위한 Python(Numpy)(2)
  • 머신러닝과 데이터 분석 A-Z 올인원 패키지-데이터 수집을 위한 Python(2)
  • 머신러닝과 데이터 분석 A-Z 올인원 패키지 - 데이터 수집을 위한 Python(1)
자동화먹
자동화먹
많은 사람들에게 도움이 되는 생산적인 기록하기
    반응형
  • 자동화먹
    자동화먹의 생산적인 기록
    자동화먹
  • 전체
    오늘
    어제
    • 분류 전체보기 (144)
      • 생산성 & 자동화 툴 (30)
        • Notion (24)
        • Obsidian (0)
        • Make.com (1)
        • tips (5)
      • Programming (37)
        • Python (18)
        • Oracle (6)
        • Git (13)
      • AI Study (65)
        • DL_Basic (14)
        • ML_Basic (14)
        • NLP (21)
        • Marketing&Recommend (4)
        • chatGPT (0)
        • etc (12)
      • 주인장의 생각서랍 (10)
        • 생각정리 (4)
        • 독서기록 (6)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    노션첫걸음
    데이터베이스
    git
    파이토치로 시작하는 딥러닝 기초
    자연어처리
    빅데이터분석
    Transformer
    cnn
    gcp
    머신러닝
    ML
    LSTM
    Python
    Jupyter notebook
    기초
    GPT
    노션
    pytorch
    python기초
    seq2seq
    데이터분석
    파이토치
    Github
    딥러닝
    Google Cloud Platform
    nlp
    빅데이터
    notion
    dl
    git commit
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
자동화먹
머신러닝과 데이터 분석 A-Z 올인원 패키지-데이터 처리를 위한 Python(Numpy) – (1)
상단으로

티스토리툴바