অধ্যায় 6 · প্রজেক্ট ও পরের ধাপ
জুপিটার নোটবুক ও প্রজেক্টের গঠন
- পৃষ্ঠা 19 / 22
- 5 মিনিট পড়া
ডেটা সায়েন্টিস্ট আর AI ইঞ্জিনিয়াররা দুই জায়গায় কাজ করেন। তাঁরা খোঁজাখুঁজি করেন নোটবুকে — কিছু ডেটা লোড, একটা প্রম্পট পরখ, একটা চার্ট আঁকা, এক লাইন বদলে আবার চালানো। তারপর বানান সাধারণ .py ফাইলে, প্রজেক্ট হিসেবে সাজিয়ে, যা টেস্ট করা, রিভিউ করা আর সার্ভারে চালানো যায়। এই পাতায় দুটোই, আর এক থেকে আরেকে যাওয়ার উপায়।
নোটবুক কী
জুপিটার নোটবুক (একটা .ipynb ফাইল) হলো সেল দিয়ে বানানো একটা ডকুমেন্ট। কোড সেলে থাকে Python; চালালে তার আউটপুট — লেখা, টেবিল, চার্ট — ঠিক নিচে দেখায় আর ফাইলেই সংরক্ষিত হয়। Markdown সেলে থাকে সাজানো নোট, যাতে যুক্তিটা কোডের পাশেই থাকে। নোটবুকের পেছনে চলে একটা কার্নেল: একটা Python প্রসেস, যা সেলগুলোর মাঝে প্রতিটা ভেরিয়েবল মেমরিতে রাখে।
# Google Colab: কিছু ইনস্টল করতে হয় না — colab.research.google.com খুলুন
# নিজের কম্পিউটারে, প্রজেক্টের ভার্চুয়াল এনভায়রনমেন্টের ভেতরে (পাতা ২):
python -m pip install jupyterlab
jupyter labVS Code-ও .ipynb ফাইল খোলে: ওপরের ডান কোণে কার্নেল হিসেবে আপনার .venv বেছে নিন। Google Colab (পাতা ২) একই জিনিস, ব্রাউজারে, বিনামূল্যের GPU সহ।
সেল নিয়ে কাজ
# সেল ১
import pandas as pd
reviews = pd.read_csv("../data/reviews.csv")
# সেল ২
reviews.shape # সেলের শেষ লাইনের মান নিজে থেকেই দেখায়
# সেল ৩
reviews["rating"].value_counts()| কী / কমান্ড | কী করে |
|---|---|
Shift + Enter | সেল চালায় আর পরের সেলে যায় |
Esc তারপর M / Y | সেলকে Markdown / কোড বানায় |
Esc তারপর A / B | ওপরে / নিচে নতুন সেল |
%pip install pandas | কার্নেলের নিজের এনভায়রনমেন্টে ইনস্টল করে (!pip-এর চেয়ে নিরাপদ) |
প্রথম লাইনে %%time | সেলে কত সময় লাগল দেখায় |
| Kernel → Restart and Run All | নতুন করে শুরু করে ওপর থেকে প্রতিটা সেল চালায় |
লুকানো অবস্থার ফাঁদ
সেল চলে আপনি যে ক্রমে চালান সেই ক্রমে, দেখতে যে ক্রমে আছে সেই ক্রমে নয়। সেলের পাশের সংখ্যা, যেমন [7], বলে সেটা শেষ কখন চলেছে। ধরুন একটা সেলে limit = 10 দিয়ে চালালেন, পরে বদলে limit = 5 করে আবার চালালেন, তারপর সেলটা মুছে দিলেন। বাকি সব সেল তখনো দেখে limit = 5 — এমন একটা মান, যা নোটবুকের কোথাও আর লেখা নেই। সেই নোটবুক একজন সহকর্মীকে পাঠালে চলবে না, অথবা আরও খারাপ, অন্য ফলাফল দেবে।
- নোটবুক শেয়ার করার বা তার ফলাফলে ভরসা করার আগে Restart and Run All চালান। ওপর থেকে নিচ পর্যন্ত চললে নোটবুকটা সৎ।
- সেলগুলো যে ক্রমে চলা উচিত সেই ক্রমে রাখুন, আর প্রতিটা ছোট রাখুন।
- কোনো সেলে কখনো API key পেস্ট করবেন না: নোটবুক ভেতরের সবকিছুসহ শেয়ার আর আপলোড হয়। পাতা ১৭-এর মতো
.envথেকে key লোড করুন, অথবা Colab-এর Secrets প্যানেল ব্যবহার করুন।
নোটবুক নাকি .py ফাইল?
| নোটবুক যার জন্য | .py ফাইল যার জন্য |
|---|---|
| নতুন ডেটা প্রথমবার দেখা | যে কোড বারবার চালাবেন |
| প্রম্পট পরখ আর মডেলের উত্তর তুলনা | সার্ভারে বা নির্দিষ্ট সময়ে চলা যেকোনো কিছু |
| চার্ট আর ফলাফলের লেখা রিপোর্ট | অন্য কোড যে ফাংশন আর ক্লাস import করে |
| শেখানো আর ধাপে ধাপে দেখানো | যার টেস্ট আর কোড রিভিউ দরকার |
সাধারণ পথ: নোটবুকে খুঁজে দেখুন, আর কোনো কোড কাজ করলে সেটা একটা মডিউলে সরিয়ে নোটবুকে আবার import করুন। এই দুই লাইন থাকলে রিস্টার্ট ছাড়াই মডিউলে করা বদল নোটবুক ধরে ফেলে:
%load_ext autoreload
%autoreload 2
from my_ai_tools import clean, estimate_tokensএকটা আসল প্রজেক্টের গঠন
পরের পাতায় যে রিভিউ অ্যানালাইজার বানাবেন, ঠিকঠাক প্রজেক্ট হিসেবে সেটা দেখতে এরকম হতো:
review-analyser/
├── .venv/ ভার্চুয়াল এনভায়রনমেন্ট (কখনো commit নয়)
├── .env গোপন key (কখনো commit নয়)
├── .gitignore
├── README.md
├── requirements.txt
├── data/
│ └── reviews.csv
├── notebooks/
│ └── 01-explore-reviews.ipynb
├── review_analyser/ আপনার প্যাকেজ (পাতা ৯)
│ ├── __init__.py
│ ├── classify.py
│ └── report.py
├── tests/
│ └── test_classify.py
└── main.py যেটা চালান, প্রোগ্রামের শুরু- একটা প্যাকেজ (
review_analyser/) আসল কোড রাখে, কাজ অনুযায়ী মডিউলে ভাগ করা।main.pyশুধু আর্গুমেন্ট পড়ে আর সেটাকে ডাকে। data/-এ ইনপুট ফাইল,notebooks/-এ খোঁজাখুঁজি, ক্রম বোঝাতে নম্বর দেওয়া।requirements.txt(পাতা ৯) দিয়ে যে কেউ এনভায়রনমেন্ট আবার বানাতে পারে।README.mdবলে প্রজেক্টটা কী করে আর কীভাবে চালাতে হয়।.gitignoreযেগুলো কখনো Git-এ যাওয়া উচিত নয়, সেগুলো বাইরে রাখে:
.venv/
.env
__pycache__/
.ipynb_checkpoints/
*.logটেস্ট: Python-কে দিয়ে কোড যাচাই
টেস্ট হলো একটা ছোট ফাংশন, যা আপনার কোড চালিয়ে assert দিয়ে উত্তর যাচাই করে। pytest টুল tests/-এ test_*.py নামের প্রতিটা ফাইল খুঁজে test_ দিয়ে শুরু হওয়া প্রতিটা ফাংশন চালায়। পাতা ৯-এর প্যাকেজের জন্য দুটো টেস্ট:
# tests/test_text.py
from my_ai_tools import clean, estimate_tokens
def test_clean_collapses_spaces():
assert clean(" a b ") == "a b"
def test_estimate_tokens_is_never_zero():
assert estimate_tokens("") == 1python -m pip install pytest
python -m pytest -q.. [100%]
2 passed in 0.01sদুটো বিন্দু, দুটো পাস। ভুল করে clean() বদলে ফেললে রান লাল হয়ে যায় আর ঠিক কোন যাচাই ব্যর্থ হলো তা বলে দেয়। AI কোডে মডেলের বাইরের অংশগুলো — পার্স করা, পরিষ্কার করা, যাচাই, খরচের সীমা — চারপাশের সবকিছু বদলানোর সময়ও ঠিক রাখার উপায় এটাই।
নিজে চেষ্টা করুন
- একটা নোটবুক খুলুন (Colab বা JupyterLab), pandas দিয়ে একটা CSV লোড করুন আর পাতা ১৫ থেকে একটা চার্ট আঁকুন।
- একটা সেল মান বদলে দুবার চালান, সেলটা মুছুন, তারপর Restart and Run All চালিয়ে দেখুন কী ভাঙে।
- নিজের একটা ছোট আইডিয়ার জন্য ওপরের প্রজেক্ট গঠনটা বানান,
.gitignore, একটা প্যাকেজ আর একটা পাস করা টেস্টসহ।