Saturday, June 29, 2019

প্রথমে দেখে মনে হবে এ আর এমন কী? একঘেঁয়ে এক জোড়া সমীকরণ। অথচ চিন্তাটা কত অসাধারণ! কেন অসাধারণ তা দেখার আগে একটা-দুইটা উদাহরণ দেখে নিলে মন্দ হয় না। আপাতত আমরা খুবই সাধারণ একটা উদাহরণ দেখব।

ধরুন, আমাদের কাছে খুবই সরল একটা সমীকরণ আছে। $y = \frac{x}{2} + 25 $।

একে প্যারামেট্রিক রূপ দেওয়া যাক। বিস্তারিত পরে বলার আগে আপাতত এটা বলে রাখি, প্যারামেট্রিক সমীকরণে আমরা দুটো চলকের (variable) সম্পর্ককে তৃতীয় অন্য আরেকটি চলক দিয়ে (সাধারণত যাকে t দিয়ে প্রকাশ করা হয়) প্রকাশ করি।

প্যারামেট্রিক করতে ধরি, $t=\frac{x}{2}$। অবশ্যই আপনি অন্য কিছুও ধরতে পারতেন। এখানে থেকে, $x=2 \times t$।

তাহলে, $y=\frac{2t}{2}+25 = t +25 $

অতএব, $y = \frac{x}{2}+ 25 $ সমীকরণকে প্যারামেট্রিক করে আমরা দুটো সমীকরণ পেলাম।

  • $x=2t$
  • $y = t +25 $
আমরা আরও কিছু উদাহরণ দেখব। তবে তার আগে একটু চিন্তা করি, কী লাভ হয় প্যারামেট্রিক সমীকরণ দিয়ে? 


$y = \frac{x}{2}+ 25 $ সমীকরণটা নিয়ে আবার চিন্তা করি। এটা দিয়ে $x$ ও $y$ এর সম্পর্ক বোঝানো হয়েছে। যেখানে $y$ নির্ভর করছে $x$ এর ওপর। এই সম্পর্ক নানান রকমের হতে পারে। আপাতত আমরা ধরে নিচ্ছি এখানে $x$ দ্বারা বোঝাচ্ছে একটি অফিসের জন্যে প্রতিদিন কয়টি কলম কেনা হচ্ছে। আর $y$ দ্বারা বোঝাচ্ছে কত পেইজ কাগজ লাগছে।

তাহলে, 10 টা কলম কিনলে কাগজ কেনা হবে $y=\frac{10}{2} + 25$। মানে ৩০ পেইজ।

আপাত দৃষ্টিতে দেখা যাচ্ছে, কাগজের সংখ্যা কলমের সংখ্যার ওপর নির্ভর করছে। অথচ বাস্তবে সেটা নাও হতে পারে।

হতে পারে কোনটা কয়টা কেনা হবে সেটা নির্ভর করছে ঐদিন অফিসে কত জন মানুষ লেখালেখি বিষয়ক কাজ করছে তার ওপর। এই সংখ্যাকে আমরা $t$ দিয়ে প্রকাশ করতে পারি। আমরা একটু আগেই $t$ এর সাথে $x$ ও $y$ এর সম্পর্ক বের করেছি। তাহলে ধরা যাক, কোনো এক দিন ঐ অফিসে ৩০ জন মানুষ কাগজে লেখালেখি করবে।

তাহলে, মোট কলম লাগবে, $x=2t$  বা $2 \times 30$, মানে ৬০ টি।

আর কাগজ লাগবে $y= t +25 = 30 + 25 = 65$। মানে কাগজ লাগবে ৬৫ পেইজ।

তাহলে আমরা দেখলাম, আসল কয়টি কলম বা কত পেইজ কাগজ কেনা হবে সেটা আসলে নির্ভর করছে তৃতীয় আরেকটি চলকের ওপর। কাগজ ও কলমের সংখ্যা একে ওপরের ওপর নির্ভর নাও করতে পারে। এখানেই প্যারামেট্রিক সমীকরণে কারিশমা।

এছাড়াও উচ্চতর নানান অ্যানালাইসিসে সমীকরণকে প্যারামেট্রিক করে নিলে কাজ করতে সুবিধা হয়।

এবার আরেকটা উদাহরণ দেখা যাক।
$$x^2+y^2=16$$
এটাকে আমরা চাইলে $t=x^2$ ধরেও প্যারামেট্রিক করতে পারি। সেক্ষেত্রে সমীকরণ দুটো হবে এমন-

  • $x=\sqrt{t}$
  • $y=\sqrt{16-t}$

এছাড়া আপনি অন্য যে কোনো কিছু ধরেও করতে পারেন। তবে কখনও কখনও বিশেষ কিছু উপায়ে করলে সমীকরণের মানে বোঝা সহজ হয়।

ত্রিকোণমিতি থেকে আমরা জানি, $sin^2t+cos^2=1$

এখানে আমরা কোণের জন্যে $\theta$ এর বদলে $t$ ব্যবহার করলাম। যেহেতু প্যারামেট্রিক সমীকরণে সাধারণত $t$ ব্যবহার করা হয়।

এখন আমরা চাইলে $x^2+y^2=16$ কে $sin^2t+cos^2=1$ এর মতো রূপ দিতে পারি। এভাবে-

\begin{eqnarray}
\frac{x^2}{16}+\frac{y^2}{16} &=& 1      \nonumber \\
\implies & (\frac{x}{4})^2 + (\frac{y}{4})^2=&1 \nonumber \\
\end{eqnarray}

এটাকে এখন $sin^2t+cos^2=1$ এর মতো দেখাচ্ছে। তাহলে আমরা লিখতে পারি,

$\frac{x}{4}=sint$ এবং $\frac{y}{4}=cost$

মানে,

  • $x=4 \space sint$ 
  • $y=4 \space cost$

দেখেই বোঝা যাচ্ছে এটা ৪ একক ব্যাসার্ধের একটি বৃত্ত। এখানে ৪ এর জায়গায় ১ থাকলে এটা হত একক বৃত্ত (unit circle)। মানে ব্যাসার্ধ ১ এককের বৃত্ত।

দুই জায়গায়ই ৪ না হয়ে কম বেশি হলে এটা হয়ে যেত পরাবৃত্তের (parabola) সমীকরণ। যেমন
  • $x=3 \space cost$
  • $y=2 \space sint$
আমরা দুটি চিত্রই এঁকে দেখতে পারি। আঁকব অবশ্যই R দিয়ে

প্রথমে পরাবৃত্ত একেঁ দেখা যাক।



প্যারামেট্রিক সমীকরণ থেকে আঁকা পরাবৃত্ত 

এবার তাহলে বৃত্তটাও এঁকে ফেলি।



প্যারামেট্রিক সমীকরণ থেকে আঁকা বৃত্ত 

বলাই বাহুল্য, এভাবে আকাঁআঁকির জন্যে প্যারামেট্রিক সমীকরণ ব্যবহার না করলে মুশকিলে পড়তে হয় অনেক সময়।

এর আগে একটি লেখায় আমরা দারুণ দারুণ নকশার ডিজাইন দেখেছিলাম। ওখানেও কিন্তু প্যারামেট্রিক সমীকরণ কাজে লাগানো হয়েছিল।

এভাবেই প্যারামেট্রিক সমীকরণ আমাদের জীবনকে সহজ করে তোলে। নান্দনিকও কি নয়? এমন সুন্দর সুন্দর ডিজাইন তো সে কথাই বলে। পাশাপাশি আমাদেরকে ভিন্ন দৃষ্টিকোণ থেকে চিন্তা করতে শেখায়।

সূত্র
১। বেটার এক্সপ্লেইন্ড
২। খান অ্যাকাডেমি
৩। Straighter Line
৪। MrsDobbsMath
৫। উইকিপিডিয়া
Category: articles

Thursday, June 27, 2019

১ ১ ২ ৩ ৫ ৮ ১৩ ...

দেখতে মনে হবে সাদামাটা কতগুলো সংখ্যা। অথচ কত অসাধারণ!

বুঝতেই পারছেন, পরপর দুটো সংখ্যা যোগ করে পাওয়া যায় পরের সংখ্যা। তো? এর মধ্যে আর এমন কী ই বা আছে?


আসলে গণিত যে সুন্দর হতে পারে তার অন্যতম ভাল উদাহরণ হলো এই সংখ্যাগুলো। নাম ফিবোনাচি সংখ্যা (Fibonacci number)।

কী সূর্যমুখী ফুল, কী শামুকের খোলস, কোথায় নেই এই ধারার কারিশমা। কিন্তু কীভাবে এই ধারা লুকিয়ে আছে প্রকৃতিতে? সংক্ষেপে এটা দেখেই আমরা দেখব কীভাবে আমরা সংখ্যাগুলো জেনেরেট করব।

আগেই দেখেছি, ফিবোনাচি সংখ্যাগুলো হলো যথাক্রমে  ১ ১ ২ ৩ ৫ ৮ ১৩ ২১ ---। অনেক সময় অবশ্য শুরুতে ০ কে রাখা হয়। মানে এভাবে- ০ ১ ১ ২ ৩ ---।

এবার একটা কাগজে ১ একক বাহু নিয়ে একটি বর্গ আঁকুন। পরের ফিবোনাচি সংখ্যাও ১। আগের বর্গের পাশে আরেকটি এক একক বাহুর বর্গ আঁকুন। এবার এ দুটি বর্গের ওপরে (নীচে আঁকলেও দুনিয়া ধ্বংস হবে না!) ২ এককের একটি বর্গ আঁকুন। এই তিনটি বর্গের পাশে আঁকুন ৩ এককের আরেকটি বর্গ। এভাবে এগিয়ে চলুন।

এভাবে যেতে থাকলে আমরা পাব নীচের আয়তক্ষেত্রটি।

ফিবোনাচি সংখ্যা নিয়ে আঁকা বর্গ থেকে পাওয়া আয়ত। 

এবার ক্রমান্বয়ে ছোট থেকে বড় বর্গের দিকে বর্গের কর্ণ বরাবর সর্পিল বাহু এঁকে যেতে থাকলেই আমরা পাব দারুণ একটি সর্পিল রেখা। আর হ্যাঁ, শামুকের খোলসে এমন সর্পিল নকশাই তো দেখি আমরা।

ফিবোনাচির মধ্যে লুকিয়ে থাকা নকশা 
ছবি: মাইক্রোসফট

সংখ্যাগুলোর হাজারো মজার মজার অ্যাপ্লিকেশন আছে। এর মধ্যে কিছু দেখতে পাবেন এই ভিডিওতে

একটি মজার সম্পর্কের কথা না বললেই নয়। ফিবোনাচি সংখ্যার সাথে সম্পর্ক আছে আরেক মজার ধ্রুবক সোনালী অনুপাতের (Golden ratio)। অনুপাতটির মান হলো ১.৬১৮...। মজার ব্যাপার হলো ফিবোনাচি সংখ্যা থেকে এটি পাওয়া যায়।

ফিবোনাচি সংখ্যাগুলোতে আবার একটু চোখ বুলিয়ে নেই।

১ ১ ২ ৩ ৫ ৮ ১৩ ২১ ৩৪ ৫৫ ৮৯ ১৪৪ ২৩৩ ৩৭৭ ---। ফিবোনাচি ধারার প্রতিটি সংখ্যাকে পরের সংখ্যা দিয়ে ভাগ দিতে থাকলে আমরা সোনালী অনুপাতের কাছাকাছি সংখ্যা পেতে থাকব।

\begin{array}{|c|c|}
\hline
Fibonacci \space number (x)& \frac{x[i+1]}{x[i]} \\ \hline
1 & 1.000 \\ \hline
1 & 2.000 \\ \hline
2 & 1.500 \\ \hline
5 & 1.667 \\ \hline
8 & 1.600 \\ \hline
13 & 1.625 \\ \hline
21 & 1.615 \\ \hline
34 & 1.619 \\ \hline
55 & 1.617 \\ \hline
89 & 1.618 \\ \hline
\end{array}

বুঝতেই পারছেন, যত বড় সংখ্যা নিতে থাকব, এই ভাগফল সোনালী অনুপাতের তত কাছে যাবে। দারুণ সংখ্যা সোনালী অনুপাত সম্পর্কে আরও জানতে উইকিপডিয়ার আর্টিকেলটা পড়ে নিন

এবার আমরা দেখবো, নান্দনিক এই সংখ্যাগুলো কীভাবে R প্রোগ্রামিং দিয়ে তৈরি করা যায়। কোডখানা নীচে দেওয়া হলো। ব্যবহারের সুবিদার্থে আমরা fibo নামে একটি ফাংশন বানিয়ে নিচ্ছি। আর ভেতরে থাকছে একটি for loop। প্রথমে একটি ফাঁকা ভেক্টর বানিয়ে নেওয়া হলো। এরপর ধারার প্রথম দুটি সংখ্যা ১ হওয়ায় আমরা আগেই সেটা বসিয়ে দিলাম। বাকি সংখ্যাগুলো ক্রমান্বয়ে যোগ করে তৈরি করা হলো।



এবার চাইলে আপনি fibo ফাংশন দিয়ে ইচ্ছেমতো সাইজের ফিবোনাচি ধারা তৈরি করে নিতে পারেন।যেমন প্রথম ২০টি সংখ্যা পেতে চাইলে-



ওপরের সোনালী অনুপাতগুলো R দিয়েই বের করেছি। চাইলে কোডটা দেখে রাখতে পারেন।



বিদায় নেবার আগে ফিবোনাচি ধারার আরও কিছু বাস্তব নমুনা দেখে নেওয়া যাক।

Cycas circinalis উদ্ভিদে। উদ্ভিদটি পাওয়া যায় দক্ষিণ ভারতে। 

ছবি: phillipsnaturalworld
ছবি: phillipsnaturalworld

আরও পড়ুন

R প্রোগ্রামিং: বাহারি ফুলের ডিজাইন
☛ গণিতের সবচেয়ে সুন্দর সমীকরণ 

সূত্র
১। R-bloggers
২। উইকপিডিয়া: Fibonacci number
৩। ইউটিউব: টেড টকের একটি সিগমেন্ট 
Category: articles
কমান্ড লাইন ব্যবহার করলে আপনার ডিভাইসের নিয়ন্ত্রণ থাকবে আপনার হাতে। ছোটভাই তুহিনের মতে তো কমান্ড লাইন দিয়ে কম্পিউটার কেন, মহাকাশ পর্যন্ত কাঁপিয়ে দেওয়া যাবে।

ডেটা সায়েন্সের কাজ করার জন্য কমান্ড লাইনে অনেকগুলো দারুণ টুল আছে। এছাড়া ভার্সন কন্ট্রোল ব্যবহার করতে গেলেও কমান্ড লাইনের কিছু প্রাথমিক কোড জানতে হয়। এমন কিছু কমান্ড জেনে নেওয়া যাক।

আরও পড়ুন
☛ কেন লিনাক্স ব্যবহার করবেন?

১। pwd

এই কমান্ড আপনাকে বলবে, এই মূহূর্তে আপনি কোন ডিরেক্টরিতে আছেন। R-এ আমরা এটা জানি getwd() কমান্ড দিয়ে। pwd হলো present working directory এর সংক্ষিপ্ত রূপ।

২। ls

এই কমান্ড আপনাকে জানিয়ে দেবে, আপনার বর্তমান ওয়ার্কিং ডিরেক্টরিতে কী কী কন্টেন্ট আছে। হোক সেটা ফাইল, বা অন্য ফোল্ডার বা ডিরেক্টরি।

৩। man

মনে করুন, আপনার একটা কমান্ডের নাম মনে আছে। কিন্তু ভুলে গেছেন কীভাবে ব্যবহার করবেন । লিনাক্স কমান্ড লাইনে প্রায় প্রতিটি টুলের সাথেই নানান অপশন আছে। অপশনগুলো বসাতে হয় সাধারণত কমান্ডের পর একটি হাইফেন (-) দিয়ে। যেমন ওপরের ls কমান্ডের সাথে -c, -h, -m বা -t ইত্যাদি নানান অপশন ব্যবহার করা যায়। নীচের কমান্ড আপনাকে ফাইল ও ডিরেক্টরির লিস্ট দেবে। তবে সর্বশেষ যে ফাইল বা ফোল্ডার নিয়ে কাজ করেছেন সেটার নাম আগে থাকবে।



এখন, এই অপশনগুলো আপনি কীভাবে জানবেন? ভয় নেই। এর জন্য গুগোল করতে হবে না। জাস্ট টাইপ করুন man ls। অথবা যে টুল সম্পর্কে জানতে চান man লিখে সেই কমান্ড লিখে এন্টার চাপুন। চাইলে জেনে রাখুন, man আসলে ম্যানুয়াল (manual) এর সংক্ষিপ্ত রূপ।

৪। cd

মনে করুন, আপনি এখন যে ডিরেক্টরিতে আছেন, সেটা থেকে অন্য কোথাও যেতে চান। তাহলেই আপনার লাগবে cd কমান্ড। শুধু cd লিখে এন্টার চাপলে আপনি চলে যাবেন হোম ডিরেক্টরিতে। আবার cd .. আপনাকে নিয়ে যাবে আগের ডিরেক্টরিতে। cd মানে change directory।

আবার ধরুন এখন যে ফোল্ডারে আছেন তাতে work নামে আরেকটি ফোল্ডার আছে। এতে যেতে চাইলে কমান্ড হবে-



আবার work ডিরেক্টরিতে যদি আবার recent নামে আরেকটি ফোল্ডার থাকে, আর আপনি সেখানেই যেতে চান, তবে-



৫। touch

কমান্ডটাকে চাইলে জটিল করেও বলা যায়। তবে একেবারে সহজ করে বললে এটার কাজ হলো ফাঁকা ফাইল তৈরি করা। ফাইল তৈরির সময় আপনার হাতে কোনো ডেটা না থাকলে এই কমান্ড দিয়ে ফাইল বানিয়ে রেখে দিতে পারেন। নীচের কমান্ড mytext.txt নামে একটি ফাইল তৈরি করবে।



ফাইলটা অবশ্যই আপনার ওয়ার্কিং ডিরেক্টরিতে তৈরি হবে। ধরুন linux ফোল্ডারের ভেতরে ne.txt নামে ফাইল তৈরি করবেন। তাহলে এই কমান্ড-



এখন চাইলে আপনি  ls কমান্ড দিয়ে চেক করে নিতে পারেন এই নামে ফাইল আছে কি না।

৬। nano

শুধু ফাইল তৈরি করে বসে থাকলে তো হবে না। ফাইলে কিছু তথ্যও তো রাখা চাই। nano কমান্ড আপনাকে ফাইল ইডিট করার সুযোগ দেবে। ঠিক touch কমান্ডের মতোই nano লিখে ফাইলের নাম path লিখুন।

ধরুন, আমাদের ওয়ার্কিং ডিরেক্টরিতে employee.txt নামে একটি ফাইল আছে। তাহলে একে ইডিট করতে-



ফাইলটা যদি আগে থেকে না থাকে, তবে এই কমান্ডের মাধ্যমে একই সাথে ফাইলটা তৈরিও হবে আবার সাথে সাথে ইডিট মুডে চলে যাবে। ধরুন, আমরা ফাইলটাতে নীচের তথ্যগুলো রাখব। মাউসে রাইট ক্লিক করলেই তথ্যগুলো পেস্ট হয়ে যাবে।

100  Sultan  Manager    Sales       5,000
200  Niaz  Developer  Technology  5,500
300  Abir Sysadmin   Technology  7,000
400  Riyad   Manager    Marketing   9,500
500  Kabir  DBA        Technology  6,000

কিছু লিখে বা পেস্ট করে সেভ করতে চাপুন: ctrl + o। এবার এন্টার চেপে কনফার্ম করুন। ইডিট মুড থেকে বের হয়ে আসতে চাপুন ctrl + x।

৭। cat

এবার আমাদের কাছে employee.txt নামে ফাইল আছে। আমরা এর সব কন্টেন্ট দেখতে চাই। অথবা অন্য কন্টেন্ট জোড়া দিতে চাই। তাহলেই আপনার লাগবে cat কমান্ড।




আরও বিস্তারিত জানতে লিখুন man cat।

৮। echo

এটার সাধারণ ব্যবহার হলো টার্মিনাল কিছু প্রিন্ট করতে। যেমন Hello world প্রিন্ট করতে-



তবে এটা দিয়ে আরও দারুণ দারুণ কাজও করা যায়। যেমন nano ব্যবহার না করেই কোনো ফাইলে টেক্সট যুক্ত করতে চাইলে echo ব্যবহার করতে পারেন।



এই কমান্ড echo এর ভেতরের লাইনটি employee.txt ফাইলের শেষে যুক্ত করবে। এখানে শুধু '>' চিহ্ন ব্যবহার করলে আগের কন্টেন্ট মুছে যাবে। এটা ব্যবহার করতে হবে সাবধানে। আসলে এটা কাজে লাগে আগে থেকে ঐ নামে কোনো ফাইল না থাকলে। আগে থেকে ফাইল থাকলে তার শেষে নতুন তথ্য যুক্ত করতে সবসময় '>>' ব্যবহার করুন।

এই কমান্ডকে অন্য কমান্ডের ইনপুট হিসেবেও ব্যবহার করা যায়। যেমন, bc কমান্ড দিয়ে আমরা হিসাব-নিকাশ করি। দুটো সংখ্যা যোগ করা যায় এভাবে-



এখানে '|' কে বলা হয় পাইপ অপারেটর। এই কমান্ড দিয়ে এক কমান্ডের রেজাল্টকে আরেক কমান্ডের ইনপুট হিসেবে ব্যবহার করা যায়।

৯। mkdir

এটা আসলে make directory এর সংক্ষিপ্ত রূপ। বুঝতেই পারছেন, নতুন ডিরেক্টরি বানাতে এটা ব্যবহার করবেন। নীচের কোড ওয়ার্কিং ডিরেক্টরিতে linux নামে ফোল্ডার বানাবে।



বানানো হয়ে গেলে অবশ্যই ls কমান্ড দিয়ে চেক করে নিতে পারেন।

১০। rm

ফাইল বানালে ডিলিট করাও দরকার হবেই। এইজন্যেই remove এর সংক্ষিপ্ত রূপ rm। তবে directory ডিলিট করতে হলে কমান্ড হবে rmdir। নীচে আমরা এই প্রসেসটা বিস্তারিত দেখাচ্ছি-



বোঝার জন্যে এক লাইন করে করে রান করুন।


১১। passwd

পাসওয়ার্ড চেঞ্জ করতে ও নতুন পাসওয়ার্ড সেট-আপ করতে।

১২। mv

এটা ব্যবহার করবেন ফাইল স্থানান্তর করতে। আবার মজার ব্যাপার হলো, ফাইল রিনেইম করতেও এই কমান্ড ব্যবহার করা যায়। মনে করি, আমাদের ওয়ার্কিং ডিরেক্টরিতে sum.txt নামে একটি ফাইল আছে। একে হোম ডিরেক্টরিতে নেব এভাবে-



ফাইল রিনেইম করা তো আরও সহজ।



আপাতত আমরা এখানেই থামছি। আরও অ্যাডভান্সড লেভেলে যাবার আগে নীচের নিবন্ধগুলো পড়ে নিতে পারেন।

 ☛ লিনাক্স ও ডেটা সায়েন্স: একটি সরল টেক্সট মাইনিং
 ☛ লিনাক্স ও ডেটা সায়েন্স: tr কমান্ডের কারিশমা
 ☛ লিনাক্স টেক্সট প্রসেসিং: নির্দিষ্ট প্যাটার্নের পর সব ডিলিট করুন সহজে
Category: articles

Saturday, June 15, 2019

কে সেরা? পাইথন একটি জেনারেল-পারপাজ ল্যাংগুয়েজ হওয়ায় সার্বিকভাবে অবশ্যই পাইথনই সেরা। কইম্পিউটার প্রোগ্রামিং এর জগতের সবকিছুই পাইথন দিয়ে করা যায়। তাই C, C++, Java প্রোগ্রামিংগুলো ক্রমাগত পাইথনের পেছনে পড়ে যাচ্ছে।

তবে এখানে আমরা কথা বলছি ডেটা সায়েন্স নিয়ে। যেখানে R-কে বলা হয় লিংগুয়া ফ্র্যাংক্যা। মানে সহজাত বা কমন ভাষা। তবে পাইথন এখানেও অন্যতম সেরা ল্যাংগুয়েজ।



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

ওয়েবে এই দুটো ল্যাংগুয়েজ নিয়ে প্রচুর আলোচনা/তুলনা আছে। যার উল্লেখযোগ্য একটা অংশ অনিরপেক্ষ। দেখা যাক, আমরা কতটা অনিরপেক্ষ থাকতে পারি।

শেখা
অনেকেই বলেন পাইথন R এর চেয়ে সহজে শেখা যায়। অথচ পাইথনে ডেটা সায়েন্সের কাজ শুরু করতে গেলেই অনেকগুলো প্যাকেজ শিখতে হবে। এই যেমন NumPy, Pandas, matplotlib। অথচ R-এ একজন সাধারণ মানুষও মুহুর্তের মধ্যেই জটিল জটিল সব কাজ করা শুরু করে দিতে পারবেন। ম্যাট্রিক্স ক্যালকুলেশন, প্লটিং, মডেলিং ইত্যাদি।

প্যাকেজ
R প্যাকেজের মূল রিপো হলো CRAN। যার পূর্ণরূপ কম্প্রিহেন্সিভ R আর্কাইভ নেটওয়ার্ক। এই আর্টিকেল লেখার সময় এখানে প্যাকেজ সংখ্যা ১৪৪৪০। এছাড়াও গিটহাব ও বায়োকন্ডাক্টর (বায়োইনফরমেটিক্স নিয়ে) ওয়েবসাইটে প্রচুর প্যাকেজ আছে।

অন্য দিকে পাইথন প্যাকেজের সংখ্যা প্রায় ১ লাখ ৮৩ হাজার। তবে মনে রাখতে হবে, সব কিন্তু ডেটা সায়েন্সের জন্য নয়। ডেটা সায়েন্সের কথা চিন্তা করলে আসলে পাইথন অনেক পিছিয়ে আছে। বেশিরভাগ কাজ করতে গেলেই আপনি R-এ রেডিমেড প্যাকেজ পেয়ে যাবেন। পাইথনে অনেক সময়ই পাবেন না সেটা।

আর কাঙ্খিত প্যাকেজ খুঁজেও পাওয়াটাও পাইথনে R-এর চেয়ে বেশ কঠিন।

কোডের পরিচ্ছন্নতা
এটা অবশ্য একজনের কাছে এক রকম ভাল লাগে। তবে অন্য প্রায় সব ল্যাংগুয়েজের চেয়ে পাইথনের কোডগুলো খুব বেশি পরিচ্ছন। ব্র্যাকেট-ট্যাকেটের ব্যবহার খুব কম বা না করেই কাজ চালিয়ে নেওয়া যায়।



কিন্তু একই রকম কাজ R-এ একটু কঠিন।



তবে সেটা নতুন নতুন কিছুদিনই। শেখা হয়ে গেলে এটা বড় ব্যাপার না। তবে বড় কাজের ক্ষেত্রে এটা অনেক সময় বড় ব্যাপার হয়ে ওঠে আবার।

পরিসংখ্যানিক নির্ভুলতা
R তৈরিই হয়েছে পরিসংখ্যানের কাজের জন্যে। অনেককেই দেখা যায়, পরিসংখ্যান পারুন বা না পারুন, মেশিন লার্নিং নিয়ে মেতে থাকেন। পরিসংখ্যানকে অবজ্ঞা করতেও জুড়ি নেই এদের। সেদিন একজনকে বলতে শোনা গেল, ডেটা ট্রান্সফর্ম করে গড় ০ আর ভেদাঙ্ক (Variance) ১ করলে নাকি নরমাল (গাউসিয়ান) ডিস্ট্রিবিউশন হয়। R-এ আপনি দেখতে পাবেন পরিসংখ্যানবিদদের গড়া থিওরির নিজেদের দ্বারাই ইমপ্লিমেন্টেশন। আস্থার জায়গাটা এখানে বেশি।

R-কে বলা হয়,
R is written by statisticians, for statisticians 
ফলে R-এর কম্পিউটেশন বেশিরভাগ ক্ষেত্রেই নির্ভরযোগ্য হাত থেকে আসা।

মেশিন লার্নিং
এখানে পাইথনকে একটু বেশি কৃতিত্ব দিতে হয়। সাধারণত R বনাম পাইথনের আরেক নাম হলো পরিসংখ্যান বনাম কম্পিউটার সায়েন্স (CS)। মেশিন লার্নিং এর নিউরাল নেটওয়ার্কে (NN) CS-এর বেশি অবদান থাকায় পাইথনে NN সহজে করা যায়। keras নিয়ে RStudio এর কাজের কল্যাণে R-ও পিছিয়ে নেই অবশ্য।

অন্য দিকে মেশিন লার্নিং এর র‍্যান্ডম ফরেস্ট অ্যালগোরিদম নিয়ে পরিসংখ্যানের লোকেরা বেশি কাজ করেছেন। এ ক্ষেত্রে তাই R এগিয়ে। এছাড়া R-এ মেশিন লার্নিং এর অনেকগুলো কাজ বিল্ট-ইন আছে। নতুন কোনো প্যাকেজ লাগে না। ওদিকে caret  প্যাকেজ তো প্রায় ১৫০ মেশিন লার্নিং অ্যালগোরিদমকে দারুণভাবে গেঁথে ফেলছে।

তবে এখানে পাইথন এগিয়ে থাকার একটি কারণ হলো বিভিন্ন প্রতিষ্ঠানে পাইথন সহজ ব্যবহার করা যায়। আগেই বলেছি, পাইথন জেনারেল-পারপাজ ল্যাংগুয়েজ। ফলে মেশিন লার্নিং থেকে প্রাপ্ত ফলাফল সহজেই ইমপ্লিমেন্ট করতে চাইলে পাইথনেই তা করা যায়।

উল্লেখ্য, আমাদের এই সাইটের (সহ এইরকম ও আরও নানান রকম অসংখ্য সাইটের) অরিজিনাল টেমপ্লেট পাইথনে লেখা।

প্যারালেল কম্পিউটেশন
R বা পাইথন কারোই মূল ভার্সনে মাল্টিকোর কম্পিউটেশনের ভালো ব্যবস্থা নেই। দুটোর জন্যেই এক্সটারনাল লাইব্রেরি ব্যবহারের ভালো সূযোগ আছে অবশ্য।

C/C++ ইন্টারফেস
পাইথনে C/C++ এর ইন্টারফেস হিসেবে swig এর মতো টুল থাকলেও R এর Rcpp এর মতো পাওয়ারপুল টুল নেই। Pybind11 প্রস্তুত হলে পাইথন একটু ভালো হবে অবশ্য। এদিকে R আবার নিয়ে আসছে ALTREP। পারফরম্যান্স ও ব্যবহার দারুণ হবে এটি দিয়ে।

কোডের ধারাবাহিকতা
এখানেও R পিছিয়ে আছে। বিশেষ করে বেস R ও Tidyverse এর মধ্যে যথেষ্ট পার্থক্য বিদ্যমান। এছাড়াও বিভিন্ন প্যাকেজে একই কাজ নানানভাবে ইমপ্লিমেন্ট করা হয়েছে। এটা খুব বিরক্তিকর।

অনলাইন হেল্প 
প্রোগ্রামিং এর জগৎ হেল্প ছাড়া অচল। কাজ করতে গেলে হেল্প দরকার হবেই। সমস্যায় পড়বেন। ডকুমেন্টেশন দেখবেন। অন্য কোথাও সমাধান খুঁজবেন। গুগোলে সার্চ দেবেন। সমাধান পেয়ে যাবেন। এটা যত দ্রুত পারবেন ততই ভালো। তবে এক্ষেত্রেও R দারুণ। helP() লিখে কি-ওয়ার্ড লিখলেই চলে আসবে সমাধান। বা ?keyword বা ??keyword।

সোজাসাপ্টা
যে কাজগুলো R-এ এক/দুই লাইনের কাজ, বেশিরভাগ ক্ষেত্রেই সেসব কাজ পাইথনে একগাদা কোড লিখতে হবে।

শেষ কথা
কে ভালো? 

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

আরও জানতে পড়ুন- Datacamp: R vs Python 
Category: articles

Tuesday, June 11, 2019


ধরুন আমাদের কাছে replace.txt নামে একটি ফাইল আছে। এতে আছে অনেকগুলো ওয়েবপেইজের ঠিকানা (URL)। ধরা যাক, ফাইলের শুরুর অংশ এমন:

google.com/funny
unix.stackexchange.com/questions
isuckatunix.com/ireallydo

আমরা এখান থেকে .com এর পরের অংশটা মুছে ফেলতে চাই। কাজটা করা যায় অনেকভাবেই। তবে আমার মতে সবচেয়ে সহজ হলো sed কমান্ড। এছাড়াও awk কমান্ড দিয়েও করা যায়। করা যায় ex কমান্ড দিয়েও। তবে আমরা আপাতত শুধু sed এবং awk দিয়ে শিখব।

sed কমান্ড

কমান্ডটা কীভাবে কাজ করে দেখতে আগে অন্য একটা উদাহরণ দেখা যাক। ধরুন আমরা Go শব্দটার G-কে P বানিয়ে ফেলতে চাইল। তাহলে কোড হবে-
echo "Go" | sed 's/G/P/'
আউটপুট: Po

বুঝতেই পারছেন s এর পরে স্ল্যাশ ("/") দিয়ে যে মুছতে চাই সেটা লিখব। আবার স্ল্যাশ দিয়ে যেটা বসাতে চাই সেটা।

এবার তাহলে replace.txt ফাইলে ফিরে আসা যাক। আমরা .txt ফাইল নিয়ে দেখাচ্ছি, কিন্তু তার মানে এই নয় যে অন্য ফাইলে এটা কাজ করবে না। কাজ করবে যে-কোনো টেক্সট ফাইলের জন্যেই। সেটা হতে পারে r বা পাইথন স্ক্রিপ্ট।

তাহলে .com এর পরের অংশ মুছতে কমান্ড হবে-
sed 's/.com.*/.com/' replace.txt
আর আপনি যদি .com সহ মুছে ফেলতে চান, তাহলে পরের .comটা ফেলে দিলেই হলো। 
sed 's/.com.*//' replace.txt
sed কমান্ডের কারিশমা 
তবে এখানে প্রাপ্ত আউটপুট টার্মিনালে প্রিন্ট হবে, কিন্তু কোথাও সেভ হবে না। কোনো ফাইলে সেভ করতে শেষে > filename.extension বসাতে হবে। অথবা >>। যদি বর্তমান কোনো ফাইলের শেষে এটা যোগ করতে চান। যেমন-
sed 's/.com.*//' replace.txt > rep2.txt
এখন নতুন সৃষ্ট rep2.txt ফাইল দেখতে cat কমান্ড ব্যবহার করুন। 
cat rep2.txt
তবে ফাইল বড় হলে পুরো ফাইল না দেখে উপরের কিছু লাইন দেখতে পারেন। 
head -4 rep2.txt
awk কমান্ড

cat replace.txt | awk -F '\\.com' '{print $1".com"}'
এখানে '\$1' এর কাজ হলো এক নম্বর কলাম প্রিন্ট করা। আর তার আগে -F অংশ দিয়ে লাইনগুলোকে .com পজিশনে আলাদা কলামে ভাগ করা। তার মানে এখন প্রতি লাইন দুই কলামে ভাগ হয়ে গেল। এবার এখান থেকে '\$1' দিয়ে প্রথম কলাম নিয়ে নিলাম। তবে যেহেতু -F দিয়ে .com পজিশনে লাইন বিভক্ত হয়েছে, সে কারণে .com কলাম সেপারেটর হিসেবে কাজ করেছে। সাধারণ csv ফাইলে যেখানে থাকে কমা। এখন .com তো আমরা এখানে মুছতে চাই না। তাই '\$1' এর সাথে আবার .com রেখে দিয়েছি।

সূত্র
১। Stackoverflow
২। Lifewire
Category: articles