بلاگ

راهنمای جامع ژوپیتر نوت بوک - jupyter notebook

راهنمای جامع ژوپیتر نوت بوک - jupyter notebook

به راهنمای جامع ژوپیتر نوت بوک - jupyter notebook خوش آمدید. در اینجا یک راهنما کامل جمع آوری شده با رویکرد ساده و مخصوص افرادی که تازه با jupyter notebook آشنا شدند.

جوپیتر نوت بوک چیست و چرا این همه طرفدار داره؟

ژوپیتر نوت بوک یکی از مهم ترین محیط های توسعه پایتون به شمار میره. اگر که در زمینه داده کاوی یا یادگیری ماشین (‌یادگیری عمیق) از محبوب ترین ابزار های توسعه به شمار میادش. ژوپیتر به طور خاص مجموعه از پکیچ ها رو داره که در اینجا به بررسی jupyter notebook میپردازم. با کمک نوت بوک های ژوپیتر میتونید کدها رو در لحظه اجرا کنید و نتیجه اون رو ببینید یا اینکه خروجی html بگیرید. درکنار این موضوع مسئله ای که هست نگه داری خروجی تا زمانی که بخواهید پاکش کنید یا دوباره اون سلول اجرا بشه.مهم ترین دلیلی که خودم از ژوپیتر موقع کارهای یادگیری عمیق استفاده میکنم پویایی اون و اجرا در لحظه هست. وقتی پای اجرا در لحظه میاد هیچ کدوم از محیط های دیگه حتی متلب به نظرم به این خوبی نیستند. و همه اینها در کنار اینکه توی مرورگر اجرا میشه و اگر مثل من چند تب همیشه باز داری یعنی کمترین سربار سیستمی رو با ژوپیتر خواهی داشت.

پلی لیست یوتوب

https://www.youtube.com/playlist?list=PLvN40XeLIeJlklwkCSz7RC0FhChKwByCc

لینک پلی لیست ژوپیتر نوت بوک - Jupyter notebook

پس تا اینجا

۱. سادگی ژوپیتر

۲. اجرای سلول به سلول

به نظرم مهم ترین نقاط قوتش هستند

 

جدول محتوایی

نصب ژوپیترنوت بوک jupyter notebook

برای نصب ژوپیتر نوت بوک راه حل های مختلفی هست در اینجا به صورت مختصر سه روش رو معرفی میکنم

  1.  نصب از طریق پکیچ منجر پایتون pip
  2.  نصب از طرق اناکدنا conda
  3.  نصب از طریق داکر

۱. نصب ژوپیتر از طریق pip

برای نصب ژوپیتر کافیه بزنید

bash
pip install jupyter

البته اگر که از پایتون ۳ توی لینوکس استفاده میکنید احتمالا به جای pip باید بزنید pip3 تا روی پایتون ۳ نصب بشه.

۲. نصب از طریق اناکندا conda

برای نصب ژوپیتر از طریق اناکندا کافیه بزنید

bash
conda install jupyter

به همین راحتی البته توی سایت ژویپتر راه حل های دیگه ای برای نصبش از طریق pip  و conda هم گفته

۳. نصب از طریق داکر

این مورد یکم تخصصی هست و نیاز داره که به صورت اولیه کار با داکر رو بلد باشی. ابتدا  داکر هاب jupyter رو  بررسی کن توی اون کلی نمونه هست.

jupyter docker hub

به عنوان مثال من ایمیج   tensorflow-notebook رو میخوام اجرا کنم به شیوه ساده کافیه بزنم.

bash
docker run -p 8888:8888 jupyter/tensorflow-notebook

این کار باعث میشه اون ایمیج رو دانلود کنه و اجرا کنه اگر میخواهید دربارش بیشتر بدونید یک سری به آموزش سریع و راحت داکر من بزنید.

اجرای ژوپیتر نوت بوک

برای اجرای ژوپیتر نوت بوک کافیه که بریم در محیط کامندمون cmd برای ویندوز و terminal برای لینوکسی ها و این رو وارد کنیم

bash
jupyter notebook

با این کار ژوپیتر در اون محلی که ترمنیال ( محیط کامندی) هست اجرا میشه.

اگر بخواهیم ژوپیتر نوت بوک رو در محلی خاص اجرا کنیم روش های مختلفی هست ساده ترینشون اینه که ابتدا با کمک cd بریم به اون پوشه مربوطه

ترمینال لینوکس

bash
cd ~/code/jupyter-notebooks

cmd  ویندوز

bash
cd C:/code/jupyter-notebooks

با اجرای این دستور ما رو میبره به اون پوشه خاص حالا وقتی میزنیم jupyter notebook دقیقا در همین پوشه اجرا میشه. مهم ترین مزیت این کار سرعت اجرای بالای ژوپیتر و دسترسی راحتر به فایل هاست.

گزینه های در دسترس برای اجرای ژوپیتر نوت بوک

 

jupyter notebook هم مثل کلی ابزار تحت کامند لاین (cli) بهمون اجازه میده که با یک سری تنظیمات خاصی اون رو اجرا کنیم برای گرفتن کمک این دستور رو تایپ میکنیم

bash
jupyter notebook --help

و خروجی احتمالا چیزی شبیه این باشه

bash
The Jupyter HTML Notebook.

This launches a Tornado based HTML Notebook Server that serves up an
HTML5/Javascript Notebook client.

Subcommands
-----------

Subcommands are launched as \`jupyter-notebook cmd \[args\]\`. For information on
using subcommand 'cmd', do: \`jupyter-notebook cmd -h\`.

list
List currently running notebook servers.
stop
Stop currently running notebook server for a given port
password
Set a password for the notebook server.

Options
-------

Arguments that take values are actually convenience aliases to full
Configurables, whose aliases are listed on the help line. For more information
on full configurables, see '--help-all'.

--debug
set log level to logging.DEBUG (maximize logging output)
--generate-config
generate default config file
-y
Answer yes to any questions instead of prompting.
--no-browser
Don't open the notebook in a browser after startup.
--pylab
DISABLED: use %pylab or %matplotlib in the notebook to enable matplotlib.
--no-mathjax
Disable MathJax

MathJax is the javascript library Jupyter uses to render math/LaTeX. It is
very large, so you may want to disable it if you have a slow internet
connection, or for offline use of the notebook.

When disabled, equations etc. will appear as their untransformed TeX source.
--allow-root
Allow the notebook to be run from root user.
--script
DEPRECATED, IGNORED
--no-script
DEPRECATED, IGNORED
--log-level=<Enum> (Application.log\_level)
Default: 30
Choices: (0, 10, 20, 30, 40, 50, 'DEBUG', 'INFO', 'WARN', 'ERROR', 'CRITICAL')
Set the log level by value or name.
--config=<Unicode> (JupyterApp.config\_file)
Default: ''
Full path of a config file.
--ip=<Unicode> (NotebookApp.ip)
Default: 'localhost'
The IP address the notebook server will listen on.
--port=<Int> (NotebookApp.port)
Default: 8888
The port the notebook server will listen on.
--port-retries=<Int> (NotebookApp.port\_retries)
Default: 50
The number of additional ports to try if the specified port is not
available.
--transport=<CaselessStrEnum> (KernelManager.transport)
Default: 'tcp'
Choices: \['tcp', 'ipc'\]
--keyfile=<Unicode> (NotebookApp.keyfile)
Default: ''
The full path to a private key file for usage with SSL/TLS.
--certfile=<Unicode> (NotebookApp.certfile)
Default: ''
The full path to an SSL/TLS certificate file.
--client-ca=<Unicode> (NotebookApp.client\_ca)
Default: ''
The full path to a certificate authority certificate for SSL/TLS client
authentication.
--notebook-dir=<Unicode> (NotebookApp.notebook\_dir)
Default: ''
The directory to use for notebooks and kernels.
--browser=<Unicode> (NotebookApp.browser)
Default: ''
Specify what command to use to invoke a web browser when opening the
notebook. If not specified, the default browser will be determined by the
\`webbrowser\` standard library module, which allows setting of the BROWSER
environment variable to override it.
--pylab=<Unicode> (NotebookApp.pylab)
Default: 'disabled'
DISABLED: use %pylab or %matplotlib in the notebook to enable matplotlib.
--gateway-url=<Unicode> (GatewayClient.url)
Default: None
The url of the Kernel or Enterprise Gateway server where kernel
specifications are defined and kernel management takes place. If defined,
this Notebook server acts as a proxy for all kernel management and kernel
specification retrieval. (JUPYTER\_GATEWAY\_URL env var)

To see all available configurables, use \`--help-all\`

Examples
--------

jupyter notebook # start the notebook
jupyter notebook --certfile=mycert.pem # use SSL/TLS certificate
jupyter notebook password # enter a password to protect the server

در اینجا یک سری گزینه رو برای ما اورده که من مهم ترین هاش رو توضیح میدم

bash
jupyter notebook --ip 0.0.0.0

فلگ —ip برای مواقعی استفاده میشه که میخواهیم بگیم روی کدوم ای پی های سیستم ما اجرا بشه معروف ترین حالتش هم 0.0.0.0 هست و با این کار در تمام آی پی های سیستم اجرا میشه. (‌در دسترس عموم توی شبکه داخلی و بیرونی قرار میگیره)

 

bash
jupyter notebook --no-browser

برای وقت هایی که توی سرور یا linux sub system قرار هست اجرا بشه کاربرد داره. با این کار دیگه مرورگر رو اجرا نمیکنه (‌در حالت عادی موقع اجرا اگر مرورگر پیشفرض باز نباشه یکی باز میکنه و ادرس مربوطه رو اجرا میکنه)

 

bash
jupyter notebook --port=8888

برای مواقعی که میخواهید پورت خاصی بذارید برای ژوپیترتون این روش کاربرد داره و در حالت پیش فرض  8888 هست البته اگر پورت خالی نباشه خودش یک پورت خالی رو برای ژوپتیر به صورت اتوماتیک در نظر میگیره

bash
jupyter notebook password

این گزینه وقتی هست که میخواهید پسورد بذارید روی ژوپیترتون البته در حالت عادی با یک عدد توکن اعتبار سنجی میشه و نگرانی نداره از این بابت.

 

چطوری ژوپتیر رو توی سرور اجرا کنیم و توی مرورگر دکستاپ/لپتاپمون بیاریمش؟

سناریو چیه؟ فرض کنید در خونه یا کیلو مترها دور تر شما یک عدد کامپیوتر دارید که میخواهید کدها پایتون رو روی اون با کمک ژوپیتر اجرا کنید خب چطوری این کار رو انجام میدی؟

روش بر اساس زیر ساخت ممکنه متفاوت باشه ولی به صورت کلی به این شکل هست

توی سیستم مقصد میزنید

bash
jupyter notebook --ip 0.0.0.0 --no-browser --port=8888

و بهتون یک سری توکن همراه با ادرس لوکال هاست اون سرور رو نشون میده شبیه این

bash
 http://localhost:8888/?token=uj9cyecks5y3ux4pj2vjqh4tr53kzu5cw4yduzz2jmyasxwg
or http://127.0.0.1:8888/?token=uj9cyecks5y3ux4pj2vjqh4tr53kzu5cw4yduzz2jmyasxwg

 

حالا کافیه توی مرورگر خودتون ایپی - دامنه اون سرور رو بزنید مثلا ایپی اون توی شبکه محلی من هست 192.168.1.42 به این صورت وارد میکنم

bash
http://192.168.1.42:8888/?token=uj9cyecks5y3ux4pj2vjqh4tr53kzu5cw4yduzz2jmyasxwg

 

البته اگر از ssh استفاده میکنید میتونید با مپ کردن پورت ها دقیقا دیگه حتی نیازی نباشه ادرس اون ip خاص رو بزنی کافیه که روی همین localhost… کلیک کنید تا با همین ادرس بیاد اما چطوری؟

bash
ssh -4 Server -L 8888:localhost:8888

با این کار میگیم به سرور وصل شو  و هر چیزی که توی سرور روی پورت 8888 قرار داره بیار روی پورت 8888 دستگاه من.

کلی درباره اجرای اولیه صحبت کردیم بریم سمت محیط دوست داشتنی ژوپیتر!

محیط ژوپیتر نوت بوک jupyter notebook

بعد از اینکه اجراش کردید احتمالا چیزی شبیه این ببینید

محیط اولیه ژوپیتر

گزینه های مهم برای ما

 

Files

فایل های موجود در این پوشه (‌بدون نشان داده فایل های مخفی)

Running

وضعیت کرنل ها و نوت بوک های در حال اجرا

Upload

آپلود فایل ها به دایکتوری فعلی ژوپیتر

New

ایجاد فایل جدید. یکی از مهم ترین گزینه ها ایجاد فایل جدید هست در ژوپیتر شما تقریبا هر چیزی رو میتونید بسازید از ترمینال جدید تا فایل های معمولی اما مهمی ترین گزینه Notebook هست برای ما تا یک فایل ژوپیتر بسازیم.

محیط یک نوت بوک ژوپیتری

بالاخره رسیدیم به بخش جذاب ماجرا یعنی یک محیط کارا از ژوپیتر شروع کنیم به کالبد شکافی بخش های مختلف از بالا

محیط یک نوت بوک ژوپیتری

در بالاترین قسمت اطلاعات فایل مثل اسم هست که اگر روی Untitled بزنیم میتونیم اسم رو عوض کنیم و در کنارش اخرین باری که تغییرات ذخیره شده هم هست.بعد از اون منوی کلاسیک قرار داره که همه موارد توش هست.در انتها هم یک سری شورت کات هستند که برای کار با سلول ها cells خیلی کاربردی هستند.

 

بریم بخش مختلف منو رو بررسی کنیم:

Files

اگر گزینه ها واضح هستند فقط گزینه جذاب این جا مسئله گرفتن خروجی هست که وقتی بریم روی Download as لیستی از فایل های خروجی رو میده به نظرم بهترین نمونه اش Markdown و html هست که میتونیم مستقیم نمایشش بدیم

مثل این نمونه توی گیت هاب بخش gits

Edit

گزینه ادیت در منوی ژوپیتر نوت بوک

در اینجا همه گزینه های مربوط به ویرایش سلول ها اومده البته که ما قرار نیست اینطوری استفاده کنیم بلکه با استفاده از شرت کات ها کار رو  سریع تر پیش میبریم

 

view

view in jupyter notebook menu

شاید مهم ترین استفاده ما از این گزینه منو Toggle Line Numbers باشه برای نشون دادن کدد هر خط کنارش توی سلول ها

 

Insert

Insert menu in jupyter noteobook

این گزینه ها هم بعد تر توی شرت کات ها به صورت خلاصه شرت کات هاش این هستند

Insert Cell Above: controll + a Insert Cell Below: controll + b

Cell

Cell Munu in jupyter notebbook

از گزینه های مهم این بخش Run All برای اجرا همه , Cell Type برای تعیین نوع سلول (‌بهش خواهیم رسید) و  All Output است که میشه با اون تمام خروجی ها رو پاک کرد.

 

Kernel

Kernel menu in jupyter noteobook

وقتی که نیاز باشه در کار وقفه ای  ایجاد کنیم Interrupt رو  میزنیم , گزینه  Retart & Clear Output برای ریستارت کرنل فعلی و پاک کردن خروجی هاست و گزینه Restart & Run All برای ریستارت کرنل و اجرای دوباره همه سلول هاست.

در اینجا مشابه Google Colab ما گزینه Change kernel داریم که اگر چندین کرنل مختلف رو به ژوپیتر وصل میکنیم میتونیم همزمان پایتون ۲ و ۳ و زبان R  رو با ژوپتیر کد بزنیم.

 

Help

گزینه help در Jupyter notebook

توی این گزینه لیستی از منابع و موارد کمکی ژوپیتر اومده

 

نوار ابزار ژوپیتر - Jupyter Toolbar

نوار ابزار ژوپیتر نوت بوک

دو گزینه مهم هست

۱. انواع سلول

انواع سلول ها در ژوپیتر نوت بوک

ما از لحاظ دیداری ۴ نوع سلول داریم ( در واقع ۲ یا ۳ نوع سلول)

Code

کدهای معمولی پایتون  که باید اجراشن رو اینجا میذاریم

 

Markdown

یک زبان ساختاریافته برای نوشتن داکیومنت

Raw NBConvert

نوشتن کد ها بدون اجرا

Headning

در واقع Markdown هست با یک عنوان بندی ۱

با کمک Markdown میشه متن ها رو ساختار یافته نوشت در اون میشه کلی المان به صورت پیشفرض ایجاد کرد و اینکه html رو هم میتونه رندر کنه

راهنمای نوشتن Markdown

 

بهرین راه نوشتن داکیومنت توی فایل همین مارک داون markdown هست.

نمونه یک مارک داون و نوت بوک ژوپیتر که به عنوان فایل اموزشی داکر استفاده میکنم

۲. میان بر یا شورت کات ها shortcuts

به نظرم با کمک این سری شرت کات ها میشه که به صورت سریع تر کار رو پیش برد

 

 

 

کلیدتوضیحات
Enterرفتن به حالت ادیت سلول
controll + a , controll + c , controll + vانتخاب همه سلول ها- کپی -پیست
controll + z , controll + yبرگشت به عقب - برگشت به جلو
controll + sذخیره
controll + enterاجرای سلول
shift + enterاجرای سلول و انتخاب زیریش اگر وجود داشت
alt + enterاجرای سلول و ساخت سلول جدید ریزش
Escape (Esc)رفتن به حالت مدیریت سلول ها
برای ادامه اگر در حالت مدیریت سلول ها هستید نیازی به کلیدEsc نیست
Esc + d + dپاک کردن سلول فعلی
shift + mبهم چسباندن سلول های انتخابی
Esc + yتبدیل نوع سلول به کد
Esc + mتبدیل نوع سلول به markdown
Esc + mتبدیل نوع سلول به markdown
Esc + rتبدیل نوع سلول به raw
Esc + 1تبدیل سلول به markdown و ساخت عنوان بندی ۱
Esc + nتبدیل سلول به markdown و ساخت عنوان بندی n
Esc + bساخت سلول در پایین سلول فعلی
Esc + aساخت سلول در بالای سلول فعلی

منبع  این بخش و برگه تقلب ژوپیتر نوت بوک

توابع جادویی

توابع magic توی ژوپیتر یکی از چیز های مهم هست که میتونه کمک کنه به شما بدون خروج از ژوپیتر یک سری دستورات مهم کنترلی رو اجرا کنید یا ژوپیتر رو کانفیگ کنید

برای صدا زدنشون کافیه در یک سلول کد بنویسید

%magic

تا مثل غول چراغ جادو احضار بشن

توابع جادویی ژوپیتر نوت بوک

با این کار یک سری توضیحات ژوپیتر میاد درباره توابع magic و نحوع استفاده در اینجا کوتاه یک سریشون رو معرفی میکنم یک منبع کلی در ادامه میذارم که بتونید استفاده کنید.

jupter-notebook
%lsmagic

گرفتن لیست توابعی که در دسترس هست

 

jupter-notebook
%timeit range(100)

اجرای یک سلول ۱۰۰ بار و محاسبه زمان اجرا

jupter-notebook
%%time

محاسبه زمان اجرای سلول

jupter-notebook
%cat %cd %ldir %ls %mv %cp

توابع جادویی مدیریت فایل

توضیحات بیشتر و نحوه استفاده از توابع جادویی به صورت مفصل تر

خب حالا تا اینجا درباره ژوپیتر صحبت کردیم به نظرتون چه چیز های دیگه ای میتونه باشه؟