Home »
Blog »
AI/ML Engineer সিরিজ » Series 02 » Episode 02
Variables আর Data Structures: ML data আসলে এখানেই বসে
list, dict, tuple, set — কোন data-র জন্য কোনটা (Series 02, Episode 02)
🟢 BEGINNER
Series 02 — AI Engineer-দের জন্য Python
Episode 02 / 09
📑 এই পর্বে যা যা আছে
- ১. গল্প: Rahim-এর প্রথম data নিয়ে মাথাব্যথা
- ২. আসল সমস্যা: data-কে কোথায় রাখব?
- ৩. variable আসলে কী (ML দৃষ্টিকোণে)
- ৪. চারটি core data structure: list, dict, tuple, set
- ৫. তিন লেভেলে বোঝা: কোনটা কখন
- ৬. Visual: একটা dataset কীভাবে বসে
- ৭. Code: এক row, অনেক row, feature dictionary
- ৮. list vs dict — speed কেন আলাদা
- ৯. Experiment: mutable বনাম immutable ফাঁদ
- ১০. বাংলাদেশের বাস্তব context
- ১১. AI Engineer-এর দৃষ্টিকোণ
- ১২. Boss Question
- ১৩. Job Requirement Decoder
- ১৪. সাধারণ ভুল
- ১৫. Interview Prep
- ১৬. হাতে-কলমে (Mini Exercise)
- ১৭. Project Connection
- ১৮. সারসংক্ষেপ ও পরবর্তী পর্ব
🧩 ১. গল্প: Rahim-এর প্রথম data নিয়ে মাথাব্যথা
Rahim একটা CSV file পেয়েছে — ৫০০টি job post, প্রতিটির title, company, salary, skills। সে এগুলো
Python-এ আনতে চায়, কিন্তু বুঝতে পারছে না — একটা job-কে কীভাবে রাখবে? পুরো dataset-কে কীভাবে রাখবে?
Nila (data scientist) বলল:
"Rahim, ML-এ ৮০% সময় যায় data নিয়ে। আর data নিয়ে কাজ শুরু হয় একটা সহজ প্রশ্ন দিয়ে —
'এই data-টা memory-তে কোন আকারে রাখব?' ভুল structure বাছলে কোড ধীর হয়, বাগ বাড়ে। ঠিক structure
বাছলে কোড ছোট, দ্রুত আর পরিষ্কার হয়।"
এই episode-এ আমরা ঠিক এটাই শিখব — AI/ML data-র চোখ দিয়ে Python-এর core data structure।
❓ ২. আসল সমস্যা: data-কে কোথায় রাখব?
ভাবুন একটা job post-এ আছে: title="ML Engineer", salary=80000, skills=["python", "sql"]।
এখন প্রশ্ন — title আর salary কি একসাথে রাখব? skills কি আলাদা? একই skill দুবার থাকলে কী হবে?
এসব প্রশ্নের উত্তরই আপনাকে বলে দেয় কোন data structure লাগবে।
Rule of thumb: ক্রম গুরুত্বপূর্ণ + পরিবর্তনযোগ্য → list; নাম দিয়ে খোঁজা → dict;
নির্দিষ্ট, অপরিবর্তনীয় → tuple; শুধু unique জিনিস → set।
📦 ৩. variable আসলে কী (ML দৃষ্টিকোণে)
variable হলো data-র একটা নাম। কিন্তু ML-এ variable-এর দুটো বিশেষ রূপ আছে যা মনে রাখা জরুরি:
feature (input, যেমন salary, experience) আর label/target (যা predict করব)।
Python-এ এগুলো সাধারণ variable-ই, কিন্তু নামকরণ পরিষ্কার রাখলে পুরো ML কোড বোঝা সহজ হয়।
# ML-এ পরিষ্কার নামকরণের অভ্যাস করুন
experience_years = 3 # একটা feature
monthly_salary = 80000 # আরেকটা feature
is_remote = True # boolean feature
job_title = "ML Engineer" # text feature
# Python dynamically typed: type নিজে থেকে ধরা হয়
print(type(experience_years)) # <class 'int'>
print(type(monthly_salary)) # <class 'int'>
print(type(is_remote)) # <class 'bool'>
🧱 ৪. চারটি core data structure: list, dict, tuple, set
| Structure | চরিত্র | ML-এ ব্যবহার |
| list | ordered, mutable, duplicate allowed | একগুচ্ছ row, একটা column-এর সব value, prediction result |
| dict | key→value, mutable, key unique | একটা record (feature name → value), config, JSON data |
| tuple | ordered, immutable | নির্দিষ্ট জোড়া যেমন (row, col), array shape, অপরিবর্তনীয় coordinate |
| set | unordered, unique elements | unique skill-এর সংগ্রহ, duplicate বাদ দেওয়া, membership test |
# list — একগুচ্ছ salary (order আছে, duplicate থাকতে পারে)
salaries = [80000, 60000, 80000, 120000]
# dict — একটা job record (নাম দিয়ে খোঁজা যায়)
job = {"title": "ML Engineer", "salary": 80000, "remote": True}
print(job["title"]) # ML Engineer
# tuple — অপরিবর্তনীয় জোড়া (যেমন dataset shape: 500 row, 4 column)
shape = (500, 4)
# set — শুধু unique skill
skills = {"python", "sql", "python"} # python দুবার দিলেও একবার থাকবে
print(skills) # {'python', 'sql'}
🎯 ৫. তিন লেভেলে বোঝা: কোনটা কখন
Level 1 — সহজ intuition:
list = একটা লাইনে দাঁড়ানো মানুষ (ক্রম আছে)। dict = নাম-ফোন নম্বরের ডায়েরি (নাম দিয়ে খুঁজি)।
tuple = সিল করা খাম (খোলা/বদলানো যায় না)। set = একটা ব্যাগে শুধু ভিন্ন ভিন্ন জিনিস (duplicate নেই)।
Level 2 — technical ভাবে:
list ও dict mutable (পরিবর্তনযোগ্য); tuple immutable।
dict ও set ভেতরে hash table ব্যবহার করে, তাই "আছে কিনা" খোঁজা গড়ে O(1)।
list-এ খোঁজা O(n)। এই পার্থক্য বড় data-তে বিশাল speed প্রভাব ফেলে।
Level 3 — AI Engineer-এর দৃষ্টিকোণ:
একটা record = dict; অনেক record = list of dict; JSON API response সাধারণত dict/list-এর mix।
পরে এই list-of-dict-ই Pandas DataFrame-এ রূপ নেয় (Series 03)। তাই এই ভিত্তি ঠিক থাকলে
Pandas অনেক সহজ লাগবে।
🖼️ ৬. Visual: একটা dataset কীভাবে বসে
Dataset (list of records)
[
{"title": "ML Engineer", "salary": 80000, "skills": {"python","sql"}},
{"title": "Data Analyst", "salary": 55000, "skills": {"sql","excel"}},
{"title": "AI Engineer", "salary": 120000,"skills": {"python","rag"}},
]
│
├── প্রতিটি {..} = একটা row = dict (feature নাম → value)
├── পুরো [ .. ] = অনেক row = list
└── skills = {..} = set (unique skill)
💻 ৭. Code: এক row, অনেক row, feature dictionary
# অনেক job = list of dict (real dataset যেভাবে থাকে)
jobs = [
{"title": "ML Engineer", "salary": 80000, "skills": ["python", "sql"]},
{"title": "Data Analyst", "salary": 55000, "skills": ["sql", "excel"]},
{"title": "AI Engineer", "salary": 120000, "skills": ["python", "rag"]},
]
# গড় salary বের করা
total = 0
for job in jobs:
total += job["salary"]
average = total / len(jobs)
print(f"Average salary: {average:.0f}") # Average salary: 85000
# সব unique skill (set দিয়ে duplicate বাদ)
all_skills = set()
for job in jobs:
all_skills.update(job["skills"])
print(sorted(all_skills)) # ['excel', 'python', 'rag', 'sql']
কেন এই approach? এই list-of-dict format-ই বাস্তবে API/JSON থেকে আসে, আর সরাসরি
pandas.DataFrame(jobs) দিয়ে table বানানো যায়। তাই এখনই এই pattern-এ অভ্যস্ত হওয়া লাভজনক।
⚡ ৮. list vs dict — speed কেন আলাদা
একটা skill dataset-এ আছে কিনা — এটা বারবার খুঁজতে হলে list ধীর, set/dict দ্রুত। কারণ set/dict
hashing ব্যবহার করে।
skills_list = ["python", "sql", "docker", "fastapi", "pytorch"]
skills_set = set(skills_list)
# list-এ খোঁজা: O(n) — একটা একটা করে মেলায়
print("pytorch" in skills_list) # True (কিন্তু ধীর, বড় data-তে)
# set-এ খোঁজা: গড়ে O(1) — সরাসরি hash
print("pytorch" in skills_set) # True (দ্রুত)
Interview tip: "list-এ membership test O(n), set/dict-এ গড়ে O(1)।" — এই এক লাইন অনেক interviewer শুনতে চায়।
🧪 ৯. Experiment: mutable বনাম immutable ফাঁদ
একটা বিখ্যাত bug: list mutable, তাই একটা list অন্য variable-এ assign করলে দুটোই একই object দেখায়।
a = [1, 2, 3]
b = a # b আর a একই list-কে দেখাচ্ছে!
b.append(4)
print(a) # [1, 2, 3, 4] <-- a-ও বদলে গেল!
# সমাধান: copy করুন
c = a.copy()
c.append(99)
print(a) # [1, 2, 3, 4] <-- এবার a অপরিবর্তিত
# tuple immutable, তাই এই বিপদ নেই
t = (1, 2, 3)
# t.append(4) # AttributeError — tuple বদলানো যায় না
যা লক্ষ্য করবেন: ML pipeline-এ একই data অনেক জায়গায় pass হয়। এই mutable ফাঁদ
না বুঝলে "data কেন নিজে নিজে বদলে গেল?" টাইপ বাগ ঘণ্টার পর ঘণ্টা খাবে।
🇧🇩 ১০. বাংলাদেশের বাস্তব context
একটা local e-commerce (যেমন Daraz-ধাঁচের) থেকে order data সাধারণত JSON-এ আসে — যা Python-এ
list-of-dict। প্রতিটি order একটা dict, সব order একটা list। unique customer বের করতে set,
product দাম গড় করতে list — এই চারটি structure দিয়েই দৈনন্দিন data কাজের অধিকাংশ হয়ে যায়।
👷 ১১. AI Engineer-এর দৃষ্টিকোণ
- API response আসে dict/list-এ → সরাসরি এই structure-এ কাজ শুরু।
- model-এর একটা input sample প্রায়ই dict (feature name → value)।
- duplicate সরাতে, unique জিনিস গুনতে set — data cleaning-এ প্রতিদিন লাগে।
- এই ভিত্তি শক্ত হলে Pandas, JSON, config সব সহজ।
💼 ১২. Boss Question
Boss: "data structure নিয়ে এত সময় দিচ্ছ কেন? কাজ তো একটাই — result দাও।"
উত্তর: ভুল structure বাছলে code ধীর হয় ও bug বাড়ে। ১ লাখ record-এ "এই customer আগে
এসেছে কিনা" list দিয়ে খুঁজলে কয়েক মিনিট, set দিয়ে খুঁজলে সেকেন্ড। মানে সঠিক structure = কম server খরচ,
দ্রুত delivery, কম bug — সরাসরি business value.
🔎 ১৩. Job Requirement Decoder: "Strong Python fundamentals / Data structures"
| প্রশ্ন | উত্তর |
| এর মানে কী? | list/dict/tuple/set সঠিকভাবে বাছাই ও ব্যবহার করতে পারা, complexity বোঝা। |
| কোম্পানি কেন চায়? | data নিয়ে দক্ষ ও দ্রুত কোড লিখতে; performance-সচেতন হতে। |
| কোন সমস্যা সমাধান করে? | ধীর কোড, অপ্রয়োজনীয় memory, membership/lookup bottleneck। |
| junior-এর কী জানা লাগে? | কোনটা কখন, mutable/immutable, list vs set lookup speed। |
| এখনই কী master লাগে না? | custom hash, collections-এর সব advanced type, memory profiling গভীরে। |
| GitHub-এ কীভাবে দেখাবেন? | flagship CLI-তে dict/set দিয়ে পরিষ্কার data handling। |
| Interview-তে কী? | "list vs tuple?", "dict lookup complexity?", "duplicate কীভাবে সরাবেন?" |
⚠️ ১৪. সাধারণ ভুল
ভুল ১: সবকিছুর জন্য list — ঠিক: lookup/unique দরকার হলে set/dict।
ভুল ২: b = a কে copy ভাবা — ঠিক: এটা একই object; দরকারে a.copy()।
ভুল ৩: dict-এ নেই এমন key সরাসরি অ্যাক্সেস (KeyError) — ঠিক: job.get("x", default)।
ভুল ৪: set-এ order আশা করা — ঠিক: set unordered; order লাগলে list বা sorted()।
🎤 ১৫. Interview Prep
প্রশ্ন ১: list আর tuple-এর পার্থক্য?
উত্তর: list mutable, tuple immutable; tuple সামান্য দ্রুত ও নিরাপদ (দুর্ঘটনায় বদলায় না)।
প্রশ্ন ২: dict lookup-এর time complexity?
উত্তর: গড়ে O(1), কারণ ভেতরে hash table।
প্রশ্ন ৩: duplicate কীভাবে সরাবেন?
উত্তর: set(my_list); order দরকার হলে list(dict.fromkeys(my_list))।
প্রশ্ন ৪: কখন set ব্যবহার করবেন?
উত্তর: শুধু unique জিনিস দরকার, বা দ্রুত membership test দরকার হলে।
✍️ ১৬. হাতে-কলমে (Mini Exercise)
১. একটা jobs list-of-dict বানান (৫টি job)।
২. সবচেয়ে বেশি বেতনের job-টির title বের করুন।
৩. সব job মিলিয়ে unique skill-এর একটা set বানান এবং কতটি unique skill আছে গুনুন।
৪. একটা skill (যেমন "python") কতটি job-এ আছে গুনুন।
🚀 ১৭. Project Connection
আমাদের Bangladesh Tech Career Assistant (V1)-এ প্রতিটি job হবে একটা dict, পুরো
collection হবে list, আর unique skill vocabulary হবে একটা set। আজকের এই structure-ই পরে Pandas
DataFrame (V2) হয়ে ML feature (V3) হবে।
📌 ১৮. সারসংক্ষেপ ও পরবর্তী পর্ব
✓ list=ordered/mutable, dict=key-value, tuple=immutable, set=unique
✓ record=dict, dataset=list of dict — যা পরে DataFrame হয়
✓ dict/set lookup গড়ে O(1), list O(n) — বড় data-তে বিশাল পার্থক্য
✓ mutable vs immutable ফাঁদ না বুঝলে "data নিজে নিজে বদলায়" টাইপ বাগ হয়
পরবর্তী Episode (S02E03): "Functions, Modules, Packages: কোড যখন notebook থেকে বড় হয়" —
একই কোড বারবার না লিখে function বানানো, আর flagship project-এর প্রথম folder কাঠামো তৈরি করা।