PYTHON PROGRAMMING FUNDAMENTALS¶
다음 토픽을 다룹니다.:
- Numpy 기초
- Built-in methods and functions
- shape, length and type of Numpy arrays
- Reshape
- Minimum and maximum
- Mathematical Operations
- Indexing and slicing
- Selection
NUMPY BASICS¶
- NumPy는 다차원 배열을 처리할 수 있는 선형대수학(Linear Algebra) 라이브러리입니다.
- 다음이 실행이 안되면 아나콘다프롬프트에서 conda install numpy 를 실행하여 설치합니다.
In [2]:
# numpy : 데이터를 효율적으로 저장 할 수 있는 data structure
# pandas : numpy에 저장된 데이터를 쉽게 분석할 수 있는 라이브러리
# matplotlib : 시각화, 즉 차트로 표현하는 라이브러리
In [4]:
import numpy as np
In [5]:
a = [1, 3, 2, 8, 4]
In [6]:
sum(a) / len(a)
Out[6]:
3.6
In [7]:
# 넘파이로 1차원 데이터를 만들어보자
In [10]:
x = np.array(a)
In [11]:
x
Out[11]:
array([1, 3, 2, 8, 4])
In [12]:
x.mean()
Out[12]:
3.6
In [13]:
x.std()
Out[13]:
2.4166091947189146
In [14]:
x.size
Out[14]:
5
In [15]:
x.max()
Out[15]:
8
In [16]:
x.min()
Out[16]:
1
In [17]:
# 데이터의 모양을 확인하는 방법
In [18]:
x.sum()
Out[18]:
18
In [23]:
x.shape # 데이터가 5개
Out[23]:
(5,)
In [26]:
# 데이터의 갯수를 확인하는 방법
In [25]:
x.size
Out[25]:
5
In [27]:
# 저장하고 있는 데이터의 타입은 무엇이냐?
In [29]:
x.dtype
Out[29]:
dtype('int32')
In [ ]:
In [30]:
# 넘파이로 2차원 배열을 만드는 방법
In [32]:
X = np.array( [ [10,4], [6,8] ])
In [33]:
X
Out[33]:
array([[10, 4], [ 6, 8]])
In [ ]:
# 1차원 배열은 => 벡터라고 부르고, 변수로 사용할때 소문자로 쓴다.
# 2차원 배열은 => 행렬이라고 부른다. 변수로 사용할때 대문자로 쓴다.
In [34]:
X.shape # ㅡ 행 ㅣ 열
Out[34]:
(2, 2)
In [35]:
X.size
Out[35]:
4
In [36]:
X.dtype
Out[36]:
dtype('int32')
In [37]:
X.max()
Out[37]:
10
In [38]:
X.min()
Out[38]:
4
In [39]:
X.std()
Out[39]:
2.23606797749979
In [40]:
X.mean()
Out[40]:
7.0
In [41]:
X.sum()
Out[41]:
28
Save and Load data¶
In [42]:
X
Out[42]:
array([[10, 4], [ 6, 8]])
In [43]:
np.save('my_array', X)
my_array.npy 파일이 폴더에 생겼는지 확인하세요.¶
In [45]:
Y
--------------------------------------------------------------------------- NameError Traceback (most recent call last) Cell In [45], line 1 ----> 1 Y NameError: name 'Y' is not defined
In [46]:
Y = np.load("my_array.npy")
In [47]:
Y
Out[47]:
array([[10, 4], [ 6, 8]])
BUILT-IN METHODS AND FUNCTIONS¶
In [ ]:
특정 값으로, 행렬 만들기¶
In [48]:
# 숫자 0으로 되어있는 1차원 배열 만들기
In [49]:
np.zeros(1)
Out[49]:
array([0.])
In [50]:
np.zeros(7)
Out[50]:
array([0., 0., 0., 0., 0., 0., 0.])
In [52]:
# 숫자 0으로 되어있는 2차원 배열 만들기
In [54]:
np.zeros( (3,4) )
Out[54]:
array([[0., 0., 0., 0.], [0., 0., 0., 0.], [0., 0., 0., 0.]])
In [ ]:
# 모든 데이터를 1로 하여, 1차원 배열을 만드는 방법
In [60]:
np.ones(5)
Out[60]:
array([1., 1., 1., 1., 1.])
In [62]:
# 모든 데이터를 1로하여, 2차원 배열로 만드는 방법
In [61]:
np.ones( (5,5) )
Out[61]:
array([[1., 1., 1., 1., 1.], [1., 1., 1., 1., 1.], [1., 1., 1., 1., 1.], [1., 1., 1., 1., 1.], [1., 1., 1., 1., 1.]])
In [ ]:
In [63]:
# 숫자 7로, 1차원 배열 만들기
In [67]:
# 첫번째 파라미터는 데이터의 shape, 두번째 파라미터는 원하는 숫자
np.full(3,7)
Out[67]:
array([7, 7, 7])
In [ ]:
# 2차원으로 만들기
In [68]:
np.full( (4,5), 7 )
Out[68]:
array([[7, 7, 7, 7, 7], [7, 7, 7, 7, 7], [7, 7, 7, 7, 7], [7, 7, 7, 7, 7]])
정수의 배열을 얻고자 할때¶
In [69]:
# 0부터 9까지의 정수를 만들어 주세요.
In [71]:
list(range(9+1))
Out[71]:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
In [72]:
np.arange(10)
Out[72]:
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
In [73]:
# 4부터 19까지의 정수를 만들어 주세요
In [74]:
np.arange(4, 19+1)
Out[74]:
array([ 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19])
np.arange(start,stop,step)¶
In [75]:
np.arange(2,151+1,2)
Out[75]:
array([ 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 116, 118, 120, 122, 124, 126, 128, 130, 132, 134, 136, 138, 140, 142, 144, 146, 148, 150])
정수 말고 실수를 얻고자 할때¶
In [2]:
np.linspace(0, 25 , 10)
Out[2]:
array([ 0. , 2.77777778, 5.55555556, 8.33333333, 11.11111111, 13.88888889, 16.66666667, 19.44444444, 22.22222222, 25. ])
In [3]:
np.linspace(0, 25 , 10, endpoint=False)
Out[3]:
array([ 0. , 2.5, 5. , 7.5, 10. , 12.5, 15. , 17.5, 20. , 22.5])
In [ ]:
# 1차원 배열 = 벡터 (Vector)
# 2차원 배열 = 행렬 (Matrix)
In [181]:
x = np.arange(2, 10+1)
In [60]:
x
Out[60]:
array([ 2, 3, 4, 5, 6, 7, 8, 9, 10])
In [61]:
x.size
Out[61]:
9
In [62]:
x.shape # 행렬이 아닌 "데이터 9개짜리 벡터"
Out[62]:
(9,)
In [63]:
x.ndim # 차원
Out[63]:
1
In [64]:
x.mean()
Out[64]:
6.0
In [65]:
x
Out[65]:
array([ 2, 3, 4, 5, 6, 7, 8, 9, 10])
In [182]:
X = x.reshape( 3 , 3) # 3행 3렬로 변경
In [67]:
X.mean()
Out[67]:
6.0
In [68]:
# 1부터 100사이의 수로, 랜덤으로 2행 5열 짜리 행렬을 만들어 주세요
In [177]:
np.random.randint(1, 100, 5)
Out[177]:
array([97, 57, 14, 61, 23])
In [70]:
np.random.randint(1, 100, (2,5) )
Out[70]:
array([[15, 12, 70, 34, 15], [47, 25, 5, 84, 4]])
In [71]:
# X 를 1차원 벡터로 만들어 주세요.
In [192]:
X = np.arange(10)
In [193]:
X.reshape(10)
Out[193]:
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
In [194]:
# X를 5행 2열짜리로 만들어주세요
In [195]:
X.reshape(5,2)
Out[195]:
array([[0, 1], [2, 3], [4, 5], [6, 7], [8, 9]])
In [196]:
# X 를 1행 10열로 만들어주세요
In [197]:
# 행렬
X.reshape(1,10)
Out[197]:
array([[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]])
In [198]:
# 벡터
X.reshape(10)
Out[198]:
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
여러단계를 거치지 말고, 한번에 원하는 다차원 배열로 만들 수 있다.¶
In [78]:
# 5부터 시작해서, 25개의 정수를 만들고,
# 이를 5X5 행렬로 만들어주세요
In [88]:
np.arange(5, 5+25).reshape(5, 5)
Out[88]:
array([[ 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]])
In [89]:
np.arange(5, 5+25).reshape(5, 5).mean() # 프로그래밍은 연쇄반응
Out[89]:
17.0
랜덤값으로 채워진 배열을 만들 수 있다.¶
In [90]:
import random
In [95]:
random.random()
Out[95]:
0.5860960059883547
In [97]:
random.random(3)
--------------------------------------------------------------------------- TypeError Traceback (most recent call last) Cell In [97], line 1 ----> 1 random.random(3) TypeError: random() takes no arguments (1 given)
In [93]:
np.random.random(3)
Out[93]:
array([0.78795814, 0.39140012, 0.31806693])
In [98]:
np.random.random( (3,4) )
Out[98]:
array([[0.68424189, 0.13446138, 0.65063726, 0.35354409], [0.5746724 , 0.27578246, 0.89951072, 0.39865856], [0.26610086, 0.79348101, 0.22605561, 0.07765237]])
In [201]:
np.random.randint(1,6+1) # 1부터 6까지의 수 range 와 마찬가지로 +1 을 한다.
Out[201]:
6
In [147]:
np.random.randint(1,6+1,10)
Out[147]:
array([1, 4, 3, 5, 6, 4, 6, 3, 6, 2])
In [148]:
np.random.randint(1,6+1,(3,4) )
Out[148]:
array([[5, 6, 3, 4], [5, 2, 2, 2], [3, 4, 1, 3]])
In [206]:
np.random.seed(23)
In [207]:
# 1부터 99까지의 숫자 4행 5열
In [208]:
X = np.random.randint(1,100,(4,5))
In [209]:
X
Out[209]:
array([[84, 41, 74, 55, 32], [77, 92, 40, 91, 26], [52, 7, 46, 13, 50], [67, 76, 86, 70, 65]])
In [210]:
# 데이터 전체에서 최대값, 최소값, 전체합, 전체평균, 표준편차, 중앙값을 구하세요
In [211]:
X.max()
Out[211]:
92
In [212]:
X.min()
Out[212]:
7
In [213]:
X.sum()
Out[213]:
1144
In [214]:
X.mean()
Out[214]:
57.2
In [215]:
X.std() # 평균으로부터 분포, 산포도
Out[215]:
24.595934623429137
In [216]:
X.median()
--------------------------------------------------------------------------- AttributeError Traceback (most recent call last) Cell In [216], line 1 ----> 1 X.median() AttributeError: 'numpy.ndarray' object has no attribute 'median'
In [217]:
np.median(X)
Out[217]:
60.0
In [218]:
X.mean(axis = 1) # 행별로 평균
Out[218]:
array([57.2, 65.2, 33.6, 72.8])
In [219]:
X.mean(axis = 0) # 열별로 평균
Out[219]:
array([70. , 54. , 61.5 , 57.25, 43.25])
In [220]:
X.max(axis=1)
Out[220]:
array([84, 92, 52, 86])
In [221]:
X.sum(axis = 0)
Out[221]:
array([280, 216, 246, 229, 173])
'DataScience > Numpy' 카테고리의 다른 글
Numpy Slicing 주의점, Copy, boolean 연산 (0) | 2022.11.23 |
---|---|
Numpy 인덱스접근, 슬라이싱 (0) | 2022.11.23 |