-
Python 라이브러리와 NumpyML&DL&AI/Python 2023. 6. 14. 17:59728x90
1. 라이브러리
- 라이브러리의 사전적 의미 도서관
- 라이브러리(ilbrary)는 모듈(module)이라고도 불리며, 자주 쓰는 함수, 변수들을 모아 놓은 파이썬 파일이다.
- 자주 사용하는 기능을 모듈화, 패키지화 하여 만들어 둔 것
- 데이터 분석에 특화된 모듈(라이브러리)
- Numpy
- 고성능 과학계산을 위한 데이터분석 라이브러리
- Pandas
- 행과 열로 구성된 표 형식의 데이터를 지원하는 라이브러리
- Matplotlib
- 2D그래프로 시각화가 가능한 라이브러리
1.1 표준 라이브러리와 외부 라이브러리
- 표준 라이브러리
- 파이썬에서 기본으로 제공하는 라이브러리
- 파이썬 설치시 기본 제공
- 외부라이브러리
- 개발자가 필요에 의해 개발한 패키지와 모듈의 집합
1.2 모듈
- Module_test에 아래 함수를 저장
# 두 수를 더해주는 함수 정의 def add(num1, num2): """ 두수를 더해주는 함수 num1, num2 = int """ result = num1 + num2 return result
- 다른 파일에서 Module_test 모듈을 가져오는 방법
- os 모듈을 불러오는 것
import Module_test Module_test.add(10,20)
30
- from를 통한 사용하는 방법
- import* 는
- os모듈로부터 모두(*) import
from Module_test import add # from Module_test import* add(20,50)
70
- 차이점
- import만 사용하면 모듈 안의 함수를 사용할 때, 모듈명.함수명( ) 사용
- from을 사용하면 바로 함수명( ) 사용
2. Numpy
- Numerical Python의 약자
- 데이터의 숫자계산을 간편하게 해주는 라이브러리
- 파이썬 자료형인 list형태와 비슷하지만, "동일한 자료형"을 담는다는 차이점
- 반복문 없이 각 데이터의 연산이 가능하다.
- sum(), sqrt(), mean()
- 각 값들마다 index번호를 부여받는다.
- ndarray라고 불리는 넘파이 배열을 생성할 수 있다.
2.1 numpy 라이브러리 불러오기
import numpy as np
2.2 1차원 배열(array)만들기
list1 = [1,2,3,4,5] np.array(list1)
array([1, 2, 3, 4, 5])
2.3 넘파이배열 array와 list의 차이점
- list는 더하기를 했을 때 각 데이터가 뒤로 가서 붙는 반면, 넘파이 배열은 같은 index 데이터를 더해진다.
list2 = [1,2,3,4,5] arr1 = np.array(list2)
- 리스트의 연산
list2 + list2
[1, 2, 3, 4, 5, 1, 2, 3, 4, 5]
- array 배열의 연산
arr1 + arr1
array([ 2, 4, 6, 8, 10])
- list자료형은 자료형에 상관 없이 담을 수 있지만, 넘파이 배열은 동일한 자료형만 담을 수 있다.
list3 = ['python',123]
['python', 123]
- ( 123 ) 정수가 문자열( '123' )로 자동으로 형변환
np.array(list3)
array(['python', '123'], dtype='<U11')
2.4 2차원, 3차원 넘파이 배열 생성하기
- 2차원 넘파이 배열
list4 = [[1,2,3],[4,5,6]] arr2 = np.array(list4)
[[1, 2, 3], [4, 5, 6]] [[1 2 3] [4 5 6]]
- 3차원 넘파이 배열
arr3 = np.array([[[1,2,3], [4,5,6]], [[7,8,9], [10,11,12]]])
array([[[ 1, 2, 3], [ 4, 5, 6]], [[ 7, 8, 9], [10, 11, 12]]])
3. ndarray
- 동일한 자료형을 가지는 값들이 배열 형태로 존재함
- N차원 형태로 구성이 가능하다.
- 각 값들은 양의 정수로 색인(index)이 부여되어 있다.
- ndarray를 줄여서 array로 표현한다.
3.1 ndarray(넘파이 배열)의 속성
- 배열의 모양(크기) 확인하기 : shape
# 배열명.shape print(arr1.shape) # 1차원 데이터 : (데이터개수,) print(arr2.shape) # 2차원 데이터 : (행, 열) print(arr3.shape) # 3차원 데이터 : (높이, 행, 열)
(5,) (2, 3) (2, 2, 3)
- 배열의 요소 개수 확인하기 : size
# 배열명.size > 데이터의 총 개수 확인하기 print(arr1.size) print(arr2.size) print(arr3.size)
5 6 12
- 배열의 차원 확인하기 : ndim
# 차원을 알려준다. print(arr1.ndim) print(arr2.ndim) print(arr3.ndim)
1 2 3
- 배열의 타입 확인하기 : dtype
#배열명.dtype print(arr1.dtype) print(arr2.dtype) print(arr3.dtype)
int32 int32 int32
3.2 특정한 방식으로 넘파이 배열 생성하기!
- 배열 안의 모든 데이터를 0으로 초기화해서 생성하는 방식
- np.zeros(배열의 크기)
arr_zero = np.zeros((2,2)) # tuple 형태로 행과 열의 개수를 지정해주기
array([[0., 0.], [0., 0.]])
- 배열안의 모든 데이터를 1로 초기화해서 생성하기
- np.ones(배열의 크기)
arr_one = np.ones((5)) # 하나만 쓰게 되면 1차원 배열이 생성
array([1., 1., 1., 1., 1.])
- 배열 안의 모든 데이터를 2로 초기화 해서 생성하기
- np.full((배열의크기), 특정값)
- 2개의 매개변수
np.full((2,3), 2)
array([[2, 2, 2], [2, 2, 2]])
- numpy에서 자체적으로 제공해주는 함수 > 순차적으로 증가하는 넘파이배열 생성
- arange(시작값, 끝값+1, 증감값) > range함수와 동일한 매개변수를 갖는다.
np.arange(1,51)
array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50])
- 랜덤값으로 구성된 배열 생성!
- np.random.randint(시작, 끝, size=(배열크기))
np.random.randint(1,45,size=(2,3))
array([[17, 7, 18], [39, 13, 24]])
- 변경하고 싶은 배열명. astype("데이터 타입")
arr_one.astype('int')
array([1, 1, 1, 1, 1])
- 배열의 타입을 지정하면서 배열을 생성
- np.array(배열, dtype="데이터타입")
np.array([1.1,2.3,3.5],dtype = 'int')
array([1, 2, 3])
3.3 Array 연산
- numpy는 기본적으로 array 간의 사칙연산을 지원한다.
- 같은 위치에 있는 요소들 끼리 연산
arr_a = np.array([1,2,3]) arr_b = np.array([4,5,6]) arr_a + arr_b arr_a * arr_b arr_a / arr_b arr_a - arr_b
array([5, 7, 9]) array([ 4, 10, 18]) array([0.25, 0.4 , 0.5 ]) array([-3, -3, -3])
- 2차원 배열의 연산
arr_c = np.array([[1,2,3], [4,5,6]])
array([[1, 2, 3], [4, 5, 6]])
- 넘파이 배열에 정수를 연산하면 각 모든 위치에 있는 데이터의 연산이 일어남
arr_c + arr_c
array([[ 2, 4, 6], [ 8, 10, 12]])
arr_c * 3
array([[ 3, 6, 9], [12, 15, 18]])
3.4 넘파이 배열의 인덱싱과 슬라이싱
- 넘파이 배열의 인덱싱
- 넘파이배열[인덱스번호]
- index는 0부터 시작하므로 array1[2]는 3번째 위치의 데이터 값을 의미
arr1 = np.arange(1,10) arr1[2]
3
- 2차원 배열의 인덱싱
arr_2 = np.array([[1,2,3],[4,5,6]]) arr_2[0][1]
2
- 2차원 데이터에서 인덱싱 두 번째 방법
arr_2[0,1]
2
- 넘파이 배열의 슬라이싱
arr_10 = np.arange(0,11) arr_10[2 : 6]
array([2, 3, 4, 5])
3.5 reshape()
- 원래 있던 배열을 새로운 차원의 배열로 재배치할 때 사용
- np.reshape(변경할 배열의 shape)
arr20 = np.arange(1,51).reshape(5,10)
array([[ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [11, 12, 13, 14, 15, 16, 17, 18, 19, 20], [21, 22, 23, 24, 25, 26, 27, 28, 29, 30], [31, 32, 33, 34, 35, 36, 37, 38, 39, 40], [41, 42, 43, 44, 45, 46, 47, 48, 49, 50]])
- reshape 사용시 행과 열 둘 중에 하나의 값만 정해주고, 나머지 값은 -1로 지정하면 알아서 재배치 해준다.
arr20.reshape(10,-1)
3.6 인덱싱 슬라이싱 실습
print(arr20[1,2]) print(arr20[1,4:7]) print(arr20[2,]) print(arr20[[2,3],[1,2]]) print(arr20[[2,1,-2],[3,2,-2]])
13 [15 16 17] [21 22 23 24 25 26 27 28 29 30] [22 33] [24 13 39]
728x90'ML&DL&AI > Python' 카테고리의 다른 글
Python 라이브러리와 Numpy2 (0) 2023.06.15 python 함수 (0) 2023.06.13 Python 딕셔너리(dictionary) (0) 2023.06.13 python 반복문 (0) 2023.06.12 python 리스트와 튜플 (0) 2023.06.08