> For the complete documentation index, see [llms.txt](https://rakibul-hassan.gitbook.io/mlbook-titanic/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://rakibul-hassan.gitbook.io/mlbook-titanic/kaggle/why-r.md).

# ৪.৪. কেন শুরুতেই ‘আর’ প্রোগ্রামিং এনভায়রনমেন্ট?

**প্রশ্ন: কি শিখবো শুরুতে? ‘পাইথন’ না ‘আর’?**

সত্যি কথা বলতে আমি নিজেও পাইথন দিয়ে কাজ করতে চেয়েছিলাম। আপনিই বলুন, নতুন করে একটা জিনিস কেই বা শিখতে চায়? তার ওপর 'আর' এর মত নতুন একটা প্রোগ্রামিং এনভায়রনমেন্ট। আমি নিজেই কমিউনিকেশনের লোক, পাইথনে অনেক কাজ করতে হয়েছে এই ফিল্ডে। বন্ধুরাও পাইথন জানে।

মেশিন লার্নিং শিখতে গিয়ে বুঝলাম, ব্যাপারটা সেরকম কিছু নয়। মেশিন লার্নিং এর মূলে রয়েছে এর ডাটাসেট ঠিকমতো চেনা। আর এই ডাটাকে চিনতে আর ঠিকমত বুঝতে প্রায় অনেক বছর ধরেই পরিসংখ্যানবিদরা ব্যবহার করে আসছেন এই 'আর' এনভায়রনমেন্ট। "আর" এর এই এনভায়রনমেন্ট এতোই সহজ যে এটা শিখতে হয় না কেচেগণ্ডূষ করে। প্রতিটাই যেন একটা আলাদা কমান্ড।

ফিরে আসি আমাদের প্রশ্নে। যারা ডাটা সায়েন্স অথবা মেশিন লার্নিং শিখতে চান, তাদের শুরুর এই প্রশ্নটা খুবই ‘কমন’। বলতে গেলে প্রশ্নটা “ফ্যাক”এর ‘এক’ নম্বর প্রশ্ন। ‘ফ্যাক’ হচ্ছে “ফ্রিকুয়েন্টলি আস্কড কোয়েস্চেন”, মানে এই প্রশ্নটাই আসে ঘুরে ফিরে। দেশে বিদেশের প্রশিক্ষণগুলোতেও শুনেছি এই প্রশ্ন হাজারো বার। এর উত্তর যে আমি দেইনি তা নয়। দিয়েছিও অনেক অনেকবার। তবে উত্তর শুনে আমার মনে হয় পিছিয়ে যান অনেকে। ব্যাপারটার অনেকটাই ধারণা করতে পারি প্রশ্নকর্তার হাবভাবে। অনেকে ‘কনফিউজড’ হয়ে যান আরো। আর যারা ধরতে পারেন আসল ব্যাপারটা - তাদের অনেকেই এখন প্রতিষ্ঠিত।

মজার ব্যাপারটা অন্যখানে। বছরখানিক পর উনাদের অনেকের সাথে দেখা হয় ইন্ডাস্ট্রির অনেক মিটিংয়ে। যারা ‘কনফিউজড’ ছিলেন তখন - অনেকেই শুরু করতে পারেননি এখনো। ‘কেন শুরু করেননি’ প্রশ্নের সদুত্তর নেই ওনাদের।

আমার উত্তর থাকতো তিনটা ‘কীওয়ার্ড’ নিয়ে।

১. "আর"। শুরু করুন ‘আর’ দিয়ে। ‘আর’ ডাটা সাইন্সকে চেনায় অনেকটা ‘স্টাটিস্টিক্সের’ ধারায়। পানির মতো করে। আজ আমরা দৌড়াদৌড়ি করছি যে 'মেশিন লার্নিং' নিয়ে, সেই জিনিস পরিসংখ্যানবিদরা করছেন বহুদিন ধরে। কম্পিউটারের প্রসেসিং ক্ষমতা (জিপিইউ সহ) বেড়ে যাওয়ায় স্টাটিস্টিক্সের ভবিষ্যৎ দেখার কাজ মেশিনকে হস্তগত করেছেন সবাই। কম্পিউটার বিলিয়ন বিলিয়ন রেকর্ড প্রসেস করতে পারে চোখের নিমিষে। সত্যিকার অর্থে 'আর' ডাটাকে উল্টে পাল্টে চেনার একটা অসাধারণ টুল, কোন প্রোগ্রামিং এনভায়রনমেন্ট নয়।

২. 'আর' এর ডাটাকে চেনার ক্ষমতা। ‘এক্সপ্লোরেটরি ডাটা অ্যানালাইসিস’এ যেটা ‘আর’ পারে এক লাইনে - সেটা ‘পাইথনে’ হয়তোবা লাগছে পাঁচ ছয় লাইন। মিসিং ভ্যালু, ডাটা ক্লিনিং, প্রি-প্রসেসিং আরেকটা বড় জায়গা। ডাটাকে আসল জায়গাতে লাগানোর আগে এই কাজগুলো করতে ঘাম ছুটে যায় আমাদের। আর যাই হোক ভুল ডাটা নিয়ে 'প্রেডিকশন' করা থেকে না করা অনেক ভালো।

৩. ‘আর’এর লার্নিং কার্ভ অনেক ভালো। টুল হিসেবে শিখতে লাগবে দুই দিন। বাকিটা শিখে যাবেন ‘ক্যাগল’ প্রতিযোগিতায়। চাপে পড়ে। যখন শেখাতে একটা ‘পারপাজ’ থাকে (যেমন ক্যাগলে আপনাকে জিততে হবে সবার সাথে) তখন মানুষ শেখে না বুঝেই যে সে শিখছে। অর্থাৎ নিজের অজান্তেই শিখে ফেলে অনেক কিছু। মেশিন লার্নিংএর প্রোডাকশন সিস্টেম তৈরি হতে হতে নিজেও বুঝে যাবেন ‘পাইথন’। পাইথন সমস্যা নয়, অসাধারণ প্রোগ্রামিং এনভায়রনমেন্ট। এর ব্যাপ্তি অনেক। হেন জিনিস নেই করা যায় না এ দিয়ে। তবে ডাটা সাইন্স শেখার শুরুতে নয়।

সমস্যা কোথায়? কেন মানুষ শিখতে পারে না ডাটা সাইন্স? অথবা হারিয়ে ফেলেন আগ্রহ? কাহিনী কি?

সমস্যা শুধু তাদেরই যারা আগে থেকে ধরে নিয়েছেন উনি শিখবেন ‘পাইথন’। বা শিখেছেন ‘পাইথন’। মানে শুধু ‘পাইথন’। আর কিছু নয়। এই মানসিকতাই তাকে ফেলে দেয় পেছনে। এই মানসিকতাটা একদম ঠিক নয়। আমি নিজে ‘ক্যাগল’ কম্পিটিশনে লিডারবোর্ডে ওপরে ওঠার জন্য যা দরকার শিখেছি ওই মুহূর্তে। কেন নয়? কেন মাথা বেশি খাটালাম অহেতুক? সত্যিকার অর্থে - প্রতিটা ‘লার্নিং’ কাজে লাগে এই লাইনে।

ডাটা সাইন্সের জন্য আমাদের দরকার তিনটা ‘কোর’ স্কিলসেট। ১. ডাটা ম্যানিপুলেশন (ডাটা সাইন্সের ৮৫% হচ্ছে এই জিনিস) ২. ডাটা ভিজ্যুয়ালাইজেশন (‘আর’ এর জিজিপ্লট২ এখনো সেরা) ৩. মেশিন লার্নিং। আপনারাই জানেন এই তিনটার জন্য কি সেরা। আমার কথা অন্য। আগে ঠিক করুন কি সমস্যা সমাধান করবেন। তারপর বাঁছাই করুন তার টুল। সেটার জন্য যতগুলো টুল দরকার শিখবেন ততোগুলিই। আর যাই শেখেন না কেন 'চাকরি বাঁচাতে' ডাটাকে চিনতে হবে নিজের মতো করে। চাকরি বাঁচাতে দরকার মেশিন লার্নিংএর মডেল তৈরিতে শুরু থেকে শেষ পর্যন্ত 'ক্লিয়ার আন্ডারস্ট্যান্ডিং'। সেটা 'পাইথন' আর 'আর' জানেন কিনা তার ওপর নয়।

নিজের অভিজ্ঞতা আর অন্যান্য ডেভেলপারদের সাথে কথা বললে একটা 'পার্সপেক্টিভে' পাওয়া যায় এ ব্যাপারে। ডাটার 'প্রি-প্রসেসিং' হচ্ছে সবচেয়ে কষ্টকর কাজ। এই জিনিসের ওপর নির্ভর করে পুরো মডেলের আউটকাম। যতো ভালো অ্যালগরিদমই ব্যবহার করি না কেন ডাটা যদি তার মতো উপযোগী করে তৈরি না করা হয় তাহলে সেটার ফলাফল অন্যরকম হবে। আর সেকারণে 'আর' অনেক স্মার্ট এই জায়গায়। ডাটার 'প্রি-প্রসেসিং'এ কি কি আসে? ১. ডাটাকে ঠিকমতো পাওয়া (আমাদের দেশে তো ডাটাই পাওয়া যায়না ঠিকমতো) ২. ডাটার মধ্যে যে 'নয়েজ' আছে সেই জিনিসগুলোকে যতটুকু সম্ভব পরিষ্কার মানে 'ক্লিন' করা ৩. ডাটাকে মডেলের মতো করে 'সাইজ' করে নিয়ে আসা ৪. ওই ডাটাগুলোকে ঠিকমতো 'ভ্যালিডেট' করা ৫. ওই বিষয়টার ওপর যিনি 'সাবজেক্ট ম্যাটার এক্সপার্ট' আছেন তার কাছ থেকে ফীচারগুলো বুঝে কোন ডাটাকে ঠিকমতো গুরুত্ব দিতে হবে সেটা বোঝা (ডোমেইন এক্সপার্ট লাগবে এখানে, যেমন ক্যান্সারের প্রেডিকশন করতে লাগবে আসল ডাক্তার)। এর পরেই না মডেলিং! ধরুন, আমরা জানি - 'র‌্যান্ডম ফরেস্ট অ্যালগরিদম' সহ্য করতে পারেনা কোন ধরণের মিসিং ভ্যালু। তাহলে সেটাকে এমন কিছু করতে হবে মানে এমন ফরম্যাটে আনতে হবে যাতে অ্যালগরিদমটা ঠিক মতো চলে। দেখা গেছে ৭৫-৮০% সময় চলে যায় এই জায়গায়। মানে, 'প্রি-প্রসেসিং'য়ে। ১০% সময় যায় ভিজ্যুয়ালাইজেশনে। ৫% যদি মডেলিংয়ে যায় তাহলে হয়তোবা বাকি ৫% যাবে বাকি জিনিসে।

মেশিন লার্নিংয়ের স্তর দুটো। ‘মডেল তৈরি’ আর ‘প্রেডিকশন’। মডেলটা তৈরি হয় ব্যাচ প্রসেসে। আসল কাজ ওখানেই। ফলে, মডেল তৈরিতে লাগে যতো প্রসেস ইনটেনসিভ কাজ। এদিকে প্রেডিকশন হয় নিমিষে। রিয়েল টাইমে। মানে, অ্যালগরিদমের পারফরমেন্স সেটা ‘পাইথন’ অথবা ‘আর’ হোক, খুব একটা সমস্যা হয় না এই দুই প্ল্যাটফর্মে। সমান সমান দুজনে।

দুটোর লাইব্রেরিও সেয়ানে সেয়ানে। ‘আর’এর লাইব্রেরির সাপোর্ট বহুদিন ধরে। ভর করা যায় এমন লাইব্রেরির কথা বলছি আমি। পাইথন পরে এলেও এর আছে অসাধারণ কিছু লাইব্রেরি।

গতি চায় না কে? বিশেষ করে ডেভেলপমেন্টের সময়। এটা ঠিক, ‘আর’এর কোর সফটওয়্যার বেশ ধীর ছিলো একসময়। এখন এর গতি আগুনের মতো। অবিশ্বাস্য! ডেভেলপাররা পুরো জিনিসটা লিখেছেন নাই মানে শুরু থেকে। সি ল্যাঙ্গুয়েজ দিয়ে। প্রসেসরের পুরো ক্ষমতা নেবার মতো করে। পাইথন হাই লেভেল ল্যাঙ্গুয়েজ হবার কারণে কিছুটা ধীর। তবে সমস্যা করার মতো ধীর নয়। ‘আর’ এখানে কিছুটা জয়ী।
