EDA with Python - NumPy basic

Page content

강의 홍보

공지

제 수업을 듣는 사람들이 계속적으로 실습할 수 있도록 강의 파일을 만들었습니다. 늘 도움이 되기를 바라며. 참고했던 교재 및 Reference는 꼭 확인하셔서 교재 구매 또는 관련 Reference를 확인하시기를 바랍니다.

I. 개요

  • 파이썬 처음 입문하는 사람들을 위해서 작성하였다. 탐색작 자료분석(EDA: Exploratory Data Analysis)을 위해 가장 기초적인 뼈대가 되는 NumPy에 대해서 학습하도록 합니다.

II. Array 만들기

  • 1차원, 2차원, 3차원의 Array를 만들고 학습니다.
  • 먼저 numpy 라이브러리를 불러옵니다.
# import numpy
import numpy as np
print(np.__version__)
1.18.4
  • 현재 구글 코랩에서 제공하는 numpy 버전은 1.18.4로 확인되고 있습니다.

(1) 1차원 Array 만들기

  • 1차원 Array를 만들어 봅시다.
my_1D_array = np.array([1,3,5,7])
print(my_1D_array)
type(my_1D_array)
[1 3 5 7]





numpy.ndarray

(2) 2차원 Array 만들기

  • 이번에는 2차원 Array를 만듭니다.
my_2D_array = np.array([[1, 2, 3, 4], [2, 4, 9, 16], [4, 8, 18, 32]])
print(my_2D_array)
type(my_2D_array)
[[ 1  2  3  4]
 [ 2  4  9 16]
 [ 4  8 18 32]]





numpy.ndarray

(3) 3차원 Array 만들기

  • 이번에는 3차원 Array를 만듭니다.
my_3D_array = np.array([[[ 1, 2 , 3 , 4],[ 5 , 6 , 7 ,8]], [[ 1, 2, 3, 4],[ 9, 10, 11, 12]]])
print(my_3D_array)
type(my_3D_array)
[[[ 1  2  3  4]
  [ 5  6  7  8]]

 [[ 1  2  3  4]
  [ 9 10 11 12]]]





numpy.ndarray

III. Array Information

  • 실무에서는 데이터를 어떤 형태로 수집되는지 바로 판단하기가 어렵습니다.
  • 따라서, 수집받은 데이터를 다양한 방식으로 출력하여 정보를 알아가는 것이 좋습니다.
  • 대표적으로, ndim, shape, dtype을 통해서 확인합니다.
    • ndim은 배열의 차원수를 의미합니다.
    • shape는 tuple의 index개수와 각 index가 보유하는 elements의 개수를 반환합니다.
    • dtype는 각 게체의 데이터 타입을 표시합니다.

(1) 함수 작성

  • 저장된 1차원, 2차원, 3차원의 Array를 활용합니다.
  • 먼저, 빠르게 확인하기 위해 함수를 작성합니다.
def check_array_info(arr_obj): 
  if isinstance(arr_obj, (np.ndarray)):
    print("The current dimension is :", arr_obj.ndim)
    print("The current shape is :", arr_obj.shape)
    print("The current dtype is :", arr_obj.dtype)
    print("The current value is :\n", arr_obj)

(1) 1차원 Array의 정보 확인

  • 이제 정보를 확인합니다.
check_array_info(my_1D_array)
The current dimension is : 1
The current shape is : (4,)
The current dtype is : int64
The current value is :
 [1 3 5 7]
  • 1차원 shape의 경우에는 (4,)만 표시가 되었는데, 이는 요소의 개수만 출력됨을 의미합니다.

(2) 2차원 Array의 정보 확인

  • 2차원 배열의 정보를 확인합니다.
check_array_info(my_2D_array)
The current dimension is : 2
The current shape is : (3, 4)
The current dtype is : int64
The current value is :
 [[ 1  2  3  4]
 [ 2  4  9 16]
 [ 4  8 18 32]]

(3) 3차원 Array의 정보 확인

  • 3차원 배열의 정보를 확인합니다.
check_array_info(my_3D_array)
The current dimension is : 3
The current shape is : (2, 2, 4)
The current dtype is : int64
The current value is :
 [[[ 1  2  3  4]
  [ 5  6  7  8]]

 [[ 1  2  3  4]
  [ 9 10 11 12]]]

IV. Creating An Array

  • 이제 다양한 방식으로 NumPy를 작성해보자.
# Array of ones
ones = np.ones((3,4))
check_array_info(ones)
The current dimension is : 2
The current shape is : (3, 4)
The current dtype is : float64
The current value is :
 [[1. 1. 1. 1.]
 [1. 1. 1. 1.]
 [1. 1. 1. 1.]]
# Array of zeros
zeros = np.zeros((1,2,3), dtype=np.int16)
check_array_info(zeros)
The current dimension is : 3
The current shape is : (1, 2, 3)
The current dtype is : int16
The current value is :
 [[[0 0 0]
  [0 0 0]]]
# Array with random values
np_random = np.random.random((2,2))
check_array_info(np_random)
The current dimension is : 2
The current shape is : (2, 2)
The current dtype is : float64
The current value is :
 [[0.47775118 0.60277821]
 [0.01818544 0.23499141]]
# Empty Array
empty_array = np.empty((3,2))
check_array_info(empty_array)
The current dimension is : 2
The current shape is : (3, 2)
The current dtype is : float64
The current value is :
 [[2.31101775e-316 0.00000000e+000]
 [0.00000000e+000 0.00000000e+000]
 [0.00000000e+000 0.00000000e+000]]
# Full Array
full_array = np.full((2,2), 7)
check_array_info(full_array)
The current dimension is : 2
The current shape is : (2, 2)
The current dtype is : int64
The current value is :
 [[7 7]
 [7 7]]
# Array of evenly_spaced values
even_spaced_array = np.arange(10, 25, 5)
check_array_info(even_spaced_array)
The current dimension is : 1
The current shape is : (3,)
The current dtype is : int64
The current value is :
 [10 15 20]
even_spaced_array2 = np.linspace(0, 2, 9)
check_array_info(even_spaced_array2)
The current dimension is : 1
The current shape is : (9,)
The current dtype is : float64
The current value is :
 [0.   0.25 0.5  0.75 1.   1.25 1.5  1.75 2.  ]

V. Array의 메모리 체크

  • 머신러닝과 딥러닝을 수행하려면 반드시 메모리 체크가 필수다.
  • 이 부분과 관련된 함수를 작성하여 기존에 저장된 1차원, 2차원, 3차원 배열의 객체를 출력하여 본다.

(1) 함수 작성

  • check_memory_info라는 함수를 만들어보자.
def check_memory_info(arr_obj): 
  if isinstance(arr_obj, (np.ndarray)): 
    print("The current size is :", arr_obj.size)
    print("The current flags is :", arr_obj.flags)
    print("The current itemzise is :", arr_obj.itemsize)
    print("The current total consumed bytes is :", arr_obj.nbytes)
  • sizeelement의 전체 개수를 의미한다.
  • flagsmemory layout의 정보를 출력한다.
  • itemsize는 bytes 당 한 배열의 길이를 출력한다.
  • nbytes는 객체가 소비하는 전체 bytes를 출력한다.

(1) 1차원 Array의 메모리 정보 확인

check_memory_info(my_1D_array)
The current size is : 4
The current flags is :   C_CONTIGUOUS : True
  F_CONTIGUOUS : True
  OWNDATA : True
  WRITEABLE : True
  ALIGNED : True
  WRITEBACKIFCOPY : False
  UPDATEIFCOPY : False

The current itemzise is : 8
The current total consumed bytes is : 32

(1) 2차원 Array의 메모리 정보 확인

check_memory_info(my_2D_array)
The current size is : 12
The current flags is :   C_CONTIGUOUS : True
  F_CONTIGUOUS : False
  OWNDATA : True
  WRITEABLE : True
  ALIGNED : True
  WRITEBACKIFCOPY : False
  UPDATEIFCOPY : False

The current itemzise is : 8
The current total consumed bytes is : 96

(3) 1차원 Array의 메모리 정보 확인

check_memory_info(my_3D_array)
The current size is : 16
The current flags is :   C_CONTIGUOUS : True
  F_CONTIGUOUS : False
  OWNDATA : True
  WRITEABLE : True
  ALIGNED : True
  WRITEBACKIFCOPY : False
  UPDATEIFCOPY : False

The current itemzise is : 8
The current total consumed bytes is : 128

VI. 결론

  • NumPy는 파이썬에서 다루는 데이터과학에서 다루는 매우 중요한 토대가 되는 라이브러이이다.
  • 간단하게 NumPy를 활용한 배열에 대해 학습하였다.
  • 또한, Array를 다양하게 만들어보고, Array가 가지고 있는 다양한 정보를 확인할 수 있는 여러 함수에 대해 익히는 시간을 가졌다.
  • 그러나, 여기까지는 사실상 기초이고, 이제 배열의 연산에 대해 익히는 시간을 가져야 한다.
  • 다음 시간에 Broadcasting이라는 기법을 학습할 것이다.

Reference

Mukhiya, Suresh Kumar, and Usman Ahmed. “Hands-On Exploratory Data Analysis with Python.” Packt Publishing, Mar. 2020, www.packtpub.com/data/hands-on-exploratory-data-analysis-with-python.