Numpy
1. __version__ : 버전 확인
import numpy as np
print(np.__version__)
2. array() : 배열 만들기
my_arr = np.array([10, 20, 30], [40, 50, 60])
결과값: [[10, 20, 30], [40, 50, 60]]
3. sum() : 배열의 각 요소를 모두 더한 값을 반환하기
넘파이 배열은 + 와 * 을 배열의 각 요소를 더하고 곱하는 작업이 가능하다.
a = np.array([1, 2, 3])
b = np.array([3, 4, 5])
print(a + b) #결과값: array([4, 6, 8])
print(a * b) #결과값: array([3, 8, 15])
np.sum() 함수에 a * b를 전달하면 넘파이 배열의 각 요소를 모두 더한 값을 반환할 수 있다.
np.sum(a * b) #결과값: 26 (3 + 8 + 15)
4. unique() : 고유한 값을 찾아 반환하기
np.unique(target_data, return_counts=True)
결과 값: (array([0, 1]), array([212, 357]))
return_counts=True : 고유한 값이 등장하는 횟수까지 세어서 반환
--> array([0, 1]) : target_data에 들어있는 고유한 값. 즉, 해당 데이터에는 0과 1 값만 들어있음.
--> array([212, 357]): 고유한 값의 개수. 즉, 212개의 0 값과 357개의 1 값이 들어있음.
5. random.randn() : 표준 정규 분포를 따르는 난수 만들기
x = np.random.randn(1000)
y = np.random.randn(1000)
plt.scatter(x, y)
plt.show()
표준 정규 분포를 따르는 난수 1000개를 만들어서 산점도 그려보기
6. ones(), zeros(), full() : 입력된 매개변수와 동일한 크기의 배열을 만들고 모두 특정 값으로 채움
--> ones() 는 1로, zeros()는 0으로, full()은 인자 값으로 채움.
--> 매개변수로 하나의 배열을 넣어줘서 이 배열과 같은 크기의 배열을 만들어도 되지만 아래 예시처럼 크기를 튜플 형식으로 전달해도 된다.
np.ones(data) #data와 같은 크기의 배열을 만들고 그 값들을 모두 1로 채움
np.zeros((2, 3)) #결과 값: array([[0., 0., 0.], [0., 0., 0.]])
np.full((2, 3), 7) #결과 값: array([[7, 7, 7], [7, 7, 7]])
7. exp() : 자연 상수(e)의 지수 함수를 계산
def activation(self, z):
a = 1 / (1 + np.exp(-z))
return a
시그모이드 함수를 계산하는 함수를 만든 것이다.
8. clip() : array 내의 요소들에 대해서 min으로 지정한 값보다 작으면 min 값으로 바꿔주고 max도 마찬가지.
z = np.clip(z, -100, None)
위의 예시에서는 z의 각 요소들에 대해서 -100 보다 작으면 -100으로 바꿔주고 max 값이 들어가야 할 자리에는 None이 들어갔으므로 max에 대한 작업은 수행하지 않는다.
9. mean() : numpy 배열의 평균 구하기
np.mean(arr, axis=1)
arr : 넘파이 배열이 들어감
axis(optional) : 평균이 계산되는 축 - 0은 열을 따라 계산, 1은 행을 따라 계산, 디폴트로 axis의 값이 없다면 1차원 배열을 계산하는 경우이다.
10. random.permutation() : randomly permute a sequence or return a permuted range
np.random.permutation(10) #랜덤 결과: array([1, 7, 4, 3, 0, 9, 2, 5, 8, 6])
np.random.permutation([1, 4, 9, 16, 25]) #랜덤 결과: array([25, 9, 4, 1, 16])
integer를 인수로 받으면 0부터 그 숫자까지의 값들을 랜덤하게 섞은 배열을 반환하고 인수로 배열을 넣으면 그 배열의 값들을 섞고 반환한다.
11. np.arange() : Python range 함수와 유사함
np.arange(5) #결과: array([0, 1, 2, 3, 4, 5])
Python의 range 함수와의 차이점은
- np.arange 함수는 실수의 값들이 있는 배열의 값들도 섞어서 반환하지만 range 함수는 정수만 지원한다.
- np.arange는 당연히 numpy 배열을 반환하므로 넘파이에서 지원하는 연산이 가능하지만 range는 불가능하다. 예를 들어, 넘파이는np.arange(10) * 3 와 같은 연산이 가능할 수 있게 지원한다.
12. sign() : 배열 안 요소들의 부호를 반환하기
np.sign([-5., 4.5]) #returns array([-1., 1.])
13. dot() : 행렬 곱셈 수행하기
x = [x1, x2, x3]
w = [w1, w2, w3]
np.dot(x, w) #결과 값: x1 * w1 + x2 * w2 + x3 * w3
14. random.normal() : 정규 분포를 만드는 무작위 수(배열) 만들기
np.random.normal(0, 1, (n_features, self.units))
매개변수는 순서대로 평균, 표준 편차, 만들고 싶은 배열의 크기
15. random.seed() : 무작위수 초깃값 고정(결과 동일하게 만들기 위해서 사용)
np.random.seed(1234)
16. argmax() : 배열의 가장 큰 값의 인덱스를 반환하기
np.argmax(z, axis=1)
17. bincount() : 넘파이 배열에 들어있는 정수값의 등장 횟수를 세어 정수값에 해당하는 인덱스 위치에 저장하기
np.bincount(y_train_all)
#결과 값: array([6000, 6000, 6000, 6000, 6000, 6000, 6000, 6000, 6000, 6000])
18. flip() : 넘파이 배열 뒤집기
w_r = np.flip(w)
#파이썬 슬라이스 연산자를 이용해도 됨
w_r = w[::-1]
19. reshape() : 배열의 차원 변환하기
x_4d = x.reshape(1, 3, 3, 1)
위의 코드는 x 배열을 4차원 배열로 바꿔준다.
20. astype() : 자료형 바꾸기
x = x.astype(np.float)
위의 코드는 x 라는 배열의 각 원소들의 자료형을 실수로 바꾼 것이다.
21. numpy() : 넘파이 배열로 변환하기
c.numpy()
c 가 텐서라면 위와 같은 코드를 통해서 넘파이 배열로 변환할 수 있다 (텐서플로에서는 다차원 배열을 텐서라고 부름).
22.
SciPy
1. convolve() : 합성곱 계산하기
from scipy.signal import convolve
convole(x, m, mode='valid')
2. correlate() : 교차 상관 계산하기
from scipy.signal import correlate
correlate(x, w, mode='valid')
3. correlate2d() : 2차원 배열의 합성곱 계산하기
x = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
w = np.array([[2, 0], [0, 0]])
from scipy.signal import correlate2d
correlate2d(x, w, mode='valid')
#결과 값: array([2, 4], [8, 10])
4.
Matplotlib
1. import
import matplotlib.pyplot as plt
2. show() : 화면에 그래프 출력
plt.show()
3. plot() : 선그래프 그리기
plt.plot([1, 2, 3, 4, 5], [1, 4, 9, 16, 25])
plt.show()
4. scatter() : 산점도(scatter plot) 그리기
plt.scatter([1, 2, 3, 4, 5], [1, 4, 9, 16, 25])
plt.show()
scatter() 함수의 첫 번째 argument(인자)로는 x축 값(입력 데이터), 두 번째 인자로는 y축 값(타깃 데이터)를 넣어준다.
5. xlabel(), ylabel() : 라벨 이름 표시하기
plt.xlabel('x')
plt.ylabel('y')
6. boxplot() : 박스 플롯 그리기
plt.boxplot(data)
plt.show()
입력 데이터를 그대로 boxplot() 함수에 넣는다면 Matplotlib은 x축을 feature(특성), y축을 value(값)으로 두고 박스플롯을 그린다.
7. ylim() : y축 값의 범위를 get 하거나 지정함
bottom, top = ylim() # return the current ylim
ylim((bottom, top)) # set the ylim to bottom, top
ylim(bottom, top) # set the ylim to bottom, top
8. legend() : 각 축을 설명하는 legend를 그래프에 넣음
plt.legend(['train_loss', 'val_loss'])
9. imshow() : 이미지 확인하기
plt.imshow(x_train_all[0], cmap='gray')
plt.show()
넘파이 배열을 입력 받아서 이미지를 그려줌
10. hist() : 히스토그램 그리기
housing.hist(bins=50, figsize(20, 15))
plt.show()
11.
Pandas
1. info() : 데이터에 대한 간략한 설명, 전체 행의 개수, 각 feature의 data type과 null이 아닌 값의 개수 등의 정보 반환
2. value_counts() : 카테고리 설명, 각 카테고리 별 데이터 수 반환
3. describe() : 숫자형 특성의 요약 정보 반환
4.
Scikit-learn
1. train_test_split() : 훈련 데이터와 검증 데이터로 나누기(default로는 총 데이터를 훈련 세트 75%와 테스트 세트 25%의 비율로 나눔)
from sklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test = train_test_split(input_data, target_data, stratify=target_data, test_size=0.2, random_state=42)
stratify=target_data : 데이터를 나눌 때 비율을 동일하게 만듦. 기본적으로 데이터를 나누기 전에 자체적으로 섞지만 일부 세트간의 비율이 불균형한 경우에 이렇게 지정해주면 비율을 유지시켜줌.
test_size=0.2 : 세트를 나눌 때의 비율을 지정해줌. 테스트 사이즈를 0.2로 지정해주면 총 훈련 데이터 세트를 훈련:테스트 = 8:2 비율로 나눠줌.
random_state=42 : 실전에서는 쓸 일이 없는 매개변수임. train_test_split 함수는 데이터를 무작위로 섞은 다음 세트를 나눠주는데 섞은 다음의 결과가 항상 일정하도록 난수의 초기값을 42로 설정해주는 것이다. 이렇게 설정해주면 항상 결과가 일정함.
2.
Tensorflow
1. to_categorical() : 원-핫 인코딩하기 (문자열로 되어있으면 인코딩하지 못함)
tf.keras.utils.to_categorical([0, 1, 3])
# 결과 값: array([[1., 0., 0., 0.], [0., 1., 0., 0.], [0., 0., 0., 1.]])
2. conv2d() : 2차원 합성곱 계산하기
3. max_pool2d() : 최대 풀링 수행하기
x = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9. 10, 11, 12], [13, 14, 15, 16]])
x = x.reshape(1, 4, 4, 1)
p_out = tf.nn.max_pool2d(x, ksize=2, strides=2, padding='VALID')
p_out.numpy().reshape(2, 2)
#결과 값: array([[6, 8], [14, 16]])
ksize : 풀링의 크기
strides : 스트라이드의 크기
4. avg_pool2d() : 평균 풀링 수행하기
5. relu() : 렐루 함수 사용하기
x = np.array([-1, 2, -3, 4])
r_out = tf.nn.relu(x)
r_out.numpy()
#결과 값: array([0, 2, 0, 4])
텐서플로의 렐루 함수는 Tensor 객체를 반환하기 때문에 화면에 출력하고 싶다면 넘파이로 변환해줘야 한다.
6. matmul() : np.dot()이랑 유사함
z1 = tf.matmul(f_out, self.w1) + self.b1
7. 자동미분
x = tf.Variable(np.array([1.0, 2.0, 3.0]))
with tf.GradientTape() as tape:
y = x ** 3 + 2 * x + 5
print(tape.gradient(y, x))
#결과 값: tf.Tensor([5. 14. 29.], shape=(3,), dtype=float64)
- with block으로 tf.GradientType() 객체가 감시할 코드를 감싼다.
- tape 객체는 with block 안에서 일어나는 모든 연산을 기록하고 텐서플로 변수인 tf.Variable 객체를 자동으로 추적한다.
- 그레디언트를 계산하려면 미분 대상 객체와 변수를 tape 객체의 gradient() method에 전달해야 한다.
8. glorot_uniform() : 글로럿(Glorot) 초기화 사용하기
ETC.
1. type() : 객체의 타입 확인
2. data[:, 2] (Python syntax)
- In python, the syntax [:, 2] is used to access elements from a two-dimensional array or list.
- It is known as slicing, which allows us to extract specific portions of an iterable object like lists, tuples, or arrays.
- The ':' before the comma indicates that we want to include all the elements along the first dimension of the object.
- In other words, it selects all the rows of the two-dimensional array.
- The number '2' after the comma represents the index of the column we want to extract.
- In python, indexing starts at 0, so '2' refers to the third column.
3. len(넘파이 배열) : len() 함수에 넘파이 배열을 넣으면 행 크기를 반환함
4.
일단 이 분야는 관련 라이브러리 활용 능력이 중요하다고 느껴졌고, 웹/앱 개발과는 다르게 함수명을 어느정도 알고 있어야 하고 그 문법이 생소했기 때문에 CheatSheet을 만들기로 결정했다. 영어와 한국어가 중구난방으로 쓰이는 느낌이 들 수 있지만 필자는 미국 소재 대학에서 코딩을 배웠기 때문에 영어로 표기하는 것이 더 편하다. 최대한 알아보기 쉽게 작성해보도록 하겠다.
Last Update: 2023.07.22
좌절을 경험한 사람은 자신만의 역사를 갖게 된다.
- 쇼펜하우어의 <희망에 대하여> 중에서 -