راهنمای کاربردی ژوپیتر پایتون (Jupyter) به زبان ساده
۱. اجرای دستورهای شِل
«شِل» (Shell) راهکاری برای تعامل متنی با کامپیوتر است. محبوبترین شل یونیکس، «بَش» (Bash) نام دارد. بَش، شل پیشفرض بسیاری از پیادهسازیهای مدرن یونیکس و بسیاری از بستههایی است که ابزارهای یونیکس مانند را برای ویندوز فراهم میکنند. هنگام کار با مفسر پایتون، در شرایطی که نیاز به استفاده از ابزارهای خط فرمان باشد نیاز به جابهجایی مرتب بین شل و IDLE است. اگرچه، Jupyter Notebook سهولت اجرای دستورات شل را از نوتبوک با قرار دادن یک «!» اضافی پیش از دستورات فراهم میکند. هر دستوری که در خط فرمان کار کند در IPython نیز با قرار دادن کاراکتر پیشوند «!» کار میکند.
In [1]: !ls
example.jpeg list tmp
In [2]: !pwd
/home/Parul/Desktop/Hello World Folder'
In [3]: !echo "Hello World"
Hello World
میتوان مقادیر را به صورت زیر به شل پاس داد و از آن تحویل گرفت.
In [4]: files= !ls
In [5]: print(files)
['example.jpeg', 'list', 'tmp']
In [6]: directory = !pwd
In [7]: print(directory)
['/Users/Parul/Desktop/Hello World Folder']
In [8]: type(directory)
IPython.utils.text.SList
توجه به این نکته لازم است که نوع داده نتایج بازگردانده شده «لیست» (List) نیست.
2. تمهای ژوپیتر نوت بوک
خبر خوش برای افرادی که چشمهایشان موقع زل زدن به پسزمینه سفید ژوپیتر خسته میشود آن است که تمهای متعددی برای این پلتفرم موجود هستند. این تمها ارائه کد را نیز بهبود میبخشند. در ادامه به چگونگی نصب تمهای ژوپیتر پرداخته خواهد شد.
نصب
pip install jupyterthemes
لیست تمهای موجود
jt -l
در حال حاضر، تمهای موجود برای نوتبوک ژوپیتر عبارتند از: chesterish ،grade3 ،gruvboxd ،gruvboxl ،monokai ،oceans16 ،onedork ،solarizedd و solarizedl.
# selecting a particular theme
jt -t <name of the theme>
# reverting to original Theme
jt -r
هر بار که تم تغییر میکند، نیاز به بارگذاری مجدد نوتبوک ژوپیتر به منظور بررسی اعمال تغییرات است. دستور مشابهی قابل اجرا از درون خود ژوپیتر با قرار دادن «!» پیش از دستور است.
تم اصلی
تم Chesterish
تم solarizedl
۳. افزونههای نوتبوک
افزونههای Jupyter Notebook امکان گام برداشتن فراتر از ساخت متداول آن را به کاربر میدهند. افزونههای Notebook یا nbextensions، ماژولهای «جاوا اسکریپت» (JavaScript) هستند که میتوانند روی اغلب Viewهای فرانت-اند نوتبوک بارگذاری شوند. این افزونهها تجربه کاربری و رابط کاربری را ویرایش میکنند.
نصب
نصب با conda:
conda install -c conda-forge jupyter_nbextensions_configurator
و یا با pip:
pip install jupyter_contrib_nbextensions && jupyter contrib nbextension install
#incase you get permission errors on MacOS,
pip install jupyter_contrib_nbextensions && jupyter contrib nbextension install --user
اکنون، با راهاندازی نوتبوک ژوپیتر، میتوان «تب» (Tab) مربوط به NBextensions را با گزینههای بسیار زیاد مشاهده کرد. کاربران بسته به نیاز، علایق و سلایق خود میتوانند آنها را نصب و از قابلیتهای فوقالعاده آنها بهرهمند شوند.
کاربرانی که بعد از انجام مراحل بیان شده در بالا نتوانند تب بیان شده را پیدا کنند، میتوانند به منو Edit مراجعه کنند.
در ادامه برخی از افزونههای کاربردی مورد بررسی قرار میگیرند.
۱. افزونه Hinterland برای ژوپیتر نوتبوک
Hinterland قابلیت تکمیل خودکار منو برای هر کلیدی که در سلول کد فشرده میشود را فراهم میکند، بدون آنکه آن را فقط بh کلید Tab بتوان فراخوانی کرد. این امر موجب میشود قابلیت تکمیل خودکار Jupyter مانند دیگر «محیطهای توسعه یکپارچه» (IDE)، از جمله PyCharm عمل کند.
2. افزونه Snippets برای ژوپیتر نوتبوک
این افزونه یک «منو کشویی» (Drop-down Menu) برای نوار ابزار Notebook فراهم میکند که امکان درج آسان قطعه کدها در نوتبوک کنونی را فراهم میکند.
۳. افزونه Split Cells Notebook
این افزونه سلولهای نوتبوک را تقسیم میکند و آنها را در مجاورت یکدیگر قرار میدهد.
4. افزونه Table of Contents
این افزونه امکان گردآوری همه «سرآیندهای» (Headers) در حال اجرا را فراهم میکند و آنها را در یک پنجره شناور به عنوان نوار کناری یا منو گردش نمایش میدهد. افزونه همچنین قابل «درگ» (Draggable)، «تغییر اندازه» (Resizable)، «منعطف» (Collapsible) و «قابل حمل» (Dockable) است.
۵. افزونه Collapsible Headings برای ژوپیتر نوتبوک
این افزونه امکان داشتن بخشهای جمعشونده (دارای زیر بخش) که با «عنوانها» (headings) از هم جدا شدهاند را فراهم میکند. بنابراین، افرادی که حجم زیادی کد کثیف در نوتبوک خود دارند، میتوانند به سادگی آن را برای اجتناب از اسکرولهای دوباره و دوباره جمع کنند.
6. Autopep8
Autopep8 به قالببندی مجدد/زیباسازی محتوای سلولها تنها با یک کلیک کمک میکند. این افزونه ناجی کاربرانی است که از فشردن مداوم «کلید فاصله» (Spacebar) برای فرمت کردن کد خسته شدهاند.
4. ویجتهای Jupyter
ویجتها اشیای پایتونی هستند که اغلب در مرورگر به عنوان یک کنترل مانند «لغزنده» (Slider)، «جعبه متن» (textbox) و دیگر موارد ارائه میشوند. ویجتها قابل استفاده برای ساخت «رابط کاربری گرافیگی» برای نوتبوک هستند.
نصب
# pip
pip install ipywidgets
jupyter nbextension enable --py widgetsnbextension
# Conda
conda install -c conda-forge ipywidgets
#Installing ipywidgets with conda automatically enables the extension
در ادامه نگاهی به برخی از ویجتها انداخته میشود. برای جزئیات بیشتر میتوان به مخزن گیتهاب آنها (+) مراجعه کرد.
Interact
تابع interact به صورت خودکار یک «رابط کاربری» (User Interface | UI) میسازد که کاوش در کد و دادهها به صورت تعاملی را کنترل میکند. این سادهترین راه برای آغاز به کار با ویجتهای IPython است.
# Start with some imports!
from ipywidgets import interact
import ipywidgets as widgets
۱. ویجتهای پایهای
def f(x):
return x
# Generate a slider
interact(f, x=10,);
# Booleans generate check-boxes
interact(f, x=True);
# Strings generate text areas
interact(f, x='Hi there!');
۲. ویجتهای پیشرفته
در ادامه، لیستی از ویجتهای پیشرفته و کاربردی ارائه شده است.
Play Widget
این ویجت برای اجرای انیمیشن با تکرار روی دنبالهای از اعداد صحیح در سرعت مشخص است. مقدار اسلایدر زیر به player لینک شده است.
play = widgets.Play(
# interval=10,
value=50,
min=0,
max=100,
step=1,
description="Press play",
disabled=False
)
slider = widgets.IntSlider()
widgets.jslink((play, 'value'), (slider, 'value'))
widgets.HBox([play, slider])
Date picker
ویجت date picker در مرورگرهای Chrome و IE Edge کار میکند، اما در حال حاضر در «فایرفاکس» (Firefox) و «سافاری» (Safari) کار نمیکند، زیرا این مرورگرها از فیلد ورودی تاریخ HTML (یا HTML date input field) پشتیبانی نمیکنند.
widgets.DatePicker(
description='Pick a Date',
disabled=False
)
Color picker
widgets.ColorPicker(
concise=False,
description='Pick a color',
value='blue',
disabled=False
)
Tabs
tab_contents = ['P0', 'P1', 'P2', 'P3', 'P4']
children = [widgets.Text(description=name) for name in tab_contents]
tab = widgets.Tab()
tab.children = children
for i in range(len(children)):
tab.set_title(i, str(i))
tab
Qgrid
Qgrid نیز یک ویجت برای Jupyter Notebook محسوب میشود که تمرکز اصلی آن روی «دیتافریمها» (Dataframes) است. این ویجت از SlickGrid برای رندر کردن دیتافریمهای Pandas در ژوپیتر نوتبوک استفاده میکند. این کار، امکان کاوش دیتافریمها با کنترلهای «پیمایش» (scrolling)، «مرتبسازی» (sorting) و «پالایش» (filtering) بصری و همچنین ویرایش دیتافریمها را با دو بار کلیک کردن روی سلولها فراهم میکند. مخزن گیتهاب (+) دارای جزئیات و مثالهای بیشتری در این رابطه است.
نصب
نصب با pip:
pip install qgrid
jupyter nbextension enable --py --sys-prefix qgrid
# only required if you have not enabled the ipywidgets nbextension yet
jupyter nbextension enable --py --sys-prefix widgetsnbextension
نصب با conda:
# only required if you have not added conda-forge to your channels yet
conda config --add channels conda-forge
conda install qgrid
Slideshow
نوتبوک ابزاری موثر برای تدریس و نوشتن کدهای قابل توصیف است. اگرچه، هنگامی که کاربر قصد داشته باشد کار خود را ارائه کند، کل نوتبوک خود را (با همه کدها) نشان میدهد و یا از «پاورپوینت» (Powerpoint) کمک میگیرد. نوتبوک ژوپیتر به سادگی قابل تبدیل به اسلایدها است و کاربر میتواند به سادگی انتخاب کند که چه چیزهایی در نوتبوک نمایش داده شوند و چه چیزهایی پنهان باشند. دو راه برای تبدیل نوتبوک به اسلاید وجود دارد.
گزینه اسلاید توکار در نوتبوک ژوپیتر
ابتدا باید نوتبوک ژوپیتر را باز کرد و به صفحه View → Cell Toolbar → Slideshow رفت. یک نوار خاکستری روشن در بالای هر سلول ظاهر میشود و میتوان با بهرهگیری از آن اسلایدها را سفارشیسازی کرد.
اکنون میتوان به دایرکتوری رفت که نوتبوک در آن نمایش داده شده و کد زیر را وارد کرد.
jupyter nbconvert *.ipynb --to slides --post serve
# insert your notebook name instead of *.ipynb
اسلایدها در پورت ۸۰۰ نمایش داده میشوند. همچنین، یک فایل html. در دایرکتوری تولید خواهد شد و میتوان به اسلایدها از آنجا دسترسی داشت.
استفاده از یک تم پسزمینه به جذابیت هرچه بیشتر و درجه یک شدن کار کمک میکند. در ادامه، تم «onedork» روی نوتبوک اعمال میشود وسپس آن را به یک اسلایدشو تبدیل میکند.
این اسلایدها دارای یک نقص هستند و آن این است که کاربر کد را میبیند ولی نمیتواند آن را اصلاح کند. پلاگین RISE برای این مساله یک راهکار ارائه میکند.
استفاده از پلاگین RISE
RISE سرنامی برای Reveal.js است. Reveal.js یک افزونه نمایش اسلاید برای Jupyter/IPython است. این افزونه reveal.js را برای اجرای اسلایدشو به کار میگیرد. این قابلیت فوقالعاده کاربردی است، زیرا امکان اجرای کد بدون خروج از اسلایدشو را فراهم میکند.
نصب
استفاده از conda (توصیه میشود):
conda install -c damianavila82 rise
استفاده از pip (کمتر توصیه میشود):
pip install RISE
و سپس، دو گام دیگر برای نصب JS و CSS در محل مناسب باید انجام شود:
jupyter-nbextension install rise --py --sys-prefix
#enable the nbextension:
jupyter-nbextension enable rise --py --sys-prefix
اکنون، از RISE برای اسلایدشو تعاملی استفاده میشود. باید Jupyter Notebook که پیشتر ساخته شده است را مجددا باز کرد. اکنون، یک افزونه جدید اضافه شده که میگوید «Enter/Exit RISE Slideshow».
با کلیک روی گزینه نشان داده شده در تصویر بالا میتوان به دنیای اسلایدهای تعاملی وارد شد.
URLها، PDFها و ویدئوهای توکار
چرا باید از لینکهای صرف استفاده کرد در حالیکه میتوان به سادگی یک URL، ویدئو و PDF را با استفاده از ماژول display در IPython، در نوتبوک ژوپیتر توکار کرد.
URL
#Note that http urls will not be displayed. Only https are allowed inside the Iframe
from IPython.display import IFrame
IFrame('https://en.wikipedia.org/wiki/HTTPS', width=800, height=450)
from IPython.display import IFrame
IFrame('https://arxiv.org/pdf/1406.2661.pdf', width=800, height=450)
ویدئوهای یوتیوب
from IPython.display import YouTubeVideo
YouTubeVideo('mJeNghZXtMo', width=800, height=300)
جمعبندی
موارد بیان شده تعدادی از ویژگیهای Jupyter Notebook هستند. برخی از این موارد برای بسیاری از کاربران نوتبوک ژوپیتر شناخته شدهاند. با آزمودن موارد بیان شده در بالا و دیگر افزونهها و قابلیتهای محیط محاسبات تعاملی مبتنی بر وب ژوپیتر نوتبوک، میتوان هر چه بیشتر از مزایای آن بهرهمند شد.
اگر مطلب بالا برای شما مفید بوده، آموزشهای زیر نیز به شما پیشنهاد میشود:
- ۰۰/۱۲/۲۳