NumPy 활용한 데이터 분석 입문(1) - NumPy소개, ndarray 이해, 생성

천호영·2021년 6월 19일
0

Numpy 라이브러리 소개

Python 기반 라이브러리로
데이터 분석에 NumPy, pandas
데이터 시각화에 matplotlib, seaborn
웹 어플리케이션 개발에 Flask, django가 있습니다.

Numpy = Numerical Python
대규모의 고성능 수치 계산(연산속도 빠르고, 메모리를 효율적으로)
N차원의 배열을 효율적으로(반복문 없이 바로연산)
공식 사이트: https://numpy.org/

2차원 데이터는 엑셀 시트를 생각해보면 됩니다. 현업에서 2차원을 가장 많이 이용합니다.
이미지 데이터는 수많은 픽셀로 구성된 2차원 데이터입니다.
컬러 이미지 데이터는 RGB로 3차원 데이터입니다.
영상 이미지는 한장의 컬러이미지가 연속되므로 4차원 데이터입니다.

Numpy는 이러한 다양한 차원의 배열을 효율적으로 다룰 수 있게 해줍니다.
Numpy는 ndarray(N-dimension Array)라는 핵심 자료구조를 제공해주는데, 이는 대규모 데이터 집합을 담을 수 있는 매우 빠르고 유연한 핵심 자료구조입니다.

Numpy를 배운다는 것은?
다양한 차원의 데이터를 ndarray에 저장, 추가, 수정, 삭제할 수 있고,
ndarray에 저장된 데이터들을 연산, 조회, 정렬할 수 있고,
다양한 데이터들을 원하는 뷰로 결합하여 활용할 수 있는
파이썬 기반으로 만들어진 도구 사용법을 배우는 과정입니다.


Numpy 자료구조 - ndarray의 이해

Ndarray의 주요 속성

  • 형태: ndarray.shape
  • 원소의 수: ndarray.size
  • 저장된 데이터의 타입: ndarray.dtype
  • 배열의 차원(축)의 수: ndarray.ndim

Ndarray의 생성

np.array(object,dtype)
  • 입력된 데이터(object) 를 인자로 받아 ndarray 를 생성하는 함수
  • Parameters
    object : ndarray 에 저장할 데이터
    dtype : 배열의 데이터 타입, 기본 값은 None, 생략가능

선형대수에서

하나의 수: Scalar
1D Array: Vector
2D Array: Matrix
3D Array: Tensor

<실습코드>

'''
numpy 라이브러리 호출
'''
import numpy as np

'''
numpy 버전 출력
'''
print(np.__version__)

'''
ndarray 생성
'''
data = [10, 20, 30]
arr = np.array(data)

'''
생성한 ndarray 의 속성 출력
'''
print('\nCreate 1D Array')
print(arr)
print('type = ', type(arr))
print("shape: {}, size: {}, dtype: {}, dimension: {}"
.format(arr.shape, arr.size, arr.dtype, arr.ndim))

'''
2차원 ndarray 생성
'''
data = [[1,2,3], [4,5,6]]
arr = np.array(data, dtype=float)

'''
생성한 ndarray 의 속성 출력
'''
print('\nCreate 2D Array')
print(arr)
print('type = ', type(arr))
print("shape: {}, size: {}, dtype: {}, dimension: {}"
.format(arr.shape, arr.size, arr.dtype, arr.ndim))

'''
3차원 ndarray 생성
'''
data = [[[1, 2, 3],
         [4, 5, 6]],
        [[3, 2, 1],
         [4, 5, 6]]]
arr = np.array(data, dtype=float)

'''
생성한 ndarray 의 속성 출력
'''
print('\nCreate 3D Array')
print(arr)
print('type = ', type(arr))
print("shape: {}, size: {}, dtype: {}, dimension: {}"
.format(arr.shape, arr.size, arr.dtype, arr.ndim))

<실행결과>

1.20.2

Create 1D Array
[10 20 30]
type =  <class 'numpy.ndarray'>
shape: (3,), size: 3, dtype: int64, dimension: 1

Create 2D Array
[[1. 2. 3.]
 [4. 5. 6.]]
type =  <class 'numpy.ndarray'>
shape: (2, 3), size: 6, dtype: float64, dimension: 2

Create 3D Array
[[[1. 2. 3.]
  [4. 5. 6.]]

 [[3. 2. 1.]
  [4. 5. 6.]]]
type =  <class 'numpy.ndarray'>
shape: (2, 2, 3), size: 12, dtype: float64, dimension: 3

Numpy 자료구조 - ndarray의 생성

np.arange((start),stop,(step))
  • 파이썬의 range() 와 동일하게 연속된 데이터를 생성하는 함수
  • Parameters
    start : 생성할 시작 값으로 생략 가능함. 생략되면 0 부터 생성됨
    stop : 생성되는 마지막 값으로 해당 값은 포함되지 않음.
    step : 생성시 값들의 간격, 생략 가능
np.zeros(shape, dtype=float)
  • 지정된 크기(shape) 만큼 배열을 생성하고, 모든 요소를 0으로 초기화
  • 데이터 타입(dtype) 은 입력하지 않으면 기본 float 타입으로 생성됨
  • Parameters
    shape : 생성할 ndarray 의 크기로 튜플() 형태로 저장해야 함(1차원은 튜플아니어도 됨)
    dtype : 배열의 데이터 타입, 기본 값은 float, 생략가능
np.ones(shape, dtype=float)
  • 지정된 크기(shape) 만큼 배열을 생성하고, 모든 요소를 1으로 초기화
np.full(shape, fill_value, dtype=None)
  • 지정된 크기(shape) 만큼 배열을 생성하고, 모든 요소를 지정한 fill_value 값으로 초기화
np.empty(shape)
  • 지정된 크기(shape) 만큼 배열을 생성하고, 초기화 하지 않음
  • 요소의 초기화 과정이 없어 배열 생성 비용이 가장 빠르고 저렴함
  • 생성된 배열의 각 요소는 임의의 값이 저장되어 있음

다음은 지정된 배열과 shape이 같은 ndarray 를 생성하는 *_ like 함수

np.zeros_like()
np.ones_like()
np.full_like()
np.empty_like()

<실습코드>

import numpy as np

def printinfo(arr):
  print(arr)
  print("shape: {}, size: {}, dtype: {}, dimension: {}"
        .format(arr.shape, arr.size, arr.dtype, arr.ndim))

'''
np.arange() 를 통한 ndarray 생성
'''
arr = np.arange(2,10)
print('\nCreate ndarray by np.arange()')
printinfo(arr)

'''
np.zeros(data) 를 통한 ndarray 생성1
'''
arr = np.zeros(5)
print('\n Create ndarray by np.zeors()')
printinfo(arr)

'''
np.zeros(data, dtype) 를 통한 ndarray 생성2
'''
arr = np.zeros((3,4), dtype=int)
print('\n Create ndarray by np.zeors()')
printinfo(arr)

'''
np.ones() 를 통한 ndarray 생성
'''
arr = np.ones((3,4))
print('\n Create ndarray by np.ones()')
printinfo(arr)

'''
np.full() 를 통한 ndarray 생성
'''
arr = np.full((3,4),77)
print('\n Create ndarray by np.full()')
printinfo(arr)

'''
sample 데이터 생성 및
ones_like() 를 통한 ndarray 생성
'''
#sample 데이터 생성
data = [[1,2,3], [4,5,6]]
sample =  np.array(data)
print('\n Sample')
printinfo(sample)

one_array = np.ones_like(sample)
print('\n Create ndarray by np.ones_like()')
printinfo(one_array)

<실행결과>

Create ndarray by np.arange()
[2 3 4 5 6 7 8 9]
shape: (8,), size: 8, dtype: int64, dimension: 1

 Create ndarray by np.zeors()
[0. 0. 0. 0. 0.]
shape: (5,), size: 5, dtype: float64, dimension: 1

 Create ndarray by np.zeors()
[[0 0 0 0]
 [0 0 0 0]
 [0 0 0 0]]
shape: (3, 4), size: 12, dtype: int64, dimension: 2

 Create ndarray by np.ones()
[[1. 1. 1. 1.]
 [1. 1. 1. 1.]
 [1. 1. 1. 1.]]
shape: (3, 4), size: 12, dtype: float64, dimension: 2

 Create ndarray by np.full()
[[77 77 77 77]
 [77 77 77 77]
 [77 77 77 77]]
shape: (3, 4), size: 12, dtype: int64, dimension: 2

 Sample
[[1 2 3]
 [4 5 6]]
shape: (2, 3), size: 6, dtype: int64, dimension: 2

 Create ndarray by np.ones_like()
[[1 1 1]
 [1 1 1]]
shape: (2, 3), size: 6, dtype: int64, dimension: 2

0개의 댓글