ipywidgets 인터랙션 함수 작성 (Python ipywidgets)
ipywidgets은 jupyter-widget 또는 간단히 위젯이라고도 하는 ipywidget은 Jupyter 노트북 및 IPython 커널용 인터랙티브 HTML 위젯입니다. 인터랙티브 위젯을 사용하면 노트북이 활성화됩니다. 사용자는 자신의 데이터를 제어하고 데이터의 변경 사항을 시각화할 수 있습니다.
ipywidgets 설치
1
|
pip install ipywidgets
|
cs |
1. 간단한 산점도 (Scatter) 그리기
필요 라이브러리
1
2
3
|
import ipywidgets
import numpy as np
import matplotlib.pyplot as plt
|
cs |
산점도를 그리는 함수 작성하기
1
2
3
4
5
6
7
|
# weight = 1
# noise = np.random.normal(size=100)
def plot_function(w=1):
X = np.random.uniform(0, 5, size=100)
y = 2 * X + w * np.random.normal(size=100)
plt.scatter(X, y)
|
cs |
가중치 (weight)는 1을 고정으로 설정하고, 정규 노이즈를 사이즈 100으로 랜덤하게 갖는 산점도를 그린다.
이렇게 산점도를 그리면 아래와 같이 일반적인 플랏이 된다.
그런데 만약 가중치 (weight)를 0에서 부터 10까지 한 번에 확인해보고 싶다면 어떻게 할 수 있을까?
for loop 0에서 10까지 플로팅을 하는 방법이 있을 것이고,
일일이 weight를 한 번 씩 수정해가면서 실행하는 방법이 있을테다.
그런데 ipywidgets은 한 줄의 코드로, 그것도 interactive하게 가중치 변화에 따른 산점도를 확인할 수 있게 도와준다.
1
2
|
# Interactive ipywidgets function
ipywidgets.interact(plot_function, w=(0, 10, 0.5))
|
cs |
weight가 10일 때
weight가 5일 때
weight가 1일 때
weight는 0에서부터 10까지 0.5 간격으로 interactive하게 확인할 수 있게 됐다. 그런데 슬라이드 바(slide bar)로 weight를 조정할 때 마다 noise random 변수가 변하는 문제가 발생했다..
1
2
3
4
5
6
7
8
9
|
# weight = 1
# noise = np.random.normal(size=100)
X = np.random.uniform(0, 5, size=100)
noise = np.random.normal(size=100)
def plot_function(w=1):
y = 2 * X + w
plt.scatter(X, y)
|
cs |
노이즈 변수를 함수 안에 선언해서 문제가 발생한 것이다. 순수히 weight의 변화에 따른 동일한 랜덤 변수의 산점도를 확인하고 싶다면, 위 코드 처럼 랜덤 변수는 함수 밖에서 선언하면 된다.
weight가 0.5 일 때
weight가 2.5 일 때
2. 사인 함수 그리기
고등학생 때 sin, cos, tan, hypertangent, secant 등등 외우느라 고생했었는데 ..
1
2
3
4
5
6
7
8
|
def plot_sin(start=0, end=30, factor=1, grid=False, plot_cos=False):
X = np.linspace(start, end, (end-start) * 10)
y = np.sin(X) * factor
plt.grid(grid)
plt.plot(X, y)
if plot_cos:
y = np.cos(X)
plt.plot(X, y)
|
cs |
이제는 ipywidgets으로 모든 plotting을 interactive하게 만들 수 있다는 것을 알기 때문에 응용이 가능하다.
sine함수를 그리는 함수를 가져오고
ipywidgets으로 부르면 라인을 작성하면 된다.
1
|
ipywidgets.interact(plot_sin, start=(0, 10, 1), end=(20, 50, 1), factor=(0,5,0.1), grid=False)
|
cs |
그러면 시작, 끝, 높이를 선택할 수 있는 sine함수가 나타난다!
3. 인터랙티브 히스토그램 그리기
1
2
3
4
|
def plot_hist(mu=0, sigma=1, n=100, bins=10, color="blue"):
plt.xlim(-20, 20)
X = np.random.normal(mu, sigma, n)
plt.hist(X, bins=bins, color=color)
|
cs |
히스토그램을 그리는 함수를 만들어 볼 수 있다.
1
|
ipywidgets.interact(plot_hist, mu=(-10,10,0.5), sigma=(0,10,0.1), n=(10, 1000, 1), bins=(1,100,1), color=["red","green","blue"])
|
cs |
'공부 > 파이썬 Python' 카테고리의 다른 글
파이썬으로 윈도우 주식 가격 알람 로봇 생성하기 (winotify, python) (0) | 2022.06.03 |
---|---|
sympy 심파이 튜토리얼 (0) | 2022.05.21 |
선형대수 Python 과제3 풀이 (1) | 2022.05.04 |
파이썬으로 문장을 모스 코드 mp3로 변환하기 (0) | 2022.04.29 |
광클하는 로봇 만들기 (파이썬 매크로, pynut mouse keyboard) (0) | 2022.04.22 |
댓글