Bài 3: Jupyter Notebook
Mục tiêu bài học
Trong bài học này, bạn sẽ được giới thiệu về các công cụ sẵn có cho khoa học dữ liệu. Bạn cũng sẽ hiểu hơn về lý do tại sao ngày nay các nhà khoa học dữ liệu lại sử dụng chúng phổ biến. Bạn sẽ được làm quen với Jupyter Notebooks, một nguồn mở và được thiết kế cho khoa học dữ liệu, tương tác với dữ liệu trong khoa học tính toán. Sau đó, chúng tôi sẽ hướng dẫn bạn sử dụng các công cụ phần mềm cần thiết cho khóa học này: cách upload dữ liệu lên Jupyter Notebook, khởi tạo Jupyter Notebook, chạy code, thêm văn bản và hình ảnh.
Nắm được các công cụ được sử dụng phổ biến bởi các nhà khoa học dữ liệu
Thực hành sử dụng Jupyter Notebook
Nội dung bài học
Các học liệu trong phần bài học này giới thiệu với các bạn làm quen với các thao tác cơ bản trên Jupyter Notebook, định nghĩa và ý nghĩa của Kernel trong Jupyter, kiến trúc Jupyter. Để học tốt được phần này, đề nghị học viên đọc kỹ phần Chuẩn bị và đã cài đặt Jupyter Notebook hoặc Google Colaboratory thành công.
1. Jupyter Notebook là gì?
Định nghĩa và bản chất
Jupyter Notebook là một môi trường điện toán tương tác (interactive computing environment) dựa trên giao diện Web mã nguồn mở. Nó cho phép bạn kết hợp mã lệnh thực thi (live code), văn bản diễn giải (Markdown), công thức toán học (LaTeX), biểu đồ trực quan hóa (data visualization) và kết quả đầu ra (output) trong cùng một tài liệu duy nhất.
Nguồn gốc tên gọi và lịch sử
- Tiền thân: ban đầu dự án có tên là IPython Notebook (ra mắt năm 2011), chỉ dành riêng cho ngôn ngữ Python.
- Đổi tên: năm 2014, dự án tách ra thành Project Jupyter nhằm hỗ trợ nhiều ngôn ngữ lập trình hơn.
- Ý nghĩa tên gọi “Jupyter”: đại diện cho 3 ngôn ngữ cốt lõi ban đầu trong Khoa học dữ liệu: Julia, Python và R.
Tại sao Khoa học dữ liệu ưa chuộng Jupyter Notebook?
- Tính tương tác cao: chạy mã theo từng ô (cell) và nhận ngay kết quả, không cần biên dịch lại toàn bộ chương trình.
- Tính tái lập (reproducibility): lưu toàn bộ quy trình phân tích dữ liệu, từ làm sạch dữ liệu (data cleaning), khám phá dữ liệu (EDA) cho đến xây dựng mô hình học máy.
- Dễ chia sẻ: tệp Notebook lưu dưới định dạng .ipynb, dễ dàng xuất ra PDF, HTML, slide trình diễn hoặc chia sẻ qua GitHub, Google Colab.
2. Bắt đầu với Jupyter
Cách cài đặt và khởi chạy
- Qua Anaconda Distribution (khuyên dùng): cài bộ Anaconda đã tích hợp sẵn Jupyter Notebook, JupyterLab và đầy đủ các thư viện Data Science (Pandas, NumPy, Matplotlib…).
- Qua lệnh pip: chạy
pip install jupyterlabhoặcpip install notebooktrong Terminal / Command Prompt. - Môi trường đám mây (không cần cài đặt): dùng Google Colab, Kaggle Notebooks hoặc JupyterLite trực tiếp trên trình duyệt.
Hai chế độ hoạt động
Jupyter Notebook vận hành dựa trên 2 chế độ riêng biệt:
| Chế độ | Nhận biết | Phím chuyển | Chức năng |
|---|---|---|---|
| Command Mode (chế độ lệnh) | Viền ô màu xanh dương | Esc | Quản lý ô: thêm, xóa, sao chép, di chuyển hoặc đổi loại ô. |
| Edit Mode (chế độ chỉnh sửa) | Viền ô màu xanh lá | Enter hoặc click vào ô | Soạn thảo mã nguồn (code) hoặc gõ văn bản (Markdown) bên trong ô. |
Các loại ô (cell) và phím tắt cơ bản
- Code Cell: nơi viết và thực thi mã lập trình (mặc định).
- Markdown Cell: nơi trình bày tài liệu, ghi chú, định dạng tiêu đề (#), danh sách, công thức hoặc chèn link, bảng HTML.
Phím tắt cần nhớ (các phím chữ dùng trong Command Mode, nhấn Esc trước):
- Shift + Enter: chạy ô hiện tại và chuyển xuống ô tiếp theo.
- Ctrl + Enter: chạy ô hiện tại và giữ nguyên vị trí con trỏ.
- Esc rồi A: chèn một ô mới ở phía trên (Above).
- Esc rồi B: chèn một ô mới ở phía dưới (Below).
- Esc rồi M: chuyển ô sang định dạng Markdown.
- Esc rồi Y: chuyển ô sang định dạng Code.
- Esc rồi D D (nhấn D hai lần): xóa ô hiện tại.
3. Nhân (Kernel) trong Jupyter
Kernel là gì?
Kernel (nhân) là một chương trình chạy ẩn ở phía sau (background process), đóng vai trò là “bộ não tính toán” (execution engine) của Jupyter Notebook. Khi bạn thực thi một ô Code, đoạn mã được gửi tới Kernel để xử lý và trả về kết quả hiển thị.
Các đặc tính quan trọng của Kernel
- Đa ngôn ngữ (language agnostic): mỗi ngôn ngữ lập trình có một Kernel riêng. Ví dụ: ipykernel cho Python, IRkernel cho R, IJulia cho Julia, Almond cho Scala.
- Lưu trữ trạng thái (statefulness): Kernel giữ các biến, hàm và dữ liệu trong RAM suốt phiên làm việc. Vì vậy thứ tự chạy ô rất quan trọng: nếu bạn định nghĩa một biến ở ô phía dưới và chạy ô đó trước, ô phía trên vẫn sẽ nhận được giá trị của biến.
- Một Kernel duy nhất cho mỗi notebook: tại một thời điểm, mỗi file Notebook chỉ kết nối với một Kernel. Bạn có thể đổi Kernel từ Python sang R hoặc Scala, nhưng không thể chạy đồng thời nhiều Kernel (vừa Python vừa R) trong cùng một notebook.
Thao tác quản lý Kernel trên thanh menu
- Interrupt Kernel (dừng nhân): hủy lệnh đang chạy khi code bị lặp vô tận (infinite loop) hoặc bị treo.
- Restart Kernel (khởi động lại): xóa sạch toàn bộ biến trong RAM và làm mới trạng thái làm việc của Kernel.
- Restart & Clear Output: khởi động lại Kernel và xóa toàn bộ kết quả hiển thị cũ trên giao diện.
- Restart & Run All: khởi động lại Kernel và tự động chạy lại tất cả các ô từ trên xuống dưới để kiểm tra tính toàn vẹn của mã.
4. Kiến trúc Jupyter
Jupyter Notebook được thiết kế theo mô hình kiến trúc tách biệt (decoupled architecture) giữa giao diện người dùng và bộ tính toán phía sau.
+--------------------------------+
| Trình duyệt Web (Browser) | <-- Hiển thị HTML / JavaScript / Markdown
+--------------------------------+
|
(HTTP / WebSockets)
v
+--------------------------------+
| Jupyter Server (Backend) | <-- Quản lý file .ipynb, người dùng, định tuyến
+--------------------------------+
|
(Giao thức ZeroMQ - ZMQ)
v
+--------------------------------+
| Kernel (Engine) | <-- Thực thi mã: Python, R, Scala...
+--------------------------------+
Các thành phần chính
- Web Browser (client frontend): giao diện đồ họa tương tác nơi người dùng viết mã, xem kết quả và định dạng văn bản. Trình duyệt xử lý hiển thị HTML, JavaScript, CSS và hình ảnh trực quan.
- Jupyter Notebook Server (web server): ứng dụng server nhẹ chạy trên máy cục bộ (hoặc máy chủ). Server đọc/ghi file .ipynb trên ổ đĩa, đồng thời cung cấp WebSocket và HTTP API để truyền thông điệp giữa trình duyệt và Kernel.
- Giao thức ZeroMQ (ZMQ): hệ thống truyền tin bất đồng bộ (asynchronous messaging) tốc độ cao. Nó gửi các yêu cầu thực thi (execution requests) dưới dạng tin nhắn JSON từ Server tới Kernel, và nhận lại luồng dữ liệu trả về (stdout, stderr, hình ảnh).
- Kernel (execution engine): nhận các chuỗi code, thực thi và trả lại kết quả.
Bản chất của tệp .ipynb
Tệp .ipynb (Jupyter Notebook file) thực chất là một tệp văn bản mã hóa dưới định dạng JSON. Cấu trúc JSON gồm:
cells: mảng chứa nội dung từng ô (code, markdown, số lần thực thiexecution_count,outputs).metadata: thông tin về môi trường và Kernel (ngôn ngữ, phiên bản).nbformat: phiên bản định dạng của Jupyter Notebook.
Học liệu thay thế cho phần video (nguồn mở, tiếng Anh)
Bài đọcJupyter Notebook là gì? Hướng dẫn cài đặt và tạo notebook đầu tiên
Bài đọcBắt đầu với Jupyter: thiết lập, giao diện và xuất notebook
Tài liệuNhân (kernel) trong Jupyter: tài liệu chính thức của Project Jupyter
Bài đọcKernel là gì và hoạt động ra sao
Tài liệuKiến trúc Jupyter: tài liệu chính thức của Project Jupyter
VideoTìm trên YouTube: “Jupyter Notebook Tutorial: Introduction, Setup, and Walkthrough” (Corey Schafer)
Để thành thục hơn trong việc sử dụng Jupyter Notebook và làm quen với các thao tác nâng cao, các bạn có thể tham khảo thêm tài liệu dưới đây của dataquest.io để tham khảo và đọc thêm. Các học viên được khuyến khích đọc thêm đến phần kernel.
Bài đọcHướng dẫn sử dụng Jupyter Notebook (Dataquest)
Thực hành: Lab 1 – Jupyter Notebooks
Sau khi xem học liệu, bạn làm Lab 1 gồm 3 phần (Cơ bản, Các tính năng khác, Tính năng nâng cao). Thời gian dự kiến: 90 phút. Bạn cần cài sẵn Jupyter Notebook hoặc dùng Google Colab.
Tổng kết bài học
Hoàn thành bài học, bạn đã tìm hiểu về:
Jupyter Notebooks: một công cụ khoa học dữ liệu phổ biến.
Thực hành sử dụng Jupyter Notebook với những thao tác cơ bản, các tính năng bổ sung, các tính năng nâng cao trong Jupyter Notebook.
Quiz 3
10 câu hỏi. Chọn đáp án rồi bấm “Nộp bài” để xem kết quả.



