[데이터분석] 넘파이 (Numpy)

2023. 6. 12. 21:24데이터 분석

728x90

넘파이란? 

      * 수학, 과학 계산용 패키지

      *자료구조(ndarray)를 제공 ▶파이썬의 list보다 속도가 빠름, 적은 메모리를 사용

#넘파일 다운로드
!pip install numpy
# 넘파이 가져오기
import numpy
#확인하기
numpy
▶ <module 'numpy' from '/usr/local/lib/python3.10/dist-packages/numpy/__init__.py'>
#파이썬에서 numpy를 가져오기
import numpy as np

 1️⃣  ndarray

          → NumPy에서 제공하는 다차원 배열 객체          → 다차원의 데이터를 효율적으로 저장하고 다양한 수치 연산을 수행하는 데 사용됨

list1 = [1,2,3,4]
list2 = [[1,2,3,4],[5,6,7,8]]
print(list1)
print(list2)
print(type(list1))
print(type(list1[1]))
print(type(list2))

---------------------------------------
# 결과
[1, 2, 3, 4]
[[1, 2, 3, 4], [5, 6, 7, 8]]
<class 'list'>
<class 'int'>
<class 'list'>
ndarr1 = np.array([1,2,3,4])
print(ndarr1)
print(type(ndarr1)) # ndarray = n dimension array
--------------------------------------------------
# 결과
[1 2 3 4]
<class 'numpy.ndarray'>
# 리스트를 ndarray로 변환하는 방법
ndarr1 = np.array(list1)
ndarr2 = np.array(list2)
print(ndarr1)
print(ndarr2)
print(type(ndarr1))
print(type(ndarr2))

----------------------------------
# 결과
[1 2 3 4]
[[1 2 3 4]
 [5 6 7 8]]
<class 'numpy.ndarray'>
<class 'numpy.ndarray'>

2️⃣ ndarray의 data type

       → ndarray는 list와 다르게 1개으 단일 데이터 타입만 허용

list1 =[1,3.14, 'Python', '😎',True]
-------------------------------------
list1 =[1,3.14, 'Python', '😎',True]
list1[3]
-------------------------------------
# 결과
▶ [1, 3.14, 'Python', '😎', True]
▶ 😎
ndarr1 = np.array([1,2,3,4])
ndarr2 = np.array([1,2,3.14,4]) # 모든 요소가 float로 변경됨
ndarr3 = np.array([1,2,3.14,True])
ndarr4 = np.array(['1',2,3.14,True])
ndarr4 = np.array(['1',2,3.14,True],dtype= int)
-----------------------------
ndarr1
ndarr2
ndarr3 = np.array([1,2,3.14,True],dtype = int)
ndarr3
ndarr4 # dtype='<U32 유니코드 데이터 타입
type(ndarr4)
ndarr4 # np.array(['1','2','3.14','True'],dtype= int)일경우 오류가 뜸 3.14가 문제기이기 때문에
-----------------------------
# 결과
▶ array([1, 2, 3, 4])
▶ array([1.  , 2.  , 3.14, 4.  ])
▶ array([1, 2, 3, 1])
▶ array(['1', '2', '3.14', 'True'], dtype='<U32')
▶ numpy.ndarray
▶ array([1, 2, 3, 1])

3️⃣ ndarray 슬라이싱

ndarr1 = np.array(['🍊','🍉','🥭','🍎','🍇'])
ndarr1
ndarr1.shape
-------------------------------------------------
# 결과
▶ array(['🍊', '🍉', '🥭', '🍎', '🍇'], dtype='<U1')
▶ (5,)

  ➡️ 인덱싱

print(ndarr1[0])
print(ndarr1[4])
print(ndarr1[-1])
print(ndarr1[-2])
-------------------
# 결과
🍊
🍇
🍇
🍎

  ➡️ 슬라이싱

print(ndarr1[0:3])
print(ndarr1[2:])
print(ndarr1[:3])
-------------------
# 결과
['🍊' '🍉' '🥭']
['🥭' '🍎' '🍇']
['🍊' '🍉' '🥭']
ndarr2d = np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]])
ndarr2d.shape
print(ndarr2d[0,2])
print(ndarr2d[0][2])
# 0행 가져오기
print(ndarr2d[0])
print(ndarr2d[0,])
print(ndarr2d[0,:])
#0열 가져오기
print(ndarr2d[:,0])
-------------------------------------------------------
# 결과
▶ (3, 4)
▶ 3
▶ 3
▶ [1 2 3 4]
▶ [1 2 3 4]
▶ [1 2 3 4]
▶ [1 5 9]

4️⃣ Fancy 인덱싱

      * 범위가 아닌 특정 index의 집합의 값들을 선택해서 추출하고 싶을 때 사용

# 보기
ndarr1 = np.array([10,15,2,8,20,90,85,44,23,32])
idx = [2,5,9]
ndarr2d = np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]])
-------------------------------------------------------
ndarr1[idx]
ndarr2d[[0,1],:]
--------------------------------------------------------
# 결과
▶ array([ 2, 90, 32])
▶ array([[1, 2, 3, 4],
         [5, 6, 7, 8]])

5️⃣ Boolean 인덱싱

          * 조건에 대한 필터링을 통해 Boolean값을 이용한 색인을 사용

# 보기
ndarr1 = np.array(['🍊','🍉','🥭','🍎','🍇'])
selValue = [True,False,True,True,False]
ndarr2d = np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]])
-----------------------------------------------------------
ndarr1[selValue] # 숫자 안맞으면 에러뜸
ndarr2d>7
ndarr2d[ndarr2d>7]
------------------------------------------------------------
# 결과
▶ array(['🍊', '🥭', '🍎'], dtype='<U1')
▶ array([[False, False, False, False],
       [False, False, False,  True],
       [ True,  True,  True,  True]])
▶ array([ 8,  9, 10, 11, 12])

728x90
반응형