데이터분석 🔎

[데이터 분석을 위한 라이브러리] 파이썬 numpy, numpy와 list차이

23.8 2022. 11. 24. 07:29
반응형

2. 데이터 핸들링을 위한 라이브러리 Numpy

01. Numpy란

02. Numpy와 파이썬 List 차이

03. 배열의 기초

04. 배열의 속성

05. 실습

06. Indexing & Slicing

 

 

 

01. Numpy란

 

Numpy : 파이썬에서 과학계산과 데이터 분석에 필요한 기본 패키지로 대규모의 다차원 배열을 다룰 수 있게 도와준다.

(Numerical Python의 약자로, 수치적 파이썬을 의미.)

즉, 여러 차원의 큰 배열을 다룰때 유용한 패키지로, 데이터 분석을 위해서 pandas와 함께 필수적으로 숙지해야 하는 패키지이다.

 

* 데이터 분석 및 머신러닝에 자주 쓰이는 파이썬 라이브러리로는

Numpy, Pandas, Matplotlib, Tensorflow, Pytorch, Scipy, Keras 등이 있다.

 

 

그렇다면 Numpy는 왜 사용할까?

1.

우리가 향후 다룰 데이터의 대부분은 숫자 배열로 볼 수 있다.

예를들어, 하나의 이미지는 하나의 픽셀을 명암에 따라 숫자로 나타내서 배열로 나타낼 수 있다.

또한  소리도 배열 형태의 데이터로 나타낼 수 있다.

그렇기에 우리는 대규모의 배열을 다룰 수 있는 라이브러리가 필요!

 

2.

파이썬 리스트에 비해 처리 속도가 빨라서 성능이 우수하고,

선형대수, 통계 관련 여러 함수가 내장되어 있다.

 

 

 

Numpy의 특징.

- 대규모의 다차원 배열(ndarray)을 처리하는데 필요한 여러 유용한 기능을 제공

- 같은 자료형의 데이터를 담을 수 있는 포괄적인 배열

 

- Numpy는 반복문 없이 대용량의 배열을 처리 할 수 있다.

- 파이썬 리스트에 비해 빠른 연산을 지원하여  메모리를 효율적으로 사용할 수 있다.

 

 

 

 

02. Numpy와 파이썬 List의 차이

Numpy와 List는 데이터의 타입, 데이터를 생성하는 법, 데이터의 형태가 다릅니다.

코드를 통해 확인해봅시다.

 

파이썬에서 0~4가 담긴 리스트 배열 생성 및 출력 형태 확인

list_arr = list(range(5))
print(list_arr) # [0,1,2,3,4] => 콤마로 구분
print(type(list_arr)) # <class 'list'>

 

Numpy로 array 생성 및 출력 형태 확인

import numpy as np

np_arr = np.array(range(5))
print(np_arr) # [0 1 2 3 4 ] => 공백으로 구분
print(type(np_arr)) # <class 'numpy.ndarray>

 

정리하면

파이썬은 [0,1,2,3,4]와 같이 콤마로 구분하지만

넘파이는 [0 1 2 3 4]와 같이 공백으로 구분.

 

파이썬의 데이터 타입은 list지만

넘파이의 데이터 타입은 numpy.ndarray.

 

 

03. Numpy 배열 ndarray의 기초

 

파이썬의 리스트는 하나의 리스트 안에 다양한 형태의 데이터 타입을 저장할 수 있지만,

Numpy의 array는 같은 데이터 타입만 저장할 수 있다.

 

Numpy 배열의 데이터 타입 : dtype

import numpy as np

arr = np.array([0, 1, 2, 3, 4], dtype=float)

#array를 실수형으로 지정해줬기에 1. 과 같이 실수형으로 나타난다
print(arr) #[0. 1. 2. 3. 4.]  

#arr의 타입을 출력
print(arr.dtype) # 'float 64'

#arr를 int형으로 출력
print(arr.astype(int)) # [0 1 2 3 4]

 

ndarray 생성하기

import numpy as np

#np.array()
list1 = [0, 1, 2, 3]
arr1 = np.array(list1)

#np.array()
arr2 = np.array([0, 1, 2, 3])

#np.arange() : range()함수와 유사하지만 리스트 대신 ndarray를 반환
arr3 = np.a.arange(10)

#np.ones() : 원소가 모두 1인 배열 생성
np.ones((4,5))

#np.zero() : 원소가 모두 0인 배열 생성
np.zeros((2,3,4,5))

 

 

dtype의 종류

 

 

04. 배열의 속성

 

ndarray의 차원 관련 속성 : ndim & shape

ndim은 차원을 출력하고

shape는 배열의 모양을 출력한다.

list = [0, 1, 2, 3]

#파이썬의 list를 활용해서 numpy의 array를 생성할 수 있다.
arr = np.array(list)  #np.array(range(4))와 같은 표현.

#[0,1,2,3]의 ndim과 shape
print(arr.ndim) #1
print(arr.shape) #(4,)

 

list = [[0,1,2], [3,4,5]]

#2차원 배열
arr = np.array(list)

print(arr.ndim) #2
print(arr.shape) #(2,3)

 

 

ndarray의 크기 속성과 shape 조절

 

아래와 같은 arr을 만들고 shape와 size, len을 출력해 봅시다.

 

arr = np.array([0,1,2,3,4,5])

print("arr.shape : {}".format(arr.shape)) # arr.shape : (6,)
print("배열 요소의 수 : {}".format(arr.size)) # 배열 요소의 수 : 6
print("배열의 길이 : {}".format(len(arr))) # 배열의 길이 : 6

 

arr의 shape를 3,2로 바꾸고, shape, size, len을 다시 한 번 확인해봅시다.

arr.shape = 3,2

print("arr.shape : {}".format(arr.shape))  #arr.shape : (3,2)
print("배열 요소의 수 : {}".format(arr.size)) # 배열 요소의 수 : 6
print("배열의 길이 : {}".format(len(arr))) #배열의 길이 : 3

#shape, size와 len의 사용방식 다른것 주의!

 

[0 1 2 3 4 5]였던 array가 아래와 같이 변하게 됩니다.

[[0 1]

 [2 3]

[4 5]]

 

 

05. 실습

 

*type과 dtype이 다른 것 주의

import numpy as np

print("1차원 array")
array = np.array(range(10))
print(array)

# 1. type()을 이용하여 array의 자료형을 출력해보세요.
print(type(array)) #<class 'numpy.ndarray'>

# 2. ndim을 이용하여 array의 차원을 출력해보세요.
print(array.ndim) #1

# 3. shape을 이용하여 array의 모양을 출력해보세요.
print(array.shape) #(10,)

# 4. size를 이용하여 array의 크기를 출력해보세요.
print(array.size) #10

# 5. dtype을 이용하여 array의 dtype(data type)을 출력해보세요.
print(array.dtype) #int64

# 6. array의 5번째 요소를 출력해보세요. (array[5])
print(array[5]) #5

# 7. array의 3번째 요소부터 5번째 요소까지 출력해보세요. (array[3:6])
print(array[3:6]) #[3 4 5]

 

 

import numpy as np


print("2차원 array")
matrix = np.array(range(1,16))  #1부터 15까지 들어있는 (3,5)짜리 배열을 만듭니다.
matrix.shape = 3,5
print(matrix)


# 1. type을 이용하여 matrix의 자료형을 출력해보세요.
print(type(matrix))

# 2. ndim을 이용하여 matrix의 차원을 출력해보세요.
print(matrix.ndim)

# 3. shape을 이용하여 matrix의 모양을 출력해보세요.
print(matrix.shape)

# 4. size를 이용하여 matrix의 크기를 출력해보세요.
print(matrix.size)

# 5. dtype을 이용하여 matrix의 dtype(data type)을 출력해보세요.
print(matrix.dtype)

# 6. astype을 이용하여 matrix의 dtype을 str로 변경하여 출력해보세요.
print(matrix.astype('str'))

# 7. matrix의 (2,3) 인덱스의 요소를 출력해보세요.
print(matrix[2,3])

# 8. matrix의 행은 인덱스 0부터 인덱스 1까지 (0:2), 열은 인덱스 1부터 인덱스 3까지 (1:4) 출력해보세요.
print(matrix[0:2, 1:4])

 

 

06. Indexing & Slicing

 

인덱싱 : 데이터를 찾아내는 것.

슬라이싱 : 데이터를 잘라내는 것.

 

 

인덱싱

x = np.arange(7)

print(x) # [0 1 2 3 4 5 6]
print(x[3])  #3
print(x[7]) # IndexError : index 7 is out of bounds

x[0] = 10
print(x)  #[10 1 2 3 4 5 6]
x = np.arrange(1, 13, 1)
x.shape = 3, 4
print(x)  
#[[1 2 3 4 ]
 [5 6 7 8]
 [9 10 11 12]]
 
 
 print(x[2,3]) #12

 

 

슬라이싱

x = np.arange(7)
print(x) #[0 1 2 3 4 5 6]

print(x[1:4])  #[ 1 2 3 ]
print(x[1:]) #[1 2 3 4 5 6]
print(x[:4]) # [0 1 2 3]
print(x[::2]) #[0 2 4 6]
x = np.arange(1, 13, 1)
x.shape = 3,4  #3행 4열로 배열의 shape 변경
print(x)

print(x[1:2, :2:3])   #1:2 => 1행출력, :2:3 => 1열까지 출력하는데 3씩 증가하며 출력(여기서는 1열만 출력 된다.)
print(x[1:, :2])

 

 

 

07. 실습

 

인덱싱 : 데이터를 찾아내는 것.

슬라이싱 : 데이터를 잘라내는 것.

 

 

 

728x90
반응형