본문 바로가기

deeplearning

1장. deeplearning에 필요한 파이썬 기본문법

728x90
반응형

책을 보기위해 필요한 파이썬 기본문법

numpy ?(p.36)

-python 언어에서 기본적으로 지원하지 않는

 배열array 혹은 행렬matrix 계산을 쉽게 해주는 라이브러리

 

-머신러닝에서 많이 사용하는 선형대수학에 관련한 수식들을

 python 에서 쉽게 프로그래밍 있게 해준다.

 

 

 

다차원 배열(p.77)

다차원 배열도 기본은 '숫자의 집합'입니다. 숫자가 줄로 늘어선 것이나

직사각형으로 늘어놓은 , 3차원으로 늘어놓은 것이나

( 일반화한) N차원으로 나열하는 것을 통틀어 다차원 배열이라고 합니다.

 

 

문제1. 아래의 행렬을 numpy 만드시오

import numpy as np

a=np.array( [[1,2],[3,4]])

print(a)

결과:

[[1 2]

 [3 4]]

 

 

 

문제2. 위의 a 행렬의 요소에 5 더한 값을 출력하시오

import numpy as np

a=np.array( [[1,2],[3,4]])

a=a+5

print(a)

[[6 7]

 [8 9]]

 

 

브로드캐스트:

넘파이에서는 형상이 다른 배열끼리도 , 계산할 있습니다.

문제에서 5라는 스칼라값이 2x2 행렬로 확대된

연산이 이뤄지는 기능을

브로드캐스트broadcast 라고 합니다.

:

a=np.array([[1,2],[3,4]])

b=np.array([10,20])

print(a*b)

경우도 1차원 배열 b 브로드캐스트 해서 a 똑같이 2x2 행렬로

확대시켜서 연산합니다

b=np.array([10,20])    b=np.array([[10,20],[10,20]])

 

 

문제3. 아래 배열된 원소들의 평균값을 출력하시오

import numpy as np

a=np.array([1,2,4,5,5,7,10,13,18,21])

print(np.mean(a))

 

 

예제

중앙값: np.median()

최대값: np.max()

최소값: np.min()

표준편차: np.std()

분산: np.var()

 

 

문제4.(점심시간문제)

아래의 행렬식을 numpy 구현하시오

1 3 7   0 0 5

         +            =  ?

1 0 0   7 5 0

 

import numpy as np

a=np.array([[1,3,7],[1,0,0]])

b=np.array([[0,0,5],[7,5,0]])

 

print(a+b)   #위아래 -왼쪽이 /오른쪽이 아래행렬로 이동.

[[ 1  3 12]

 [ 8  5  0]]

 

넘파이 배열은(np.array) N차원 배열을 작성할 있습니다.

1차원 배열, 2차원 배열, 3차원 배열처럼 원하는 차수의 배열을 만들 있습니다.

수학에서는 1차원 배열은 벡터vector, 2차원 배열은 행렬matrix 이라고 부릅니다.

벡터와 행렬을 일반화한 것을 텐서tensor 합니다.

구글의 딥러닝 프레임워크인 텐서플로의 이름이 여기서 유래했습니다.

텐서tensor 신경망을 타고 흐른다flow 뜻입니다.

 

 

 

넘파이의 산술 연산(p.37)

x=np.array([1,2,3])

y=np.array([2,4,6])

print(x+y)

print(x-y)

print(x*y)

print(x/y)

 

결과

[3 6 9]

[-1 -2 -3]

[ 2  8 18]

[ 0.5  0.5  0.5]

 

 

문제5. 위에서 만든 x y 각각 몇행 몇일인지를 38p 보고 구현하시오

x=np.array([1,2,3])

y=np.array([2,4,6])

 

x.shape

Out[37]: (3,)   --------> (1,3) 같다. 1 3      

    

y.shape

Out[39]: (3,)

 

 

문제6. 아래의 덧셈 행렬의 결과를 파이썬으로 구현하시오

1  2        10  20

      +                  = ?

3  4        30  40

 

 

문제7. 문제6번의 덧셈 행렬을 numpy 이용하지 않고 파이썬 코드로만

수행하시오 !

def hap(x,y): 

    for i in range(len(x)):  #0,1

        for j in range(len(x)):  #0,1

            print(x[i][j]+y[i][j])

       

a=([[1,2],[3,4]])

b=([[10,20],[30,40]])

hap(a,b)

 

 

문제8. 아래의 행렬곱을 numpy 구현하는데 브로드캐스트가 되는지

확인하시오 !

a=np.array([[1,2],[3,4]])

print(a*10)

 

 

문제9. 아래의 그림을 numpy 구현하시오

(브로드캐스트가 되는지 확인하시오)

1  2      

        * 10  20

3  4      

      브로드캐스트 하면?

1  2   10  20

      *

3  4   10  20

 

 

a=np.array([[1,2],[3,4]])

b=np.array([[10,20]])

print(a*b)

 

[[10 40]

 [30 80]]

 

 

 

문제10. 문제9번을 넘파이 이용하지 말고 구현해보시오

a=[[1,2],[3,4]]

b=[10,20]

for i in range(len(a)):

    for j in range(len(a)):

        print(a[i][j]*b[j])

10

40

30

80

***결과가 답도 맞지만, 브로드캐스트 라는 개념에 맞게 문제를 풀려면

     b=b*2  해야 한다

a=[[1,2],[3,4]]

b=[[10,20]]

b=b*2

for i in range(len(a)):

    for j in range(len(a)):

        print(a[i][j]*b[i][j])

 

b=[[10,20]]

print(b*2)

[[10, 20], [10, 20]]

 

 

원소접근(p40)

문제11. 넘파이를 이용하지 않고

아래의 행렬식을 만들고 아래의 행렬의 요소에서 15 이상인

출력하시오 !

51  55 

14  19

0    4

결과: [51, 55, 19]

 

a = [ [51,55] , [14,19], [0,4] ]

b=[]

 

for i in range(len(a)):

    for i2 in range(len(a[i])):

        if a[i][i2] >= 15:

            b.append(a[i][i2])

print(b)

 

문제12. 문제11번을 넘파이로 구현하시오

import numpy as np

a=np.array([[51,55],[14,19],[0,4]])

print(a[a>=15])   #인덱스가 15 이상인 원소 얻기

신경망 구현때 자주 쓰는 코드니까 알아둘

 

matplotlib

딥러닝 실험에서는 그래프 그리기와 데이터 시각화가 중요하다

matplotlib 그래프를 그리기 위한 라이브러리다

matplotlib 이용하면 그래프를 그리기가 쉬워진다

 

예제1:

import matplotlib.pyplot as plt

plt.plot([1,2,3,4,5,6,7,8,7,6,5,4,3,2,1,0])

plt.show()

 

예제2:

넘파이 배열을 이용해서 그래프 그리기

import matplotlib.pyplot as plt

import numpy as np

t=np.arange(0,12,0.01)

print(t)

 

[  0.00000000e+00   1.00000000e-02   2.00000000e-02 ...,   1.19700000e+01

   1.19800000e+01   1.19900000e+01]

arange: 0~12 까지 0.01 만큼 증가하라

 

문제13. 위의 그래프에 grid(격자) 추가하시오

 

import matplotlib.pyplot as plt

import numpy as np

t=np.arange(0,12,0.01)

 

plt.plot(t)

plt.grid()

plt.show()

 

문제14. 아래의 그래프를 그리시오

import matplotlib.pyplot as plt

plt.plot([6,4,2,0,2,4,6],color='red')

plt.show()

 

 

화면 캡처: 2019-01-07 오후 3:33

 

 

 

 

문제15. 아래의 그래프를 그리시오!

import matplotlib.pyplot as plt

plt.plot([6,8,8,6,8,8,6],color='red')

plt.show()

 

 

 

문제16. 문제14 코드와 문제15 코드를 조합해서 아래의 그래프를 그리시오

 

 

import matplotlib.pyplot as plt

plt.plot([6,8,8,6,8,8,6],color='red')

plt.plot([6,4,2,0,2,4,6],color='red')

plt.show()

 

 

 

문제17. 위의 그래프에 제목을 아래와 같이 붙이시오

 

 

import matplotlib.pyplot as plt

from matplotlib import font_manager, rc

 

#한글폰트설정

font_name = font_manager.FontProperties(fname="C:/Windows/Fonts/H2PORM.TTF").get_name()

rc('font', family=font_name)

 

plt.plot([6,8,8,6,8,8,6],color='red')

plt.plot([6,4,2,0,2,4,6],color='red')

plt.grid()

plt.title("재혁이를 향한 우용이의 마음")

plt.show()

 

 

 

문제18. 아래의 넘파이 배열로 산포도 그래프 그리시오!

 

import numpy as np

import matplotlib.pyplot as plt

 

x=np.array([0,1,2,3,4,5,6,7,8,9])

y=np.array([9,8,7,9,8,3,2,4,3,4])

 

plt.scatter(x,y)

plt.show()

 

 

문제19. 위의 산포도 그래프를 라인 그래프 그리시오

import numpy as np

import matplotlib.pyplot as plt

 

x=np.array([0,1,2,3,4,5,6,7,8,9])

y=np.array([9,8,7,9,8,3,2,4,3,4])

plt.plot(x,y)

plt.show()

 

 

문제20. 위의 plot그래프에 x축의 라벨을 '' 이라고 하고

y축의 라벨을 '아파트 매매 가격' 이라고 하고

제목을 '아파트 매매 가격 변동 추이" 라고 하시오

 

import numpy as np

import matplotlib.pyplot as plt

from  matplotlib import   font_manager, rc

 

# 한글 폰트 설정

font_name = font_manager.FontProperties(fname="C:/Windows/Fonts/H2PORM.TTF").get_name()

rc('font', family=font_name)

 

x=np.array([0,1,2,3,4,5,6,7,8,9])

y=np.array([9,8,7,9,8,3,2,4,3,4])

 

plt.plot(x,y)

plt.title("아파트 매매 가격 변동 추이")

plt.xlabel("")

plt.ylabel("아파트 매매 가격")

plt.show()

 

 

 

문제21. 치킨집 창업현황을 라인그래프로 시각화 하시오

 

import numpy as np

from matplotlib import pyplot as plt

from matplotlib import font_manager, rc

   

# 한글 폰트 설정

font_name = font_manager.FontProperties (fname="C:/Windows/Fonts/H2PORM.TTF").get_name()

rc('font', family=font_name)

 

 

chi = np.loadtxt('D:\\data\\창업건수.csv', skiprows=1,

                  unpack=True, delimiter=',')

 

# skiprows: 1번째 스킵해라

# 설명 : unpack = False   csv 파일을 그대로 읽어오는것이고

#             unpack = True csv 파일을 pivot 해서 읽어오는것이다

 

print( chi )

 

x = chi[0]

y = chi[4]

 

plt.plot(x,y)

plt.xlabel('년도')

plt.ylabel('치킨집 창업건수')

plt.title('년도별 치킨집 창업 현황')

plt.show()

 

 

 

문제22. 치킨집 폐업현황을 라인그래프로 시각화 하시오

 

 

 

문제23. 위의 두개의 그래프를 겹치게 해서 출력하시오

 

 

import numpy as np

from matplotlib import pyplot as plt

from matplotlib import font_manager, rc

   

# 한글 폰트 설정

font_name = font_manager.FontProperties (fname="C:/Windows/Fonts/H2PORM.TTF").get_name()

rc('font', family=font_name)

 

 

chi = np.loadtxt('D:\\data\\폐업건수.csv', skiprows=1,

                  unpack=True, delimiter=',')

chi1 = np.loadtxt('D:\\data\\창업건수.csv', skiprows=1,

                  unpack=True, delimiter=',')

 

# 설명 : unpack = False   csv 파일을 그대로 읽어오는것이고

#        unpack = True csv 파일을 pivot 해서 읽어오는것이다

 

#print( chi )

 

x = chi[0]

y = chi[4]

x1 = chi1[0]

y1 = chi1[4]

 

#plt.figure(figsize=(6,4))

 

plt.plot(x,y)

plt.plot(x1,y1)

plt.xlabel('년도')

plt.ylabel('치킨집 창업,폐업건수')

plt.title('년도별 치킨집 현황')

plt.show()

 

다른방법(legend 나오게 하는거)

        

import numpy as np

from matplotlib import pyplot as plt

from matplotlib import font_manager, rc

   

# 한글 폰트 설정

font_name = font_manager.FontProperties (fname="C:/Windows/Fonts/H2PORM.TTF").get_name()

rc('font', family=font_name)

 

 

chi = np.loadtxt('D:\\data\\폐업건수.csv', skiprows=1,

                  unpack=True, delimiter=',')

chi1 = np.loadtxt('D:\\data\\창업건수.csv', skiprows=1,

                  unpack=True, delimiter=',')

 

# 설명 : unpack = False   csv 파일을 그대로 읽어오는것이고

#        unpack = True csv 파일을 pivot 해서 읽어오는것이다

 

#print( chi )

 

x = chi[0]

y = chi[4]

x1 = chi1[0]

y1 = chi1[4]

 

#plt.figure(figsize=(6,4))

 

plt.plot(x,y, label='폐업')

plt.plot(x1,y1, label='창업')

plt.legend()

 

plt.xlabel('년도')

plt.ylabel('치킨집 창업폐업건수')

 

plt.title('년도별 치킨집 현황')

 

plt.show()

 

 

 

 

동그라미 부분이 legend 써서 나오는 부분

 

 

 

 

문제24. 44페이지의 레나 사진을 파이썬으로 구현하시오

import matplotlib.pyplot as plt

from matplotlib.image import imread

 

img = imread('D:\\lena.png')       

plt.imshow(img)

plt.show()

 

 

 

문제25.(오늘의 마지막 문제)

한식집의 창업과 폐업건수를 라인그래프로 시각화 하시오

 

import numpy as np

from matplotlib import pyplot as plt

from matplotlib import font_manager, rc

   

# 한글 폰트 설정

font_name = font_manager.FontProperties (fname="C:/Windows/Fonts/H2PORM.TTF").get_name()

rc('font', family=font_name)

 

 

chi = np.loadtxt('D:\\data\\폐업건수.csv', skiprows=1,

                  unpack=True, delimiter=',')

chi1 = np.loadtxt('D:\\data\\창업건수.csv', skiprows=1,

                  unpack=True, delimiter=',')

 

# 설명 : unpack = False   csv 파일을 그대로 읽어오는것이고

#        unpack = True csv 파일을 pivot 해서 읽어오는것이다

 

#print( chi )

 

x = chi[0]

y = chi[6]

x1 = chi1[0]

y1 = chi1[6]

 

#plt.figure(figsize=(6,4))

 

plt.plot(x,y, label='폐업')

plt.plot(x1,y1, label='창업')

plt.legend()

 

plt.xlabel('년도')

plt.ylabel('한식집 창폐업 건수')

 

plt.title('년도별 한집 현황')

 

plt.show()

 

 

 

 

 

728x90
반응형