*Numpy random 함수 사용 :


*Numpy Array 사용법:

1차원 배열 : 

x= [1,2,3,4]


2차원 배열:
x = [[1,2,3], [4,5,6]]


3차원 배열:

x = [[[[1,2,3][4,5,6],[7,8,9]],[[1,7,8],[3,5,6]]]



*Numpy Array 생성 방법








*Numpy Array 인덱싱 :

a = 1    2    3    4

5    6    7    8

9    10    11    12


위에서 파란색 음영 표시된 부분은 :


b = a[:2, 1:3]

        행 , 열

(상세설명 : 0부터 2행까지, 1열부터 3열 전까지)

b[0,0] = 77


위에서 2가 77로 바뀐다.




1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import numpy as np
 
#Create the following rank 2 array with shape(3,4)
#[[1,2,3,4],
#[5,6,7,8],
#[9,10,11,12]]
 
= np.array([[1,2,3,4],[5,6,7,8], [9,10,11,12]])
 
 
#슬라이싱을 이용하여 첫 두행과 1열, 2열로 이루어진 부분배열을 만들어봅시다.
#b는 shape가 (2,2)인 배열이 됩니다.
#[[2,3],
#[6,7]]
= a[:2,1:3]
 
#슬라이딩된 배열은 원본 배열과 같은 데이터를 참조합니다. 즉 슬라이싱된 배열을 수정하면
#원본 배열 역시 수정됩니다.
print(a[0,1]) #출력 2
b[0,0= 77 #b[0,0]은 a[0,1]과 같은 데이터입니다.
print(a[0,1])
cs





*배열 슬라이싱 : 

a[1, :] = [5,6,7,8]

a[1:2, :] = [[5,6,7,8]]




사진




*불리언 배열 인덱싱 :

=> False 만 제외하고 모두 1줄로 출력한다. [3,4,5,6]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import numpy as np
a=np.array([[1,2],[3,4],[5,6]])
 
 
bool_idx=(a>2)
 
print(bool_idx)
#출력 [[false false]
#출력 [true true]
#출력 [true true]]
 
print (a[bool_idx])
 
#위에서 한 모든것을 한문장으로 할 수 있다
print(a[a>2])
 

cs



*Data 형변환 :




*Python If 사용법


if 조건문1:

  내용

elif  조건문2:

  내용

else:

   내용


*Python For 사용법 

for 변수 in 순서자료 :
  내용


ex) :

list = [1,2,3,4]
for i in list :
  print(i)






*Range로 반복 실행



*While 문 실행 :


*Random 숫자를 입력 받아 맞추는 소스코드 :



*함수 사용법


함수에는 Scope이 있다

- local, global, non-local


Recursion(재귀호출)

Lamda expression(람다 expression)

=> in-line 정의의 익명의 작은 함수

Generator 함수 : 사용자 정의 iterator 정의하는 함수

Decorator 함수 :  함수도 클래스로서 변수에 할당되거나 인자로서 정의될 수 있음


Ex)



*File 입출력 :

f= open('somefile.txt', 'w')

f.write('hello')

f.close()


f=open('somefile.txt', 'r')

f.read()


=> r 읽기

=> w 쓰기

=> a append

=> b binary

=> + read/write





*OOP 개념


- Class와 Object

=> Class = 설계도(사용자 정의 객체의 프로토타입)

=> Object = 기능+데이터


- 특징

=> encapsulation

=> polymorphism

=> inheritance




*Exception 처리 :







*데이터 분석용 주요 package


- iPython (python과 유사)

- numpy(수학분야)

- matplotlib(시각화)

- scipy(과학분야에서 활용)

- pandas(데이터 구조 및 다양한 분석방법 제공)


*Python 특징

-인터프리터 언어(소스코드를 바로 실행하는 환경)

- 객체지향적

- Interaction 한 언어

- Scripting언어 : 일반언어와 성능 /기능 차이가 별로 없음

- 수학적 개념이 녹아들어가 있음

- 비교적 간결, 다양한 알고리즘 적용 가능, 객체 지향개념 적용

- 배우기 쉽고, 가독성이 좋고, 유지보수성이 좋다.


*Python 종류 

- Python, Cpython은 같은것

  => C/C++ 로 작성

  => 2.7버전 : 2010년대 중반

  => 3.7 버전 : 2010년대 초반 이후 계속 발전

  => 2.7과 3.7 버전의 호환성이 깨져있다는 단점이 있다.

- Jython : JVM을 이용한 자바로 작성한 파이썬, 자바환경에서 사용

- IronPython : C#을 이용한 닷넷 환경으로 작성한 파이썬





*Python 활용 영역

- 시스템 유틸리티 작성

- GUI 프로그래밍

- C/C++과 연동 용이

- Web Programming

- 수치여난 프로그래밍

- 데이터베이스 프로그래밍

- 데이터 분석

- 사물 인터넷


*기본환경

- Python Interactive Shell - IDLE(GUI & CUI)

- 확장

=> PyDev with Eclipse

=> Pycharm

=> Komodo

=> Emacs

=> Vim

=> Text Mate

=> Gedit 등

- 웹브라우저 환경

=> IPython(3.0이상은 Jupiter)



*Python 설치 : 

https://www.python.org/downloads/release/python-365/


Windows x86-64 executable installer

로 설치



*Numpy 및 jupyter 설치


>>> pip install numpy

>>> pip install jupyter





*Jupyter Notebook 실행

>>> jupyter notebook




(Shift + Enter) 로 Run 실행 가능




*Python Data type :


- 수치형 (ex: 1, 2, -12)

- 문자형 (ex: "Hello", """long text""")

- List [1,2,3,4,5] , ['a', 'b', 'c', 'd', 'e']

=> x=[1,2,3,4]

     x[0] = 1

     x[-1] = 4

     x[1:-1] = 2, 3

     x[:3] = 처음부터 index 3까지

     x[3:]

- Tuple (1,2,3,4)

=> tuple은 immutable 하다(변경될 수 없다. 사용법은 list와 동일)

=> y=(1,2,3,4)

     y[0]

- Dictionary {kye:value, key2:value}

=>Z={"a": "apple", "b": "banana"}

     z["a"] = "apple"

     z["b"] = "banana"

 




*Python Function & Module 사용예제 :





1. 인공 지능과 인공지능 연구의 역사 :


- Environment =? cybernetics(1920-1950)

- Mind(= computer) => Symbolic AI(1950- 1980)

- Brain => Neural Nets(ML) (1980-2010)

- Body=>embodied mind, mind machine => Autonomous Robots(2010~`)


Symbolic AI vs Machine Learning

(기호.논리)       연결성(Neural Network)

                     ML에서 성능을 내기 위한 Source는 Big Data + 좋은 H/W 성능

                     이 필요하다.


*인공지능의 발전 :

Mind: Symbolic AI 

- 1997년 IBM Chess machine Deep Blue

- chatbots(Cornell Univ)


Body : Physical AI

- Humanoid Robot Nao

- Personal Robot PR2(willow Garage)

- Robot roommate shopping for and preparing bavarian breakfast

- Delivery Robots Bots


Embodied Mind

- Smart Speakers


AI가 왜 갑자기 Hot하게 됐는가?
- Machine Learning 알고리즘들이 학자들에 의해 잘 정립이 되었고

- Big Data와 Computing Power(H/W)가 맞물리면서 급속도로 발전하게됨


CNN 기반 얼굴인식 시스템이 지배적이다(?)




2. Deep Learning

모라벡의 역설(Moravec's Paradox)


- 인공지능. 로봇공학 연구자에 따르면 고등 추론에는 연산 능력이 거의 필요 없는 반면,

- 낮은 수준의 감각운동 기능은 엄청난 연산 자원이 필요.

- "어려운 문제는 쉽고 쉬운 문제는 어렵다"


*Deep Learning 의 활용

- Youtube 자동 음석 번역

- Netflix의 영화추천

- Facebook의 feed 추천

- 알파고

- 구글의 검색 결과


*CNN

- 물체들을 추상화하는 과정을 거친다


*RNN :
관련알고리즘 : LSTM, GRU

Image Narration using LSTM

자연어처리에도 많이 사용한다.



*test라는 이름으로 Kubernetes Namespace 생성 및 리소스 사용 : 


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
[root@host01-4 hk]# k create ns test
namespace "test" created
[root@host01-4 hk]# k get ns
NAME          STATUS    AGE
default       Active    6h
kube-public   Active    6h
kube-system   Active    6h
test          Active    4s
[root@host01-4 hk]# ls -l
total 974676
-rw-------1 root root  50727424 May 25 10:21 dns-kube-dns
-rw-------1 root root  42481152 May 25 10:21 dns-sidecar
-rw-r--r--1 root root       158 May 25 16:18 endpoint.yaml
-rw-------1 root root 193461760 May 25 10:21 etcd-amd64
-rw-r--r--1 root root       362 May 25 12:17 hk.yaml
-rw-------1 root root  41239040 May 25 10:21 k8s-dns
-rw-r--r--1 root root       343 May 25 10:21 kubeadm.host08-1.root.log.INFO.20180525-060140.2620
-rw-r--r--1 root root       343 May 25 10:21 kubeadm.INFO
-rw-------1 root root 225319936 May 25 10:21 kube-apiserver
-rw-------1 root root 148110336 May 25 10:21 kube-controller
-rw-------1 root root  98924032 May 25 10:21 kube-proxy
-rw-------1 root root  50635776 May 25 10:21 kube-scheduler
-rw-r--r--1 root root       715 May 25 13:45 multi.yaml
-rw-r--r--1 root root       185 May 25 16:48 nodePort.yaml
-rw-r--r--1 root root       162 May 25 17:03 probe.yaml
-rw-r--r--1 root root       410 May 25 17:06 rc-probe.yaml
-rw-r--r--1 root root       302 May 25 15:51 rc.yaml
-rw-r--r--1 root root         0 May 25 15:53 service.yalm
-rw-r--r--1 root root       162 May 25 15:55 service.yaml
-rw-r--r--1 root root       322 May 25 14:11 temp.yaml
-rw-r--r--1 root root      2336 May 25 12:06 temp.yarm
-rw-r--r--1 root root        88 May 25 16:13 test-svc-h1.yaml
-rw-------1 root root  99517952 May 25 10:21 weave-kube
-rw-------1 root root  47575552 May 25 10:21 weave-npc
[root@host01-4 hk]# k create -f rc.yaml -n test
replicationcontroller "simple-rc" created
[root@host01-4 hk]# k get rc -n test
NAME        DESIRED   CURRENT   READY     AGE
simple-rc   3         3         3         9s
[root@host01-4 hk]#
[root@host01-4 hk]# k describe ns test
 
cs





LB > Node Port > Cluster IP


Node Port를 만들면 Cluster IP가 자동으로 만들어진다


*SVC 지우기

1
2
3
4
5
6
7
8
9
[root@host01-4 hk]# k get service
NAME           TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)   AGE
headless-svc   ClusterIP   10.96.102.169   <none>        80/TCP    27m
kubernetes     ClusterIP   10.96.0.1       <none>        443/TCP   48m
test-svc       ClusterIP   10.96.25.31     <none>        80/TCP    45m
[root@host01-4 hk]# k delete svc test-svc
service "test-svc" deleted
[root@host01-4 hk]#
 
cs


*NodePort 생성하기(생성뒤에 해당 Port로 curl을 날릴 수 있다) : 

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
vi NodePort.yaml
 
apiVersion: v1
kind: Service
metadata:
  name: test-svc
spec:
        type: NodePort
        selector:
          type: test
        ports:
        - port: 80
          targetPort: 8080
 
 
[root@host01-4 hk]# k create -f nodePort.yaml
 
service "test-svc" created
[root@host01-4 hk]#
[root@host01-4 hk]# k get svc
NAME           TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
headless-svc   ClusterIP   10.96.102.169   <none>        80/TCP         31m
kubernetes     ClusterIP   10.96.0.1       <none>        443/TCP        52m
test-svc       NodePort    10.107.213.48   <none>        80:32045/TCP   6s
 
 
#NodePort에서 80포트는 cluster IP port이고 32045는 Node Port
 
 
cs


*Load Balancer 생성

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
k edit svc test-app
 
# Please edit the object below. Lines beginning with a '#' will be ignored,
# and an empty file will abort the edit. If an error occurs while saving this file will be
# reopened with the relevant failures.
#
apiVersion: v1
kind: Service
metadata:
  creationTimestamp: 2018-05-25T07:44:57Z
  name: test-svc
  namespace: default
  resourceVersion: "29844"
  selfLink: /api/v1/namespaces/default/services/test-svc
  uid: 85b2c6ea-5fef-11e8-8e09-005056b28b62
spec:
  clusterIP: 10.107.213.48
  externalTrafficPolicy: Cluster
  ports:
  - nodePort: 32045
    port: 80
    protocol: TCP
    targetPort: 8080
  selector:
    type: test
  sessionAffinity: None
  type: LoadBalancer            #LoadBalancer로 수정해주면...
status:
  loadBalancer: {}
 
 
[root@host01-4 hk]# k get svc
NAME           TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
headless-svc   ClusterIP      10.96.102.169   <none>        80/TCP         38m
kubernetes     ClusterIP      10.96.0.1       <none>        443/TCP        59m
test-svc       LoadBalancer   10.107.213.48   <pending>     80:32045/TCP   7m  #Node Port에 Cluster IP까지 자동 
[root@host01-4 hk]#
 
cs


상위 네트워크 모듈을 생성하면 하위 매핑 정보는 알아서 구성하게 됨




*TargetPort 설정 이유


1
2
3
4
5
6
7
 
  ports:
  - nodePort: 32045
    targetPort: 8080
 
 
 
cs


=> Cluster의 port와 pod Port 정보가 다르기 때문



*비즈니스 관점에서 Probe가 정상적으로 동작하는지 여부를 체크할 수 있어야 한다....


Client가 접속한다!!

Svc > Pod(X)

정상동작 X 다고 생각하게 된다.

이때 readinessProbe를 활용하면 cluster 정상동작 여부를 체크할 수 있다 :

1
2
3
4
5
6
7
8
9
      containers:
      - image: reg.cloud.com/kubia
        name: kubia
        readinessProbe:
          exec:
            command:
            - ls
            - /var/ready
 
cs


*ReadinessProbe 생성 예제 :


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
100
101
102
103
104
105
106
#vi rc-probe.yaml 
# /var/ready가 pod 안에 있으면 probe에서 통과 시킨다(Ready 상태로 만들어줌)
apiVersion: v1
kind: ReplicationController
metadata:
  name: rc-readiness
spec:
  replicas: 3
  template:
    metadata:
      labels:
        type: test
    spec:
      containers:
      - image: reg.cloud.com/kubia
        name: kubia
        readinessProbe:
          exec:
            command:
            - ls
            - /var/ready
        ports:
        - containerPort: 8080
          protocol: TCP
 
 
#vi service.yaml
 
apiVersion: v1
kind: Service
metadata:
  name: test-svc
spec:
        selector:
          type: test
        ports:
        - port: 80
          targetPort: 8080
 
 
 
[root@host01-4 hk]# k create -f rc-probe.yaml
 
replicationcontroller "rc-readiness" created
[root@host01-4 hk]# k get po -o wide
NAME                 READY     STATUS    RESTARTS   AGE       IP          NODE
rc-readiness-22hxs   0/1       Running   0          10s       10.36.0.2   host01-3.cloud.com
rc-readiness-2pt29   0/1       Running   0          10s       10.44.0.1   host01-2.cloud.com
rc-readiness-h74t2   0/1       Running   0          10s       10.36.0.1   host01-3.cloud.com
 
 
#Running 상태이지만 Ready가 아무것도 없다
 
 
 
[root@host01-4 hk]# k create -f service.yaml
service "test-svc" created
[root@host01-4 hk]# k get svc
NAME         TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)   AGE
kubernetes   ClusterIP   10.96.0.1     <none>        443/TCP   6m
test-svc     ClusterIP   10.98.99.22   <none>        80/TCP    4s
[root@host01-4 hk]# k get ep
NAME         ENDPOINTS          AGE
kubernetes   10.10.12.14:6443   6m
test-svc                        9s
 
 
#Endpoint가 아무것도 안 떠있다.
 
[root@host01-4 hk]# k exec rc-readiness-22hxs -- touch /var/ready
 
#1번 pod에 /var/ready를 만들어준다 (Ready 상태로 만들어주기 위해)
 
[root@host01-4 hk]# k get ep
NAME         ENDPOINTS          AGE
kubernetes   10.10.12.14:6443   8m
test-svc     10.36.0.2:8080     1m
 
#test-svc의 ENDPOINT가 enabled된다
 
[root@host01-4 hk]# k get svc
NAME         TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)   AGE
kubernetes   ClusterIP   10.96.0.1     <none>        443/TCP   8m
test-svc     ClusterIP   10.98.99.22   <none>        80/TCP    1m
 
[root@host01-4 hk]# k get po -o wide
NAME                 READY     STATUS    RESTARTS   AGE       IP          NODE
rc-readiness-22hxs   1/1       Running   0          4m        10.36.0.2   host01-3.cloud.com
rc-readiness-2pt29   0/1       Running   0          4m        10.44.0.1   host01-2.cloud.com
rc-readiness-h74t2   0/1       Running   0          4m        10.36.0.1   host01-3.cloud.com
 
#1번 Pod가 Ready 상태로 바뀐다
 
 
[root@host01-4 hk]# k exec rc-readiness-2pt29 -- touch /var/ready
[root@host01-4 hk]# k get po -o wide
NAME                 READY     STATUS    RESTARTS   AGE       IP          NODE
rc-readiness-22hxs   1/1       Running   0          5m        10.36.0.2   host01-3.cloud.com
rc-readiness-2pt29   1/1       Running   0          5m        10.44.0.1   host01-2.cloud.com
rc-readiness-h74t2   0/1       Running   0          5m        10.36.0.1   host01-3.cloud.com
 
#2번 Pod Ready 상태로 바뀐다
 
 
 
 
cs






+ Recent posts