Description
Lecture 3
가상환경조성및 Numpy, Matplotlib
Jung-Il Choi
Contents
• 가상환경조성(Virtual environments)
Python은다양한패키지와모듈을사용하여프로그래밍을하는 Interpreter 언어 패키지와모듈의셋업과사용법을익히는것이중요!
• 패키지와모듈
Numpy
Matplotlib
• 가상환경조성의필요성
Python은다양한모듈과패키지를활용하여프로그래밍을하는인터프리터언어이다.
개별프로그래밍에필요한모듈과패키지는다른영역에서개발되고있으며, 상황에따라원하는 모듈과패키지에따라서서로 Version이안맞아충돌하는경우가생긴다.
특정프로젝트를수행함에있어서개별환경을조성하여, 패키지를관리하여야한다.
본수업에서는 Anaconda3 파이썬배포판을위주로설명한다.
• 가상환경조성
Anaconda Prompt 실행 ( > conda search python을입력하면아나콘다에서지원하는 Python 버전 을확인할수있다.)
• 가상환경조성
“>conda create –name (or –n) 가상환경이름 python = 버전” 을통해가상환경을만들수있다.
Ex) conda create –n python_class python=3.9
Anaconda3를이용하지않고직접필요한 Python 버전을깔아환경을조성할수있다.
• (python version 3 > ) “<python –m venv 가상환경이름”
• 가상환경조성
“> conda env list” 를통해현재만들어져있는가상환경의목록을볼수있다.
마찬가지로, “>conda env remove –name(or –n) 가상환경이름” 을통해만든가상환경을제거할수 있다.
Ex) conda env remove python_class
“>conda activate 가상환경이름”을통해구축한가상환경을활성화할수있다.
“>conda deactivate”을통해가상환경에서나갈수있다.
• 가상환경조성
가상환경구축이완료되었다면, 필요한라이브러리목록을설치해야한다. 가상환경에서의라이 브러리설치는 “pip” 을이용한다.
“pip”을이용하기전에 “>pip install –upgrade pip”으로 pip을최신버전으로유지한다.
“>pip –version”을통해버전을확인할수있다.
“>pip install 라이브러리이름”을통해필요한라이브러리를가상환경내에서설치할수있다.
Ex) pip install numpy scipy matplotlib
• 가상환경조성
“>conda list” 또는 “>pip list”를통해가상환경내에 설치한라이브러리목록을확인할수있다.
“>conda remove 라이브러리이름”을통해설치한 라이브러리를삭제할수있다.
원하는라이브러리를모두설치하면가상환경조 성이완료된다.
• 가상환경조성
조성한가상환경을그대로다른가상환경에서적용하고싶다면
“>conda env export > conda_requirements.txt” 를통해설치한패키지 목록을저장할수있다.
conda_requirements.txt는가상환경을활성화한폴더에만들어진다.
“>conda env create –f conda_ requirements.txt” 를이용하면동일한가 상환경을구축할수있다.
“>pip freeze > requirements.txt”를통해 pip을통해 install한패키지목 록만따로저장할수있다.
단, python 버전은따로표기가되지않기때문에, python 버전을따로명시해 줄필요가있다.
“>pip install –r requirements.txt를통해동일한환경을구축할수있다.
• 가상환경조성
구축한가상환경을 Jupyter notebook에서실행하려면먼저가상환경내에 jupyter notebook을설치 해야한다.
“>pip install jupyter notebook”
이후가상환경을 Kernel에연결한다.
“>python –m ipykernel install –user –name 가상환경이름 –display-name 커널명”
Ex) >python –m ipykernel install –user –name python_class
커널명은 jupyter notebook과연동시표기되는이름이므로 “–display-name 커널명” 은생략해도무방하다.
이후 Jupyter notebook을실행하고, new 탭에서연결한가상환경을선택하면연동이완료된다.
• 패키지와모듈정의
모듈
모듈은파이썬코드파일. 즉, .py 확장자를가진파일을말한다. 모듈은관련함수, 변수및클래스의집합을포함할수있
다. 다른파이썬스크립트에서코드를재사용할목적으로만든다.
패키지
패키지는모듈의계층적인구성을지원한다. 패키지는하나이상의모듈을포함할수있으며, 패키지에는 __init__.py 파 일이있고, 패키지는관련된모듈을그룹화하여더큰프로젝트를구성하는데사용된다.
라이브러리
라이브러리는여러모듈및패키지의모음이다. 많은프로그래밍언어에서라이브러리는기본제공되며, 이는표준라이 브러리(Standard library)라고한다. 또한, 사용자가작성한코드를라이브러리형태로공유할수도있다.
11 / 34
• 패키지와모듈불어오기
사용하려는패키지또는모듈을선언하는기본적인형태
Ex)
라이브러리에있는모든패키지/모듈선언하기
이렇게라이브러리에서직접패키지와모듈을선언하면편리하지만추후코드가길어지고선언하는라이브러리가증가하면변수/함수명 선언에충돌이발생할수있다. (Name conflicts)
Prefix를써서불러오는형태가선호된다.
• Numpy
기본적인과학계산패키지
배열(Array) 자료형을이용한수치계산최적화
각종선형대수, 푸리에변환, 난수관련모듈
다른과학계산패키지와의연동이편리 ( ex) Scipy )
오픈소스(무료)
• Numpy
필요한모듈/함수가있으면, User Guide를적극참조
배열생성하기
“[start, ] : default 값존재 (0), [step, ] : default 값존재 (1), [start, stop) half-open 구간에서일정한간격(step)의배열생성”
“num : default 값존재 (50), [start, stop] closed 구간에서일정한간격의 (num)개의배열생성”
• Numpy
배열생성하기
N-dimensional 배열(행렬)도생성가능
필요한 Attribute ( ex) .shape) 가있으면 User Guide 적극참조
(https://numpy.org/doc/stable/reference/generated/numpy.ndarray.html)
모든원소가 0인𝑛𝑛 × 𝑚𝑚행렬생성 𝑛𝑛 × 𝑛𝑛대각행렬생성 모든원소가 1인𝑛𝑛 × 𝑚𝑚행렬생성 단위𝑛𝑛 × 𝑛𝑛행렬생성
• Numpy
난수생성하기
https://numpy.org/doc/stable/reference/random/generated/numpy.random.normal.html
[0, 1] 사이의난수를 2X3 행렬로생성 Mean이 1이고 Std가 2인정규분포에서난수를 2X2 행렬로생성
I/O (default는표준정규분포)
• Numpy
Arithmetic operators : elementwise application
2개의배열을계산할때, Numpy는 shape을비교하여계산의성립여부를먼저조사한다.
대수계산이성립하려면,
배열의 Shape이같을때,
배열의 Shape이다르지만, 둘중하나가 1차원배열이고사이즈가다른하나의행/열중하나와같을때
둘다 1차원배열이고, 행/열 Shape이다를때 (즉 , 1×𝑛𝑛과𝑚𝑚×1) N-dimensional 배열과 1개상수
• Numpy
배열에상수에대한 Arithmetic operator를적용하면모든 element에모두적용된다.
• Numpy
Vector operators
Inner product (np.inner(u, v))
Outer product (np.outer(u, v))
Matrix multiplication (np.dot(A, B))
• Numpy
• Numpy
Slicing
Python의 indexing은 0부터시작한다
A[row, column]
start:stop은 Half-open 구간 [start:stop)을카운트한다.
Iterating order
Python에서는 C와동일하게 I, J, K 순서로메모리에접근한다
• Numpy
그밖의유용한함수및속성(Attribute)들
“np.where(“array | condition”) : 배열내에서조건에맞는자료의인덱스를반환한다.
Ex) np.where(array>value) : array 내부에서 value보다값이큰수들의인덱스를저장한다.
“np.array(List, dtype=float)” : 리스트를배열로전환
“array.tolist()” : 배열을리스트로전환
“np.append(array, value)” : 배열끝에값추가
“array.astype(dtype)” : 배열원소의데이터타입변환
(정수 = int, 실수 = float, 복소수 = complex)
“np.column_stack((array1, array2))” : array1, array2를 Column 방향으로합친다.
“np. row_stack((array1, array2))” : array1, array2를 Row 방향으로합친다.
“np.linalg.inv(2d_square_array)” : 정사각행렬의역행렬을구한다.
And so on…
• Matplotlib
다양한자료를시각화할수있는 Matplotlib 라이브러리
rcParams를이용한그래프옵션설정
Figure(Canvas) 크기설정 [가로, 세로]
Figure 내글씨크기설정
Figure 내글씨체설정
LaTeX 사용여부
그래프상자선두께설정
그래프내부선두께설정(추후조정가능)
그래프눈금방향설정(x, y)
그래프눈금 Major/Minor 설정여부및길이/두께설정
그래프눈금 (위/아래) 추가설정
기호 표식자 기호 표식자
^ 삼각형 v 역삼각형
> 오른쪽삼각 형 < 왼쪽삼각형
o 원 s 사각형
p 오각형 h 육각형
D 마름모 8 팔각형
+ 더하기기호 x 곱하기기호
. 작은점 * 별표
• Matplotlib
“mec” : 표식자테두리색, “mfc” : 표식자내부색, “ms” : 표식자크기
https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.plot.html
• Matplotlib
간단한선그래프
로그스케일로그래프를그릴때,
방법 1
방법 2
• Matplotlib
2개이상의그래프동시에그리기 (같은 Figure 안에)
“plt.axhline() : 수평선그리기”
“plt.axvline() : 수직선그리기”
“plt.plot(x, y, label=‘’)” → “plt.legend()” : 범례추가하기 (위치, 폰트사이즈등수정가능)
“plt.savefig(‘filename”) →그래프저장하기 https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.legend.html
• Matplotlib
2개이상의그래프동시에그리기 (다른여러개의 Figure)
그래프여러개를그리는방법은다양하다.
기본적으로 “plt.subplot()”을이용한다.
“plt.figure(id, figsize=(가로, 세로 (inch)))”
먼저그래프를그릴 Canvas의크기지정한다
“plt.subplot(000)”
앞 00으로총 Canvas를나눈다.
뒤 0로그래프를위치시킬순서를지정한다.
• Ex) 121 이면세로 1개가로 2개에첫번째라는의미
• Matplotlib
2개이상의그래프동시에그리기 (다른여러개의 Figure) 다른방식으로도가능하다.
“sharex, sharey”
• 축공유
Axs의속성으로그래프를그릴경우 • “set_”를붙이는경우가있으니주의
• User Guide 참조
https://matplotlib.org/stable/api/axes_api.html
• Matplotlib
히스토그램그리기
“plt.hist()”
“bins” = bin 개수 (계급수) “color” = 히스토그램색
“alpha” = 투명도
• (0 : fully transparent, 1: not transparent)
“histtype” = 히스토그램타입
• Default는 “bar” 타입(전부색이칠해짐)
• “step”은윤곽선만
“rwidth” : 막대간격조정
“hatch” : 히스토그램빗금채우기
• “x”는 x자형빗금을채워준다. (/, +, * 등사용가능)
추가적으로 “density=True”를하면 Normalized 히스토그램 을그려준다.
• Matplotlib
Image visualization (“pit.imshow()”, “plt.pcolormesh”)
“np.meshgrid()” = (𝑥𝑥𝑖𝑖, 𝑦𝑦𝑗𝑗) 의격자를만드는함수, 2차원배열로값을생성
“plt.imshow()” or “plt.pcolormesh()” = contour image를생성
• plt.pcolormesh()은격자점을직접입력, 일반이미지를불러올땐격자점을따로 생성해야해서번거롭지만, 비균등격자점에대해서도사용할수있는장점이있다.
“make_axes_locatable()” = colorbar를그리기위한새로운축 cax를 subplot 내에생성
“.append_axes()”를통해위치와크기를부여한다.
“plt.colorbar()”를통해해당하는 contour image의 cax에색을부여한다.
• Matplotlib
Image visualization (“plt.contourf()” and “plt.contour()”)
“plt.contourf()” = 색을채운등고선을그려준다. 격자점과값을모두입력해야한다. “cmap“을통해 contour의색을바꿀수있다.
https://matplotlib.org/stable/tutorials/colors/colormaps.html
“plt.contour()” = “levels”에할당된등고선을그려준다.
• Matplotlib
Image visualization(“plt.subplot(projection=‘’)”)
“plt.pcolormesh”를이용하면비균등(non-uniform) 격자점을그리는데에도유용하다.
• Numpy
https://numpy.org/devdocs/reference/index.html
• Matplotlib https://matplotlib.org/stable/gallery/index.html#
Q&A Thanks for listening




Reviews
There are no reviews yet.