티스토리 뷰

2019.02.12-1

복습

  1. Iris 데이터에서 X와 y를 분리하시오
  2. Iris 에서 세가지 품종 데이터를 분리하시오.
  3. Iris 에서 PetalLength와 PetalWidth 두 속성을 이용하여 산점도를 그리시오. (plt.scatter 함수 사용)
In [3]:
import numpy as np
In [10]:
f = open('iris.csv')

line = f.readline()
features = line.strip().split(',')[:4]

labels = ['Iris-setosa', 'Iris-versicolor', 'Iris-virginica']

data=[]
for line in f:
    I = line.strip().split(',')
    I[:4] = [float(i) for i in I[:4]]
    I[4] = labels.index(I[4])
    
    data.append(I)
    
f.close()

iris = np.array(data)
In [11]:
X = iris[:,:4]
y = iris[:,4]
In [13]:
setosa = X[y==0]
versicolor = X[y==1]
virginica = X[y==2]
In [14]:
setosa.shape, versicolor.shape, virginica.shape
Out[14]:
((50, 4), (50, 4), (50, 4))
In [17]:
s_len = X[:,0]
s_wid = X[:,1]
p_len = X[:,2]
p_wid = X[:,3]
In [20]:
import matplotlib.pyplot as plt
In [27]:
plt.scatter(p_len, p_wid, c=y)

plt.title(features[2]+' vs '+features[3])
plt.xlabel(features[2])
plt.ylabel(features[3])
Out[27]:
Text(0,0.5,'PetalWidth')

Numpy 어레이 생성하기

  • np.array()
  • np.zeros()
  • np.ones()
  • np.eye() (대각행렬)
  • np.arange() 순서대로 나열(인덱스와 관련 높다.)
In [30]:
import numpy as np
import matplotlib.pyplot as plt
In [131]:
a = np.zeros([5,5])
a
Out[131]:
array([[0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0.]])
In [132]:
np.ones([5,5])
Out[132]:
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 [133]:
I = [1,1,1,1,1]
np.array(I)
Out[133]:
array([1, 1, 1, 1, 1])
In [135]:
l = [[1,1,1,1,1], [2,2,2,2,2], [3,3,3,3,3]]
np.array(l)
Out[135]:
array([[1, 1, 1, 1, 1],
       [2, 2, 2, 2, 2],
       [3, 3, 3, 3, 3]])
In [136]:
np.zeros([5,5]) + 5
Out[136]:
array([[5., 5., 5., 5., 5.],
       [5., 5., 5., 5., 5.],
       [5., 5., 5., 5., 5.],
       [5., 5., 5., 5., 5.],
       [5., 5., 5., 5., 5.]])
In [137]:
np.ones([5,5]) * 5
Out[137]:
array([[5., 5., 5., 5., 5.],
       [5., 5., 5., 5., 5.],
       [5., 5., 5., 5., 5.],
       [5., 5., 5., 5., 5.],
       [5., 5., 5., 5., 5.]])
In [138]:
a = np.eye(5)
a
Out[138]:
array([[1., 0., 0., 0., 0.],
       [0., 1., 0., 0., 0.],
       [0., 0., 1., 0., 0.],
       [0., 0., 0., 1., 0.],
       [0., 0., 0., 0., 1.]])
In [139]:
a[ [1,1,2] ]
Out[139]:
array([[0., 1., 0., 0., 0.],
       [0., 1., 0., 0., 0.],
       [0., 0., 1., 0., 0.]])
In [140]:
l = [1,1,2,0,4]

a[l]
Out[140]:
array([[0., 1., 0., 0., 0.],
       [0., 1., 0., 0., 0.],
       [0., 0., 1., 0., 0.],
       [1., 0., 0., 0., 0.],
       [0., 0., 0., 0., 1.]])
In [141]:
np.arange(10)
Out[141]:
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
In [142]:
np.arange(100,200,5)
Out[142]:
array([100, 105, 110, 115, 120, 125, 130, 135, 140, 145, 150, 155, 160,
       165, 170, 175, 180, 185, 190, 195])
In [143]:
a = np.arange(100)
a
Out[143]:
array([ 0,  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,
       51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67,
       68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84,
       85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99])
In [144]:
a.reshape(10,10)
Out[144]:
array([[ 0,  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, 51, 52, 53, 54, 55, 56, 57, 58, 59],
       [60, 61, 62, 63, 64, 65, 66, 67, 68, 69],
       [70, 71, 72, 73, 74, 75, 76, 77, 78, 79],
       [80, 81, 82, 83, 84, 85, 86, 87, 88, 89],
       [90, 91, 92, 93, 94, 95, 96, 97, 98, 99]])
In [145]:
np.arange(100).reshape(10,10)
Out[145]:
array([[ 0,  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, 51, 52, 53, 54, 55, 56, 57, 58, 59],
       [60, 61, 62, 63, 64, 65, 66, 67, 68, 69],
       [70, 71, 72, 73, 74, 75, 76, 77, 78, 79],
       [80, 81, 82, 83, 84, 85, 86, 87, 88, 89],
       [90, 91, 92, 93, 94, 95, 96, 97, 98, 99]])
In [146]:
a.reshape(20,-1)
Out[146]:
array([[ 0,  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, 51, 52, 53, 54],
       [55, 56, 57, 58, 59],
       [60, 61, 62, 63, 64],
       [65, 66, 67, 68, 69],
       [70, 71, 72, 73, 74],
       [75, 76, 77, 78, 79],
       [80, 81, 82, 83, 84],
       [85, 86, 87, 88, 89],
       [90, 91, 92, 93, 94],
       [95, 96, 97, 98, 99]])
In [147]:
a = np.arange(100).reshape(10,10)
a[:3]
Out[147]:
array([[ 0,  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]])
In [148]:
a[:,:3]
Out[148]:
array([[ 0,  1,  2],
       [10, 11, 12],
       [20, 21, 22],
       [30, 31, 32],
       [40, 41, 42],
       [50, 51, 52],
       [60, 61, 62],
       [70, 71, 72],
       [80, 81, 82],
       [90, 91, 92]])
In [149]:
a + 100
Out[149]:
array([[100, 101, 102, 103, 104, 105, 106, 107, 108, 109],
       [110, 111, 112, 113, 114, 115, 116, 117, 118, 119],
       [120, 121, 122, 123, 124, 125, 126, 127, 128, 129],
       [130, 131, 132, 133, 134, 135, 136, 137, 138, 139],
       [140, 141, 142, 143, 144, 145, 146, 147, 148, 149],
       [150, 151, 152, 153, 154, 155, 156, 157, 158, 159],
       [160, 161, 162, 163, 164, 165, 166, 167, 168, 169],
       [170, 171, 172, 173, 174, 175, 176, 177, 178, 179],
       [180, 181, 182, 183, 184, 185, 186, 187, 188, 189],
       [190, 191, 192, 193, 194, 195, 196, 197, 198, 199]])
In [150]:
a % 10
Out[150]:
array([[0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
       [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
       [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
       [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
       [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
       [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
       [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
       [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
       [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
       [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]], dtype=int32)
In [151]:
a // 10
Out[151]:
array([[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
       [1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
       [2, 2, 2, 2, 2, 2, 2, 2, 2, 2],
       [3, 3, 3, 3, 3, 3, 3, 3, 3, 3],
       [4, 4, 4, 4, 4, 4, 4, 4, 4, 4],
       [5, 5, 5, 5, 5, 5, 5, 5, 5, 5],
       [6, 6, 6, 6, 6, 6, 6, 6, 6, 6],
       [7, 7, 7, 7, 7, 7, 7, 7, 7, 7],
       [8, 8, 8, 8, 8, 8, 8, 8, 8, 8],
       [9, 9, 9, 9, 9, 9, 9, 9, 9, 9]], dtype=int32)
In [33]:
# 데이터의 편향성을 없애기 위해서 행렬을 사용
# ex) ['서울', '광주', '부산'] =[0,2,1]로 두면 숫자간 순서가 생겨 문제가 생길 수 있다.
# 그래서 [[1,0,0],[0,0,1],[0,1,0]]으로 두면 편향성을 없앨 수 있다.

# 나 너 좋다 음식 맛있다 요리 잘한다.
# 1  0    1    0      0    1      1
In [47]:
a= np.arange(100).reshape(10,-1)
np.sum(a) # 합
Out[47]:
4950
In [48]:
np.mean(a) #평균
Out[48]:
49.5
In [58]:
np.std(a) #표준편차
Out[58]:
0.8039900496896714
In [50]:
a = np.zeros([5,5])
a
Out[50]:
array([[0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0.]])
In [52]:
a[0,0]=1   
# (0,0)을 지정하여 값을 바꾼다. 테스트 목적. 데이터 자료에는 함부러 사용하지 말 것.
a
Out[52]:
array([[1., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0.]])
In [53]:
a[0]=1
# 1번째 행을 모두 1로 바꾼다.
a
Out[53]:
array([[1., 1., 1., 1., 1.],
       [0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0.]])
In [56]:
a[:,0]=2
# 1번째 열을 모두 2로 바꾼다.
a
Out[56]:
array([[2., 1., 1., 1., 1.],
       [2., 0., 0., 0., 0.],
       [2., 0., 0., 0., 0.],
       [2., 0., 0., 0., 0.],
       [2., 0., 0., 0., 0.]])
In [69]:
a = np.zeros([5,5])
a[[0,-1]] = 3
a[:, [0,-1]] = 7
a
Out[69]:
array([[7., 3., 3., 3., 7.],
       [7., 0., 0., 0., 7.],
       [7., 0., 0., 0., 7.],
       [7., 0., 0., 0., 7.],
       [7., 3., 3., 3., 7.]])
In [70]:
a==0
Out[70]:
array([[False, False, False, False, False],
       [False,  True,  True,  True, False],
       [False,  True,  True,  True, False],
       [False,  True,  True,  True, False],
       [False, False, False, False, False]])
In [71]:
a[a==0] = -1
a
Out[71]:
array([[ 7.,  3.,  3.,  3.,  7.],
       [ 7., -1., -1., -1.,  7.],
       [ 7., -1., -1., -1.,  7.],
       [ 7., -1., -1., -1.,  7.],
       [ 7.,  3.,  3.,  3.,  7.]])
In [73]:
a[1:-1,1:-1]=99
a
Out[73]:
array([[ 7.,  3.,  3.,  3.,  7.],
       [ 7., 99., 99., 99.,  7.],
       [ 7., 99., 99., 99.,  7.],
       [ 7., 99., 99., 99.,  7.],
       [ 7.,  3.,  3.,  3.,  7.]])
In [74]:
a = np.arange(12).reshape(4,3)
a
Out[74]:
array([[ 0,  1,  2],
       [ 3,  4,  5],
       [ 6,  7,  8],
       [ 9, 10, 11]])
In [75]:
a<5
Out[75]:
array([[ True,  True,  True],
       [ True,  True, False],
       [False, False, False],
       [False, False, False]])

자기 자신에 부등식을 넣으면 자기 자신에서 해당하는 항목만 뽑아낼 수 있다.

In [77]:
a[a<5]
Out[77]:
array([0, 1, 2, 3, 4])
In [78]:
a[a%2==0]
Out[78]:
array([ 0,  2,  4,  6,  8, 10])
In [79]:
a[a!=5]
Out[79]:
array([ 0,  1,  2,  3,  4,  6,  7,  8,  9, 10, 11])
In [80]:
a[a//10==1]
Out[80]:
array([10, 11])

이상치 같은경우는 이 방법을 이용하여 경계값으로 바꿔줄수 있다.

In [83]:
a[(a<2) | (a>9)] = 0  #  array끼리 '|' : or , '&' : and
a
Out[83]:
array([[0, 0, 2],
       [3, 4, 5],
       [6, 7, 8],
       [9, 0, 0]])

그래프 맛보기

In [103]:
a = np.zeros([10,10])   #numpy는 if for문을 사용하는것보다 index를 사용한다.
a[0]=1
a[-1]=1 
a[:,0]=1
a[:,-1]=1

'''
a[[0,-1]]=1
a[:,[0,-1]]=1
'''

a
Out[103]:
array([[1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],
       [1., 0., 0., 0., 0., 0., 0., 0., 0., 1.],
       [1., 0., 0., 0., 0., 0., 0., 0., 0., 1.],
       [1., 0., 0., 0., 0., 0., 0., 0., 0., 1.],
       [1., 0., 0., 0., 0., 0., 0., 0., 0., 1.],
       [1., 0., 0., 0., 0., 0., 0., 0., 0., 1.],
       [1., 0., 0., 0., 0., 0., 0., 0., 0., 1.],
       [1., 0., 0., 0., 0., 0., 0., 0., 0., 1.],
       [1., 0., 0., 0., 0., 0., 0., 0., 0., 1.],
       [1., 1., 1., 1., 1., 1., 1., 1., 1., 1.]])
In [104]:
for row in range(10):
    for col in range(10):
        if (row==0 or row==0): a[row,col]=1
        if (col==0 or col==0): a[row,col]=1
a
Out[104]:
array([[1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],
       [1., 0., 0., 0., 0., 0., 0., 0., 0., 1.],
       [1., 0., 0., 0., 0., 0., 0., 0., 0., 1.],
       [1., 0., 0., 0., 0., 0., 0., 0., 0., 1.],
       [1., 0., 0., 0., 0., 0., 0., 0., 0., 1.],
       [1., 0., 0., 0., 0., 0., 0., 0., 0., 1.],
       [1., 0., 0., 0., 0., 0., 0., 0., 0., 1.],
       [1., 0., 0., 0., 0., 0., 0., 0., 0., 1.],
       [1., 0., 0., 0., 0., 0., 0., 0., 0., 1.],
       [1., 1., 1., 1., 1., 1., 1., 1., 1., 1.]])
In [105]:
plt.imshow(a)        # 2차원 행렬을 그림으로 표현하는 함수
plt.colorbar()
Out[105]:
<matplotlib.colorbar.Colorbar at 0x53ef5772e8>
In [106]:
plt.imshow(a, cmap='gray_r')        # cmap을 이용해 색을 바꿀 수 있다
plt.colorbar()
Out[106]:
<matplotlib.colorbar.Colorbar at 0x53ef64a0f0>
In [111]:
plt.imshow(np.arange(10000).reshape(100,100))
plt.colorbar()
Out[111]:
<matplotlib.colorbar.Colorbar at 0x53f06b2cf8>
In [113]:
a = plt.imread('lucy.jpg') # 사진파일을 numpy가 array로 바꿔준다.
print(a.shape)

plt.imshow(a)
plt.title('jimin-beaty')
(367, 560, 3)
Out[113]:
Text(0.5,1,'jimin-beaty')
In [116]:
a  # (367, 560, 3)로 3차원(행,열,채널(RGB))이지만 numpy array로 불러온다.
Out[116]:
array([[[141, 126, 107],
        [141, 126, 107],
        [141, 126, 107],
        ...,
        [127, 114,  95],
        [127, 114,  95],
        [127, 114,  95]],

       [[141, 126, 107],
        [141, 126, 107],
        [141, 126, 107],
        ...,
        [128, 115,  96],
        [127, 114,  95],
        [127, 114,  95]],

       [[141, 126, 107],
        [141, 126, 107],
        [142, 127, 108],
        ...,
        [128, 115,  96],
        [128, 115,  96],
        [127, 114,  95]],

       ...,

       [[123, 111,  89],
        [123, 111,  89],
        [124, 112,  90],
        ...,
        [ 17,  31,  58],
        [ 12,  24,  50],
        [ 13,  25,  51]],

       [[122, 110,  88],
        [123, 111,  89],
        [123, 111,  89],
        ...,
        [ 17,  31,  58],
        [ 19,  31,  57],
        [ 16,  26,  51]],

       [[122, 110,  88],
        [122, 110,  88],
        [122, 110,  88],
        ...,
        [ 10,  22,  48],
        [ 16,  26,  51],
        [ 14,  24,  49]]], dtype=uint8)
In [117]:
a[:,:,0]
Out[117]:
array([[141, 141, 141, ..., 127, 127, 127],
       [141, 141, 141, ..., 128, 127, 127],
       [141, 141, 142, ..., 128, 128, 127],
       ...,
       [123, 123, 124, ...,  17,  12,  13],
       [122, 123, 123, ...,  17,  19,  16],
       [122, 122, 122, ...,  10,  16,  14]], dtype=uint8)
In [126]:
plt.imshow(a[:,:,0], cmap='Reds')
Out[126]:
<matplotlib.image.AxesImage at 0x53f1767f60>
In [127]:
plt.imshow(a[:,:,1], cmap='Greens')
Out[127]:
<matplotlib.image.AxesImage at 0x53f17c68d0>
In [128]:
plt.imshow(a[:,:,2], cmap='Blues')
Out[128]:
<matplotlib.image.AxesImage at 0x53f18272e8>

R+G+B가 합쳐져 사진이 된다.

'beginner > 파이썬 기초' 카테고리의 다른 글

NumPy_랜덤-2  (0) 2019.02.13
NumPy_랜덤-1  (0) 2019.02.12
함수와 모듈  (0) 2019.02.11
NumPy_잘라내기  (0) 2019.02.11
NumPy_기본  (0) 2019.02.08
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2026/01   »
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
글 보관함