Python for AI/Errors ও Files/Lesson 31
CSV
Tabular data-র সবচেয়ে common format — csv module দিয়ে পড়া ও লেখা, DictReader/DictWriter, newline="", সব মান যে string হয়ে আসে, আর নোংরা data পরিষ্কার করা।
- সময়
- 22 মিনিট
- Exercise
- 1
- Challenge
- 1
- Quiz
- 3 প্রশ্ন
সহজ ভাষায়
CSV (Comma-Separated Values) হলো সবচেয়ে সহজ table format — প্রতিটা লাইন একটা row, comma দিয়ে column আলাদা:
name,dept,cgpa
Rafi,CSE,3.4
Mim,EEE,3.9
Excel আর Google Sheets থেকে export করা যায়, আর Kaggle-এর বেশিরভাগ dataset CSV-তে।
কেন দরকার?
তোমার প্রথম ML project-এর data প্রায় নিশ্চিতভাবেই একটা CSV — house prices, student performance, customer churn। Pandas দিয়ে এক লাইনে পড়া যাবে (pd.read_csv), কিন্তু ভেতরে কী হয় সেটা বোঝা জরুরি — বিশেষ করে যখন data নোংরা।
কেন নিজে split(",") করবে না?
split ভুল করে quote-এর ভেতরের comma-তেও ভাগ করেছে। csv module CSV-র সব নিয়ম (quote, escape, নতুন লাইন) জানে।
পড়া: csv.reader আর csv.DictReader
| প্রতিটা row | কখন | |
|---|---|---|
csv.reader | list: ["Rafi", "CSE", "3.4"] | Header নেই, বা position দিয়ে কাজ |
csv.DictReader | dict: {"name": "Rafi", ...} | Header আছে — প্রায় সবসময় এটাই ভালো |
সবচেয়ে common ভুল:
row["cgpa"]হলো string"3.4", সংখ্যা না।"3.4" > "10"=True! তুলনা বা হিসাবের আগেfloat()করো।
লেখা: csv.writer আর csv.DictWriter
খেয়াল করো: "fine-tuned, 3 epochs"-এ comma আছে, তাই csv module নিজেই quote দিয়েছে।
Exercise
Exercise
Column-এর গড়
average_column(path, column) function লেখো যেটা একটা CSV file পড়ে নির্দিষ্ট column-এর মানগুলোর গড় return করে।
csv.DictReader ব্যবহার করো। মনে রেখো — CSV থেকে সব মান string হিসেবে আসে।
Quiz
Challenge
Challenge
নোংরা CSV পরিষ্কার করো
clean_csv(in_path, out_path) function লেখো যেটা একটা নোংরা name,age,city CSV পড়ে পরিষ্কার একটা CSV লেখে:
- প্রতিটা মানের আগে-পরের space কাটবে
- যেসব row-এ কোনো মান খালি, বা
ageপূর্ণসংখ্যা না — সেগুলো বাদ cityTitle Case করবে ("dhaka"→"Dhaka")- Output-এ একই header (
name,age,city) - কতগুলো row রাখা হলো সেই সংখ্যা return করবে
বাস্তবে কোথায় ব্যবহার হয়?
একটা student dataset থেকে department অনুযায়ী গড় CGPA — groupby-এর হাতে-কলমে সংস্করণ:
Pandas-এ এই পুরো কাজটা হবে এক লাইনে: df.groupby("dept")["cgpa"].mean()। কিন্তু এখন তুমি জানো সেই এক লাইন ভেতরে কী করে।
Interview প্রশ্ন
- Beginner: CSV কী?
csv.readerআরcsv.DictReader-এর পার্থক্য কী? - Intermediate: CSV-তে type information না থাকায় কী কী সমস্যা হতে পারে? (যেমন phone নম্বরের শুরুর 0 হারিয়ে যাওয়া,
"N/A") - Advanced: বড় dataset-এর জন্য CSV-র বদলে Parquet কেন ব্যবহার করা হয়? (Column-ভিত্তিক, compressed, type সংরক্ষণ করে।)
এরপর কী?
এই পুরো module-এ বারবার with open(...) as f: লিখেছি। এই with আসলে কী করে, আর নিজের জন্য কীভাবে বানানো যায়? পরের lesson: Context Managers।