Nếu bạn là người mới và thắc mắc muốn tìm một công cụ nào giúp phát triển cũng như hỗ trợ tương tác cho project về data science, thì có lẽ hầu hết mọi người sẽ trả lời là Jupyter Notebook.
Một notebook có thể xuất ra một tài liệu duy nhất trong đó kết hợp hình ảnh trực quan, văn bản tường thuật, phương trình toán học và đa phương tiện khác. Chỉ cần một notebook, bạn có thể biểu diễn được 1 dự án, hay là 1 bài báo khoa học một cách trực quan nhất. Và Jupyter Notebook chính là thứ mà bạn đang cần tìm.
Mục lục
1. Jupyter Notebook là gì?
Trước đây Jupyter Notebook có tên là IPython Notebook, đến năm 2014 tách ra khỏi IPython và đổi tên thành Jupyter Notebook. Jupyter hỗ trợ rất nhiều các kernel cho các ngôn ngữ khác nhau, trong đó tập trung vào 3 ngôn ngữ là Julia, Python và R. Jupyter là một nền tảng tính toán khoa học mã nguồn mở, với khả năng nổi bật cho phép tương tác trực tiếp với từng dòng code (interactive).
Bài viết này được đăng tại [free tuts .net]
Jupyter Notebook gồm 2 thành phần chính:
- Ứng dụng Web: cho phép tạo và chia sẻ tài liệu chứa live code, hình ảnh, tài liệu (viết dưới dạng markdown),...
- Notebook documents: trình bày những gì có trong một notebook (code, đồ thị,...)
2. Ưu điểm của Jupyter Notebook
- Code ngay trong trình duyệt, hỗ trợ syntax highlight, thụt lề,... như một code editor.
- Chạy được code ngay trong trình duyệt.
- Hiển thị kết quả tính toán bằng cách sử dụng biểu diễn đa phương tiện, như HTML, LaTeX, PNG, SVG,....
- Hỗ trợ markdown, khiến cho việc comment cho code trở nên trực quan hơn nhiều so với việc dùng plain text.
3. Cách cài đặt Jupyter Notebook
Cách cài đặt dễ nhất, cũng như được khuyến khích nhất, đó là bạn cài Anaconda, nó cài sẵn cho ta Python, Jupyter Notebook, và ti tỉ thứ khác - tất cả những thứ mà một người bắt đầu với data science cần.
Nếu bạn không muốn cài Anaconda thì Jupyter cũng có thể cài qua pip - trình quản lý package của Python. Tất nhiên là bạn cần cài Python trước, sau đó mở terminal lên mà nhập command sau:
1 | pip install jupyter |
Hoặc nếu dùng Linux, bạn có thể tải và cài đặt bằng command:
1 | sudo apt-get install jupyter-notebook python-matplotlib |
4. Bắt đầu với Jupyter Notebook
Mở Jupyter Notebook Server
Sau khi đã cài đặt xong Jupyter, bạn chỉ cần mở terminal và nhập command sau:
1 | jupyter notebook |
Hoặc nếu đã cài Anaconda trên Windows, bạn có thể mở trực tiếp Jupyter Notebook:
Sau đó thì trên terminal sẽ hiển thị như sau:
Và sau đó thì trình duyệt sẽ bật ra một trang web như sau:
Vậy là Jupyter Notebook cơ bản đã được cài xong, bây giờ ta sẽ thử tạo 1 notebook và chạy thử xem nhé.
Mở Jupyter Notebook ở thư mục khác (folder)
Trong command nhập 2 lệnh sau:
cd <đường dẫn folder>
Ví dụ: dùng lệnh cd trong cmd để chuyển đến vị trí thư mục cần mở jupyter (nhớ tạo trước 2 thư mục myJupyter\app1 trong ổ D:)
1 | cd D:\myJupyter\app1 |
Sau đó chạy jupyter:
1 | D:\myJupyter\app1> jupyter notebook |
Hoặc dùng cách tạo file .bat: Ở thư mục hiện tại tạo file run-jupyter.bat có nội dung như sau:
ECHO ON cd D:\myJupyter\app1 jupyter notebook |
Sau đó lưu và chạy file run-jupyter.bat -->trong trình duyệt nháy chọn click here to go to Jupyter
Tạo và chạy một notebook
Tạo một notebook
Để tạo một notebook, ta nhấp chuột vào nút New nằm ở bên góc phải và chọn Python 3:
Mọi notebook mới tạo đều được đặt tên là Untitled, nếu muốn sửa bạn chỉ cần nhấp chuột vào tên, môt hộp thoại đổi tên sẽ bật ra như sau:
Nếu chuyển qua tab quản lý file thì ta sẽ thấy notebook đang chuyển sang màu xanh, đây là trạng thái Running:
Bạn có thể tắt notebook bằng cách chọn và nhấn shutdown:
Hello world với notebook
Khi vừa mới tạo thì notebook sẽ tạo cho ta sẵn một cell (ô), cell này đang ở trạng thái "Code", nghĩa là bạn có thể nhập code Python vào và chạy:
Chúng ta sẽ thử chạy đoạn code nhỏ in ra dòng "Hello World":
Mỗi khi chạy xong một cell thì notebook sẽ tự tạo thêm 1 cell mới. Ta có thể đổi cell này từ code sang markdown để viết một đoạn văn bản như sau:
Và Run cell này:
5. Hướng dẫn sử dụng Jupyter Notebook
Trong phần này, chúng ta sẽ tìm hiểu chi tiết về các thành phần cũng như cách dùng của Jupyter Notebook.
Mở Jupyter Notebook Server
Như đã nói ở trên, bạn có thể mở một notebook bằng cách chạy command sau:
1 | jupyter notebook |
Lưu ý rằng nếu bạn trỏ terminal đến thư mục nào thì Jupyter sẽ mở thư mục đó, chẳng hạn nếu như mình mở ứng dụng Jupyter mặc định trên Windows, nó sẽ mở đường dẫn "/" trên máy tính:
Ta hoàn toàn có thể trỏ đến thư mục khác, chẳng hạn:
Mặc định thì sau khi chạy Jupyter Notebook, một trang web sẽ bật ra (mặc định là http://localhost:8888) được gọi là dashboard (bảng điều khiển) nó giống như một trình quản lý file, trong này sẽ hiển thị tất cả các file nằm trong thư mục mà ta vừa chỉ định mở với Jupyter Notebook:
Nếu như bạn muốn mở trực tiếp file notebook mà không cần phải mở thông qua dashboard thì bạn có thể nhập command sau vào terminal:
1 | jupyter notebook [tên_file].ipynb |
Trong đó .ipynb chính là đuôi của một file notebook, nếu bạn chỉ nhập tên file mà không nhập đuôi thì Jupyter vẫn sẽ tự hiểu và thêm vào.
Ngoài ra, bạn hoàn toàn có thể mở nhiều Jupyter Notebook cùng một lúc, mặc định thì Jupyter sẽ mở tại port 8888, và nếu bạn mở thêm thì nó sẽ nhận port gần nhất (8889, 8890,...), hoặc bạn có thể tự chọn port cho Jupyter khi mở như sau:
1 | jupyter notebook --port [số bất kỳ] |
Ví dụ:
Giao diện của Notebook
Trong 1 notebook sẽ có 4 phần chính (mình sẽ đánh số theo thứ tự từ 1, 2, 3, 4) như sau:
- 1: Tên của file notebook, tương ứng với tên file .ipynb.
- 2: Thanh Menu hiển thị nhiều chức năng khác nhau để điều khiển notebook.
- 3: Thanh công cụ (toolbar) chứa các công cụ được sử dụng nhiều (run, di chuyển code cell lên xuống, restart kernel...).
- 4: Code cell (sẽ nói kỹ ở phần tiếp)
Cấu trúc của một Notebook
Cell Code
Một notebook bao gồm một chuỗi các cell. Một cell giống như một text editor mini, có thể thực thi code bằng tổ hợp phím Shift + Enter hoặc nhấn nút Run trên toolbar. Tuỳ thuộc vào kiểu cell mà output sẽ khác nhau, có 4 loại cell được hỗ trợ trong Jupyter Notebook:
- Code: Là kiểu hay dùng nhất, bạn nhập và thực thi code trên loại cell này.
- Markdown: Kiểu cell được dùng cho việc nhập văn bản, toàn bộ văn bản của bạn sẽ được format bằng Markdown
- Raw NBConvert: được sử dụng để hiển thị các định dạng code khác nhau thành HTML hoặc LaTeX.
- Heading: Thêm tiêu đề cho notebook, loại cell này hiện đã được merge vào Markdown và không còn được khuyến khích dùng
Ta sẽ xem xét một ví dụ nhỏ, gõ đoạn code sau sau đó nhấn Shift + Enter hoặc click Run trên toolbar:
1 | print ( "Freetuts.net" ) |
Khi bạn thực thi 1 cell, output của code sẽ được hiển thị ở phía dưới, đồng thời label ở phía bên trái chuyển từ In[] (chưa thực thi) => In[*] (đang thực thi) => In[1] (đã thực thi - số trong ô ngoặc tương ứng với số lần thực thi cell của notebook)
Một điều cần lưu ý là không cần phải nhập hàm print mới có thể in ra màn hình được, bạn có thể nhập tên biến ở cuối cell như sau:
Kernel
Cùng với cell, kernel (nhân) là 2 thành phần quan trọng nhất của Jupyter. Kernel bản chất là một chương trình thông dịch và thực thi code. Jupyter Notebook đã cài sẵn cho chúng ta Kernel IPython để làm việc với Python, tuy nhiên có khá nhiều kernel dành cho ngôn ngữ khác mà bạn có thể cài thêm (R, Julia,...) khiến cho sử dụng Jupyter trở nên rất tiện dụng.
Khi bạn thực thi một cell code, code sẽ được thực thi bởi kernel và trả về output như những ví dụ trên. Một điều quan trọng trong Jupyter Notebook là kernel vẫn chạy và liên kết giữa các cell code với nhau, chứ không tách rời từng cell riêng lẻ, điều này trở nên cực kỳ tiện dụng cho việc debug.
Ví dụ như bạn khai báo một hàm, import một thư viện,... vào một cell và thực thi nó, thì cell khác sẽ nhận được giá trị đó trong lần thực thi tiếp, ví dụ như:
Trong ví dụ trên, ta khai báo một hàm tính tổng như sau:
1 2 | def sum (x, y): return x + y |
Vào một cell code và thực thi, sau đó ta tạo 1 cell code khác và truyền hai biến a và b đã khai báo trước vào, và kết quả là tổng của 2 biến a và b đó.
Trong phần lớn thời gian, code của ta thường sẽ đi từ trên xuống, tuy nhiên bạn nên chú ý tới trạng thái của từng cell code, do nó biểu thị cell code đó đã được thực thi lúc nào, ví dụ như ta đổi giá trị biến b ở cell code trên như sau:
Thì sau khi ta chạy lại hàm sum ở dưới, kết quả cũng sẽ thay đổi theo:
Vì vậy, mỗi khi làm việc với notebook ta cần phải chú ý thứ tự thực thi của cell code.
Bởi vì vấn đề trên, nếu một khi notebook của bạn quá rối và bạn không biết biến nào đang chứa giá trị nào, thì cách giải quyết nằm trong menu Kernel:
- Interrupt: Nếu như cell code đang thực thi quá lâu mà bạn muốn ngừng thì bạn có thể chọn tuỳ chọn này.
- Restart: Khởi động lại kernel, mọi biến được lưu sẽ bị xoá khỏi bộ nhớ.
- Restart & Clear Output: Giống restart nhưng đi kèm là xoá toàn bộ output trong notebook.
- Restart & Run All: Giống Restart nhưng sẽ thực thi lại toàn bộ các cell sau khi restart xong.
Xuất Notebook
Jupyter hỗ trợ rất nhiều định dạng xuất ra như bên dưới:
Bạn chỉ cần chọn File => Download as => chọn kiểu file mà mình muốn xuất, rất đơn giản và dễ dàng.
6. Tổng kết
Sau khi hoàn thành bài này thì nhìn chung bạn đã nắm được hầu hết concept cơ bản của Jupyter Notebook. Đây là một công cụ rất hữu ích, dễ sử dụng và hiệu quả, đặc biệt là dành cho Data Science. Bạn có thể bắt đầu một project với Jupyter và khám phá thêm nhiều tính năng khác, nếu đang bắt đầu với Data Science, đừng quên ghé qua series về NumPy, Pandas và Matplotlib - những thư viện hàng đầu về xử lý dữ liệu trên Python nhé.
P.s: https://freetuts.net