Tuesday, September 8, 2020

অনলাইন ক্লাসের জন্য প্রতিদিন প্রেজেন্টেশন স্লাইড বানাতে হয়। MS পাওয়ারপয়েন্ট স্লাইডকে বিদায় জানিয়েছি এক বছর আগে। এখন স্লাইড বানাই কোড লিখে লিখে। ব্যবহার করি এক গাদা ল্যাংগুয়েজ। অন্তত সাতখানা। R, Markdown, Javascript, HTML, CSS, Tex (Latex) ও bash। প্রতিটা ল্যাংগুয়েজই অসাধারণ। মিলেমিশে টিমওয়ার্ক করে আমার মনের মতো স্লাইড বানিয়ে দেয়।

 


তা কোনটা কেন ইউজ করি?
R: বহুমুখী কাজের জন্য। প্রথমত Rstudio এর মাধ্যমে স্লাইড ফাইলগুলো এর মধ্যেই তৈরি করি। তবে R এর মূল অবদান আরও বড়। আমার স্লাইডে মাঝেমধ্যেই গ্রাফ বা টেবিল ও সেগুলোর হিসাব-নিকাশ থাকে। এই কাজগুলো R অটো করে দেয়। প্লট বা গ্রাফ এঁকে সেটাকে পিসিতে সেভ করে তারপর ইনসার্ট করার কোনো ঝামেলা নেই। ডেটা আর কোড লিখে দেব। গ্রাফ বা রেজাল্ট অটো চলে আসবে। ইডিট করা অনেক flexible। কোনো ভুল হলে নতুন করে গ্রাফ বানিয়ে আবারও ইনসার্ট করা- সেই দিন এখন অতীত।
 
Markdown মূলত R এ তৈরি ফাইলকে সুন্দর করে পাবলিশ করে দেয়।
এটাকে MS Word এর বিকল্প ভাবতে পারেন। Rstudio তে .Rmd ফাইলগুলোই R এর মধ্যে Markdown implement করিয়ে দেয়।
সাথে revealjs প্লাগইন ফাইলটাকে সুন্দর স্লাইড আকারে পাবলিশ করতে হেল্প করে। revealjs আবার Javascript দিয়ে করা। js হলো Javascript এর abbreviation।
 
CSS: স্লাইডের ওভারঅল থিম নির্ভর করে সরল এই ল্যাঙ্গুয়েজটার ওপর। styles.css নামে ফাইলটা প্রোজেক্ট ফোল্ডারে রেখে দিলেই কেল্লা ফতে!
 
আর HTML ছাড়া তো css ও js ইমপ্লিমেন্ট করা যাবে না। তাই তাকেও রাখতে হলো। বিশেষ করে দুই বা বহু কলামের কন্টেন্ট জাভাস্ক্রিপ্ট দিয়ে বানাতে গেলে HTMLও লাগে। আবার ক্লিক করলে দেখা যাবে এমন js script এর জন্য দরকার html।
 
Javascript এর ব্যবহার অলরেডি বলাই হয়ে গেছে। revealjs প্লাগইন দিয়ে Rmd ফাইলকে স্লাইড আকারে পাবলিশ করতে শুরুতেই js লাগছে। R এর মধ্যে এটা আছে revealjs package হিসেবে। আরও বেশ কিছু কাজে দারুণ পাওয়ারপুল js ভাষাটা ইউজ করা হয়, যার কিছু উদাহরণ অলরেডি বলেছি।
 
Tex (উচ্চারণ টেক) এর প্রশংসা তো করে শেষ করাই যাবে না। গণিতের যত কঠিন সমীকরণই দেবেন Tex সেটা পাব্লিশ করে দেবেই। Tex এর জনপ্রিয় implementation লেটেক (Latex) ইউজ করি এ কাজের জন্য।
 
bash মূলত একটি লিনাক্স শেল বা কমান্ড লাইন। এটা ইউজ করি মূলত Git ও Github এর জন্য। কাজ করা ফাইলগুলো নিয়মিত ট্র্যাক করি এর মাধ্যমে। একে বলা হয় ভার্সন কন্ট্রোল। এর প্রয়োজন ২/১ কথায় বলা সম্ভব নয়।
 
এতগুলো ল্যাংগুয়েজ ভালোই টিমওয়ার্ক করে যাচ্ছে। কোড করে কাজ করায় মজাই আলাদা ❤
কোড দেখতে চাইলে এখানটায় ঘুরে আসুন
Category: articles

Friday, August 21, 2020

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

 

 

ধরুন আমাদের কাছে কিছু টেক্সট আছে। এর কিছু শব্দকে অন্য কিছু দিয়ে পাল্টে দিতে চাই। 




এই কোড hello শব্দের h-কে t দিয়ে বদলে দেবে। শুরুতেই s দিয়ে বলা হচ্ছে, বদলে দাও। ইংরেজিতে substitution আরকি।

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



এবার ধরুন, আমরা এখান থেকে প্রথম line শব্দটাকে statement শব্দ দিয়ে বদলে দিতে চাই।



তবে ফাইলের সবগুলো কাঙ্ক্ষিত শব্দকে চেঞ্জ করা নিশ্চিত করতে চাইলে "g" অংশ যোগ করতে হবে। মানে এ রকম:



এটা কেন দরকার দেখতে হলে নীচের দুই লাইন কোড রান করে দেখুন। দেখবেন দুটো থেকে দুরকম আউটপুট মিলবে।  


  

 

তবে এখানে যে আউটপুট প্রিন্ট হচ্ছে সেটা কিন্তু এখানেই শেষ। সেভ কিন্তু হচ্ছে না। শেভ করতে হলে ">" বা ">>" দিয়ে সেভ করে নিতে হবে। মনে রাখতে হবে > দিলে কিন্তু ফাইলে আগের কিছু থাকবে না। 
 

 

 

এ তো গেল শুধু একটা একটা অংশ রিপ্লেস করতে চাইলে। আপনি চাইলে অনেকগুলো অংশকে অনেকগুলো আলাদা আলাদা শব্দ দিয়েও রিপ্লেস করতে পারেন। এক্ষেত্রে প্রতিটি অংশের আগে "-e" দিতে হবে। 

 

Category: articles

Wednesday, August 12, 2020

দিন দিন R-এ ম্যাপ আঁকা সহজ থেকে সহজতর হচ্ছে। একটু চেষ্টা করেই কোভিড-১৯ মহামারীর চিত্র ওয়ার্ল্ড ও বাংলাদেশের ম্যাপে দেখিয়ে ফেলতে পেরেছি। কীভাবে এত কঠিন কাজ সহজ হলো সেটা বলতেই আজকের লেখা।

বাংলাদেশের কোভিড-১৯ মহামারীর প্রকোপ 
আগে অবশ্যই দরকারি প্যাকেজগুলো লোড করে নিতে হবে।



এখন প্রশ্ন হলো ম্যাপ আঁকার ডেটা পাব কোথায়? একটুও চিন্তা করবেন না। এসব ডেটা অনেক মহামানুষ কষ্ট করে বানিয়ে রেখেছেন। আপনাকে শুধু খুঁজে নিয়ে ব্যবহার করতে হবে এই যা। ম্যাপ আঁকার জন্য প্রয়োজনীয় শেইপফাইল পাবেন এখানে

ডাউনলোড করে নিয়ে আনজিপ করে নিন। এবার কী করবেন সেটা এই লেখায় আগেই বলা হয়েছে

লেখাটির plot(zilla, col="green") কোড পর্যন্ত অন্তত অনুশীলন করে আসুন।

এসেছেন তো? এবার সামনে যাওয়া যাক।

আমরা এবারে ম্যাপ আঁকব ggplot2 দিয়ে। ggplot2 সব অবজেক্টকে ডেটাফ্রেইম হিসেবে দেখতে চায়। তাই শেইপফাইলকে ডেটাফ্রেইম বানিয়ে নিতে হবে। কিন্তু সেটা এমনভাবে করতে হবে যেন ম্যাপের সবকিছু আবার উলটপালট হয়ে না যায়। সেজন্য ব্যবহার করতে হবে fortify ফাংশন।



এবার আরেকটি বড় কাজ বাকি। করোনার তথ্য এই ডেটাফ্রেইমে নিয়ে আসতে হবে। সেটা আমরা করব। তার আগে আপনি একটু দেখে নিন zilla_gg ডেটাফ্রেইমে কী আছে। এই কোড রান করতে হলে Rstudio লাগবেই আপনার।



কলামগুলো দেখে নিন একবার। ও আচ্ছা, তার আগে শুধু zilla অবজেক্টটাও দেখে নিন। খেয়াল করলে দেখবেন NAME_2 কলামে দেশের জেলাগুলোর নাম আছে। তবে fortify করার পর এতকিছু নেই। ম্যাপের তথ্য এখানে long, lat নামে দ্রাঘিমা ও অক্ষাংশ হিসেবে সংরক্ষিত আছে। zilla_ggতে id নামে একটি কলাম আছে। একটু মিলিয়ে দেখলে বুঝবেন এটা আসলে ৬৪ জেলার জন্য ইউনিক আইডি। শুরু ০ থেকে আর শেষ ৬৩-তে। এখন এই আইডির বিপরীতে আমাদের করোনার তথ্য বসিয়ে নিলেই আমাদের ডেটা প্রস্তুত।

কাজটি একটু বিরক্তিকর। সেটাকে সহজ করার জন্যে আমি সবসময় একটি csv ফাইল রেডি রাখি। আপনি চাইলে এখান থেকে ফাইলটি ডাউনলোড করে নিতে পারেন। corona নামে এখানে একটি কলাম আছে। এই কলামটি আপডেট তথ্য দিয়ে পূর্ণ করা আপনার দায়িত্ব। এখন কাজ হলো এই তথ্যকে zilla_gg ডেটাফ্রেইমে নিয়ে আসা।

সেটা করার জন্যে আমরা ব্যবহার করব dplyr প্যাকেজের left_join ফাংশন। এই ফাংশনগুলো কীভাবে কাজ করে দেখতে হলে এখানটায় ঢুঁ মেরে আসুন। ও, তার আগে csv ফাইলটা পড়ে নিই। আরেকটি কাজ করা লাগবে। zilla_gg এর id কলামটা character হয়ে আছে। কিন্তু আমাদের csv ফাইলে id কলাম হলো numeric। তাই zilla_gg কে numeric করে নিতে হবে।
তারপর জয়েন করে ফেলি।



এবার শুধুই আঁকা।



আপাতত আমরা এটা পেলাম।

কিন্তু নিজের ইচ্ছেমতো রং দেওয়া না গেলে কি আর মনে শান্তি পাওয়া যায়? এজন্যে RColorBrewer প্যাকেজ দারুণ উপকার করে। তবে এখানে আমরা সেটা ছাড়াই রং করে ফেলব। আগের কোডের পরে "+" চিহ্ন দিয়ে এটা যুক্ত করে দিন।



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

আরও পড়ুন:  
☛ R প্রোগ্রামিং: প্লট কালারিং এর ৯ উপায়

মূল কাজ তো শেষ। এখন আরও কিছু ফাইন-টিউনিং করে নিলে মন্দ কী!

Category: articles

Sunday, May 17, 2020

লিনাক্সের গুণের কথা তো বলে শেষ করা যায় না। আজ দেখব কীভাবে খুব সহজ হিসাব-নিকাশ করবেন। ভণিতা না করে দেখে ফেলি।



আগে চলুন ১০ আর ১১ যোগ করি।




একইভাবে বিয়োগ



এখানে expr আসলে expression বা গাণিতিক পদ বোঝায়।

তবে গুণ সোজাসুজি কাজ করবে না। এই কোডটা দিয়েই দেখুন না।



দিতে হবে এভাবে



তবে ভাগ কাজ করবে ফরোয়ার্ড স্ল্যাশ দিয়েই।



তবে পরের এক্সপ্রেশনটার আউটপুট দেখলে খেয়াল করবেন, ফল এসেছে পূর্ণ সংখ্যায়। আসলে সহজ এই টুলটি ভগ্নাংশ নিয়ে কাজ করতে পারে না।

সেজন্যে আপনার লাগবে bc টুল। কমান্ড লাইনে হিসাব-নিকাশের জন্যে এটা অন্যতম সেরা একটি টুল। দারুণ ব্যাপার হলো এখানে আপনি ভগ্নাংশ নিয়েও কাজ করতে পারেন। এখানে echo দিয়ে expression লিখে পাইপ অপারেটর দিয়ে তাকে bc টুলের মধ্যে দিয়ে দিতে হবে পাইপ অপারেটর ("|") দিয়ে।



আরও পড়ুন
লিনাক্স কমান্ড লাইন: হাতে খড়ি

চাইলে কত ঘর পর্যন্ত দশমিক চান সেটা বলে দিতে পারবেন। এজন্য scale বলে দিতে হবে।



বুঝতেই পারছেন, scale এর পজিশন যেকোনো জায়গায় হতে পারে।

bc নিয়ে বিস্তারিত গল্প অন্য সময় করব ইনশাআল্লাহ।

একটি সংখ্যার উৎপাদক বের করাও কমান্ড লাইনে এক শব্দের খেল।



মনে করুন, এক সারি নাম্বার চাই আপনার। তাও জেনারেট করতে পারবেন সহজে। ধরুন আমরা ৫ টি সংখ্যা জেনারেট করব যারা শুরু হবে ১০১ দিয়ে।



আরেকটু কাজের কাজ করি। ধরুন আমাদের May1, May2, May3 ইত্যাদি এক সারি আউটপুট লাগবে। বারবার এটা না লিখে এটা আমরা jot দিয়ে বানিয়ে নিতে পারি। হ্যাঁ, এখানে আমাদের bash loop কমান্ড লাগবে।

আরও পড়ুন
লিনাক্স কমান্ড লাইন: সহজ লুপ



চাইলে এই আউটপুট একটি ফাইলেও সেভও করে নিতে পারেন।



সবশেষে jot কমান্ডের আরেকটা কারিশমা দেখব। পরিসংখ্যানে আমাদেরকে প্রায়ই দৈব সংখ্যা (random number) নিয়ে কাজ করতে হয়। দেখুন jot দিয়ে কত সহজে কাজটা করা যায়। নীচের কোডে প্রথম ১০ দিয়ে বলছি আমরা ১০টি সংখ্যা চাই। পরের দুটি সংখ্যা দিয়ে রেঞ্জ বোঝানো হলো। অর্থাৎ, সংখ্যাগুলো হবে ১০ ও ১০০ এর মধ্যে।



একই কোড দুইবার দিলাম দেখানো জন্যে যে দুইবার আসবে আলাদা আলাদা আউটপুট। র‍্যান্ডম নাম্বার বলে কথা!

এখন যা করব সেটা নিছক মজা পাওয়ার জন্যে। আপনি চাইলে পালাতে পারেন এখান থেকে। অবশ্য শিখি তো মজা পাবার জন্যেই।

আমরা দেখব ১ থেকে ৫ পর্যন্ত সংখ্যাগুলো থেকে দৈবভাবে ১,০০০ টা সংখ্যা নিলে কয়টা সংখ্যা কয়বার আসে।



সূত্র
১। নেটওয়ার্ক ওয়ার্ল্ড
Category: articles

Tuesday, May 5, 2020

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

আজকের কমান্ড: লুপ
উদ্দেশ্য: একই রকম কাজের জন্য বারবার ক্লিক না করে এক লাইনে করা। তবে কাজটি আমরা করব প্রচলিত do এর বদলে খুবই সহজ কোড দিয়ে। দেখে হাস্যকর মনে হবে। লুপ এত সহজ!
উদাহরণ



এই কোডখানি file_1.txt থেকে শুরু করে file_5.txt পর্যন্ত ৫টি ফাইল তৈরি করবে। আপনি চাইলে ls কমান্ড ব্যবহার করে কারেন্ট ওয়ার্কিং ডিরেক্টরিতে ফাইলগুলো দেখে নিতে পারেন।

এই ফাইলগুলো ডিলিট করা আরও সহজ।



বুঝতেই পারছেন, এটা দেখাতে গিয়ে আমরা লুপের আরও একটি উদাহরণও দেখে ফেললাম।

বাস্তব উদাহরণ

এই সাইটে উমার সিরিজের ভিডিওগুলো আপলোড করা আছে। ভিডিও ফাইলগুলোর নাম দারুণভাবে দেওয়া হয়েছে। ep1, ep2, ... ep29 ইত্যাদি। যেমন প্রথম ভিডিওটির লিঙ্ক http://www.ummahrc.com/omar-series-bangla/ep1.mp4

আপনি পণ্ডশ্রম করতে ভালবাসলে একটি একটি করে ভিডিওগুলো ডাউনলোড করতে পারেন। তবে আমি তা করতে রাজি নই। তাই আমি ডাউনলোড করব এভাবে-



তবে এখানে আমরা do loop দেখিনি। শিরোনামেই যে বলেছি, "সহজ লুপ!" অবশ্য do এর অনেক কাজই আজকের দেখা কমান্ড দিয়েই করা সম্ভব। 
Category: articles

Friday, April 24, 2020

ডিএনএ ও আরএনএ দুটোতেই জিনগত তথ্য সংরক্ষিত থাকে। তবে দুটোর মধ্যে পার্থক্য আছে। চলুন দেখেই নিই।

ডিএনএ বনাম আরএনএ। সূত্র
১। ডিএনএ তে থাকে ডিওক্সিরাইবোজ শুগার। আর আরএনএ-এর শুগারের নাম রাইবোজ। ডিওক্সিরাইবোজ ও রাইবোজের একমাত্র পার্থক্য হলো রাইবোজে একটি বাড়তি -OH গ্রুপ থাকে। যেখানে বলয়ের দ্বিতীয় কার্বনের সাথে -H সংযুক্ত থাকে।

২। ডিএনএ একটি দুই সুতার অণু। অন্য দিকে আরএনএ এর সুতা একটিই।

৩। ডিএনএ ক্ষারীয় পরিবেশে স্থিতিশীল, কিন্তু আরএনএ অস্থিতিশীল।

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

৫। ডিএনএ ও আরএনএ এর ক্ষার জোড়গুলোও একটু আলাদা। ডিএনএ এর ক্ষারগুলো হলো অ্যাডেনিন, থাইমিন, গুয়ানিন ও সাইটোসিন। অন্য দিকে আরএনএ ব্যবহার করে অ্যাডেনিন, ইউরাসিল, সাইটোসিন ও ইউরাসিল। থাইমিনের সাথে ইউরাসিলের পার্থক্য হলো এর বলয়ে একটি মিথাইল গ্রুপ কম থাকে।

সূত্র
* থটকো ডট কম 
Category: articles

Tuesday, April 21, 2020

আপনি বিশ্বকে কতটা জানেন? প্রশ্নগুলোতে এক নজরে বিশ্বের সবচেয়ে গুরুত্বপূর্ণ কিছু বিষয় উঠে এসেছে, যা প্রত্যেক সচেতন নাগরিকের জানা উচিত। উত্তর না জানলে অনুমান করুন।
Category: articles

Friday, October 11, 2019

বিক্ষেপ চিত্র (scatter plot) এমনিতেই দারুণ। নতুন করে একে আবার দারুণ বলার আসলে হয়ত খুব বেশি কারণ নেই। কিন্তু আবার আছে।

বিক্ষেপ চিত্রের মাধ্যমে আমরা দুটো সংখ্যাবাচক চলকের (quantitative variable) মধ্যে সম্পর্ক বুঝতে পারি। যেমন নীচের বিক্ষেপ চিত্রটাই দেখুন, এখানে টেস্ট ক্রিকেট খেলা দলগুলোর জেতা ও হারা ম্যাচের সংখ্যা দেখানো আছে।
টেস্ট-খেলুড়ে দলগুলোর হারা-জেতা ম্যাচের সংখ্যা 
দেখে বোঝা যাচ্ছে জেতা ম্যাচের সঙ্গে একটি ধনাত্মক সম্পর্ক আছে। যারা বেশি ম্যাচ জিতেছে, তারা আবার হেরেছেও বেশি। তাহলে এর মানে দাঁড়ালটা কী? আসলে এর মানে হলো, প্রায় সব দলের ক্ষেত্রেই হারা ও জেতা ম্যাচের সংখ্যা সমান। তবে দুটি দলের ক্ষেত্রে জেতা ম্যাচ মাত্র কয়েকটি, কিন্তু হারা ম্যাচের সংখ্যা প্রায় ১০০। এরা নিঃসন্দেহে অধারবাহিক দল। আরও রাখটাক করে বললে, খারাপ দল।

কিন্তু এই বিক্ষেপ চিত্র থেকে চাইল আরও বেশি তথ্য পাওয়া যায়। সেটা খুবই দারুণ। তবে আগে এই প্লটের কোডটাই দেখেই নেই।

এই প্লটের কোড খুব সাধারণ। ও আচ্ছা। আমরা আজ বিক্ষেপ চিত্র আঁকব ggplot2 দিয়ে। তাই এটা লোড করতে ভুলবেন না যেন! তবে আগে ডেটা রেডি করে নেই। ডেটা পেয়েছি উইকপিডিয়ার এই পেইজ থেকে। ডেটাফ্রেইম বানাতে আমরা ব্যবহার করেছি tibble প্যাকেজ। চাইলে আপনি tibble এর জায়গায় data.frame ফাংশনও ব্যবহার করতে পারেন।



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

 

এখানে %>% কে বলা হয় পাইপ অপারেটর। চাইল আপনি test_win %>% ggplot অংশটুকুকে এভাবেও লিখতে পারেন।



এবার একই চিত্রটিকে আমরা ভিন্ন দৃষ্টিকোণ থেকে দেখি।


এবার আমরা খুব সহজে নির্দিষ্ট দেশের হারা ও জেতা ম্যাচের তুলনা করতে পারছি। যেমন জিম্বাবুয়ের পরিসংখ্যান দেখুন। জেতা ম্যাচের সংখ্যা গুটিকয়েক। কিন্তু হারা ম্যাচের সংখ্যা সে তুলনায় অনেক বেশি। প্রায় ৭০। বাংলাদেশের অবস্থা তো আরও খারাপ। পাকিস্তান ও দক্ষিণ আফ্রিকার হারা ও জেতার ম্যাচের সংখ্যা প্রায় সমান। তবে ভারতের কিন্তু জেতার চেয়ে হারার রেকর্ড বেশি। 

বলা চলে, অস্ট্রেলিয়ার রেকর্ড সবচেয়ে ভালো। জিতেছে প্রায় ৪০০ ম্যাচে, কিন্তু হেরেছে মাত্র ২২০ এর মতো ম্যাচ (প্লট দেখে বলছি। ডেটা দেখলে তো দেখাই যাবে ২২৪ ম্যাচ)। অস্ট্রেলিয়ার চেয়ে কম ম্যাচ খেলেও বেশি হেরেছে ইংল্যান্ড। কত দারুণ তথ্য দিচ্ছে সাধারণ এক বিক্ষেপ চিত্র! কোডটা তাহলে এবার দেখে নেই। 



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



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




তবে এই প্লটটা আসলে বাড়াবাড়ি। তবে বস চাইলে তো আর আসলে কিছু করার নেই। বস ইজ অলওয়েজ রাইট! 

[লেখাটি উৎসর্গ করলাম সহকর্মী হাসান আহমেদকে।  ও-ই প্রথম এমন একটি গ্রাফের প্রস্তাব দিয়েছিল আমাকে।
Category: articles

Tuesday, August 6, 2019

একটা কাজ অসংখ্যবার করতে লুপ (loop) কোডিং-এর জগতে খুব জনপ্রিয় একটি নাম। R-এও লুপ দারুণভাবে কাজে আসে। অবশ্য R-এ বেশিরভাগ কাজ লুপ ছাড়াই সহজে হয়ে যায়। অন্য প্রোগ্রামিং ল্যাংগুয়েজে যেখানে সাধারণ যোগ বিয়োগেও লুপের দ্বারস্থ হতে হয়, সেখানে R দিয়ে সে কাজ করা যায় এক শব্দের কোড দিয়ে।
R প্রোগ্রামিং: দুজন পরিসংখ্যানবিদ রস ইহাকা ও রবার্ট জেন্টেলম্যান R তৈরি করেন। কাজে লাগান আগের S প্রোগ্রামিং ল্যাংগুয়েজ। বর্তমানে স্ট্যাটিস্টিক্যাল কম্পিউটিংয়ের জন্যে সেরা টুল R। প্রাথমিক সংস্করণ প্রস্তুত করা হয় ১৯৯৫ সালে। 



১ থেকে ১০০ পর্যন্ত যোগ করতে চান? শুধু লিখুন আর এন্টার (Enter) চাপুন।



তবে চাইলে এ কাজও আমরা লুপ ব্যবহার করে করতে পারি। 



উল্লেখ্য: R-এ সাধারণত '=' চিহ্নের বদলে <- ব্যবহার করা হয়। তবে চাইলে '='ও ব্যবহার করা যাবে। 

লুপ ছাড়াও অনেক কাজ করা যায় তা ঠিক আছে। তবে নিজেকে প্রোগ্রামার হিসেবে পরিচয় দিতে হলে লুপ না জানা হবে বড়সড় এক দুর্বলতা। তাছাড়া লুপ না বুঝে R-এরও সঠিক ব্যবহার হবে অসম্ভব একটি কাজ।

লুপের ভেতরের লুপকে বলে নেস্টেড লুপ (Nested loop)। তা দেখার আগে আবার দুয়েকটি সিংগেল লুপ দেখে নেই।

ধরুন, আমরা ১ থেকে ১০ এর বর্গ করব। আগের মতোই কাজটি লুপ ছাড়াও করা যাবে।



হ্যাঁ কাজটা অবিশ্বাস্য রকম সহজ। লুপ দিয়ে কেমন হয় দেখা যাক!



ফিবোনাচি সংখ্যা নিয়ে লেখায়ও আমরা লুপের ব্যবহার দেখেছি। সেটা আবার দেখে নিলে মন্দ হয় না।

আরও পড়ুন
☛  ফিবোনাচি সংখ্যার বিস্ময়কর জগৎ 



আশা করি সিংগেল লুপ নিয়ে আমরা যথেষ্ট জ্ঞান হাসিল করে ফেলেছি। এবার তাহলে নেস্টেড লুপ দেখা যাক।

আগে সরল লুপ দিয়ে শুরু হোক। ধরুন, আমরা দুটি ভেক্টরের প্রতিটি মানকে আরেকটি ভেক্টরের প্রতিটি মানের সাথে গুণ করব। আরেকটু খোলাসা করে বলি। ধরুন, আমরা ১ থেকে ১০ সংখ্যাগুলোর প্রতিটিকে ১১ থেকে ২০ সংখ্যাগুলোর প্রতিটির সাথে গুণ করব। তাহলে আমাদের ১০০টি সংখ্যা পাওয়ার কথা। দেখা যাক লুপ দিয়ে কী করা যায়। 



বাহ! কাজ করছে। এবার আরেকটু সিরিয়াস কাজ করা যাক।

আমরা কোনো সংখ্যা মৌলিক কি না তা চেক করব। এটার জন্য একটা ফাংশন বানানো যাক। যেখানে আপাতত থাকছে একটিমাত্র লুপ।



ফাংশনটি কাজ করছে কি না যাচাই করে দেখা উচিত।



হ্যাঁ, করছে। এবার এটাকে সামান্য জটিল করে একটিমাত্র সংখ্যার বদলে অনেকগুলো সংখ্যা বা ভেক্টরের জন্য কাজে লাগাই। এই কোডে আমরা i দিয়ে লুপ করেছি প্রতিটি সংখ্যাকে। আবার প্রতিটি সংখ্যা মৌলিক কি না তা দেখার জন্য সংখ্যাটির অর্ধেক বা অর্ধেকের বড় সংখ্যাটি পর্যন্ত সংখ্যাগুলো দিয়ে নির্দিষ্ট সংখ্যাটিকে ভাগ করে দেখেছি। এখানে ভাজকগুলোকে আমরা j দিয়ে লুপ করেছি।



এবার এখান থেকে আউটপুট দেখে নেওয়া যাক। আমরা ফাংশনটা এমনভাবে সাজিয়েছি যাতে কোন সংখ্যাগুলো মৌলিক তা দেখা যাবে আবার মোট কতটি মৌলিক তাও চেক করা যাবে।



লাইন দুটি থেকে আমরা পাব যথাক্রমে একটি স্কেলার ও একটি ডেটাফ্রেইম। স্কেলার বলবে সংখ্যাগুলোর মধ্যে কতটি মৌলিক। ডেটাফ্রেইমে is_prime কলামের ০ মানে সংখ্যাটি মৌলিক নয়। আর ১ মানে মৌলিক।

এই ফাংশনটি দিয়ে আমরা মৌলিক সংখ্যার অনেক দারুণ দারুণ কাজ করতে পারি। এ বিষয়ে আরও জানতে পড়তে পারেই উইকিপিডিয়ার এই লেখাটি

নেস্টেড লুপের দারুণ কোনো উদাহরণ আপনার কাছে থাকলে শেয়ার করতে ভুলবেন না যেন! 
Category: articles

Monday, July 29, 2019

সংখ্যা পদ্ধতিতে ‘অবাস্তব’ (বা জটিল) নামে এক ধরনের সংখ্যা আছে। এদের আবার দুটো অংশ। একটি অংশের নাম বাস্তব অংশ, অপরটিকে বলা হয় কাল্পনিক অংশ। বাস্তব দুনিয়ায় নাকি এই কাল্পনিক অংশের কোনো ভূমিকা নেই। এর কারণটাকে প্রথম দৃষ্টিতে খুব যৗেক্তিক বলেই মনে হয়। কিন্তু আমরা একটু যাচাই করতে চাই এই মত কতটা সঠিক। তার আগে দেখে নেই একে অবাস্তব কেন বলা হয়।
আমরা জানি ৩ × ৩ = ৯, আবার (-৩) × (-৩) ও ৯। তার মানে ৯-কে বর্গমূল করলে আমরা ৩ এবং (-৩) দুটোই পাচ্ছি। (-৩) ও যদি ৯ থেকেই পেয়ে যাই, তাহলে (-৯) থেকে কী পাব? সাধারণ অবস্থায় কিছুই পাব না। কোনো সংখ্যাকে বর্গমূল করলে আমরা কী পাই তা তো সহজ কথা। যে সংখ্যাটিকে নিজের সাথে গুণ করলে বর্গ সংখ্যাটি আসে সে সংখ্যাটি পাব। এখন, এমন কোনো সংখ্যা কি বাস্তব জগতে আছে যাকে নিজের সাথে গুণ করলে ঋণাত্মক কোনো সংখ্যা পাওয়া যাবে? ঋণাত্মক সংখ্যারাও নিজের সাথে গুণ হয়ে ধনাত্মক হয়ে যায় বলেই যত সমস্যা। অতএব যে-কোনো ঋণাত্মক সংখ্যার বর্গমূল অবাস্তব সংখ্যা!

সমস্যাটা বোঝা যায় এই সমীকরণটি সমাধান করতে গেলে: $x^2+1=0$
মানে, $x^2=-1$

মানে $x$ হবে এমন একটি সংখ্যা, যাকে নিজের সাথে গুণ করলে (-১) হবে। ১-কে নিজের সাথে গুণ করলে ১ হয়। আবার (-১) কেও নিজের সাথে গুণ করলে ১ হয়। অতএব, এই সমীকরণের জন্য $x$ কাল্পনিক সংখ্যা! 

এখন দেখা যাক, এই অবাস্তব বা কাল্পনিক সংখ্যা আসলে কতটা অবাস্তব। বাস্তব সংখ্যার মধ্যে বিভিন্ন রকম সংখ্যা আছে। আছে স্বাভাবিক সংখ্যা। এরা (১, ২, ৩, ... এভাবে এক এক করে অসীম বা ∞ পর্যন্ত)। আছে পূর্ণ সংখ্যা (-∞,..,-২, -১, ০, ১, ২,.., +∞)। এছাড়াও আছে সব রকম মূলদ (পূর্ণ সংখ্যার অনুপাত, যেমন $\frac{3}{4}$) ও অমূলদ সংখ্যা (যেমন পাই (π), যার মান ৩.১৪১৫৯...) । এদেরকে আমরা এই সংখ্যারেখার মাধ্যমে প্রকাশ করি।


বাস্তব সংখ্যারেখা 


এক সময় কিন্তু ঋণাত্মক সংখ্যাকেও অস্বাভাবিক ভাবা হতো। মনে করা হতো বাস্তত জগতে এদের কোনো কাজ নেই। যেমন কারও কাছে ৫ টাকা আছ। সে কি এখান থেকে কাউকে ৮ টাকা দিতে পার? ৫ থেকে কি ৮-কে বিয়োগ করা যায়? প্রথমে অসম্ভব মনে হলেও পরে দেখা গেল যে হ্যাঁ, যায়। সে কারও কাছ থেকে ৩ টাকা ধার নিয়ে আরেকজনকে পুরো ৮ টাকা দিতে পারে। তবে সে ৩ টাকা ঋণী থাকল। ফলে এখন তার কাছে থাকল (-৩) টাকা।


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


এরপর ভগ্নাংশের সাথেও একই আচরণ করা হয়েছিল। পরে খুঁজে পাওয়া যায় তাদেরও যৌক্তিকতা।

আরও পড়ুন
☛ ঋণাত্মক সম্ভাবনা কি আসলেই অসম্ভব?


এখন আমরা দেখতে চাই অবাস্তব বা জটিল সংখ্যাকেও বাস্তব জগতে নিয়ে আসা যায় কি না।ওপরের ছবিতে দেখুন, ঋণাত্মক সংখ্যারা থাকে ধনাত্মক সংখ্যার উল্টো দিকে, গণিতের ভাষায় যাকে বলে ১৮০ ডিগ্রিতে। ১৮০ ডিগ্রিকে আবার সরলকোণও বলে।

ধরুন, কেউ ২ একক বেগে দক্ষিণ দিকে যাচ্ছে। তাহলে উত্তর দিকে তার বেগ কত? আমরা জানি, উত্তর ও দক্ষিণ দিক একে অপরের সাথে ১৮০ ডিগ্রিতে আছে। তাহলে উত্তর দিকে বেগ হবে (-২) একক।


'উল্টো' এর গাণিতিক রূপ হলো ১৮০ ডিগ্রি। চাইলে ইউ-টার্নও বলতে পারেন একে। 

 (-১) এ কথাই ধরুন না। (-১) এর বর্গ করার (-১ × -১) মানে হল ১ কে দুইবার ১৮০ ডিগ্রি ঘুরিয়ে দেওয়া (বিপরীত অবস্থানে আনা)। ফলে একবার ঘুরিয়ে পাব -১। (-১)-কে আবার ঘোরালে আবার ১৮০ ডিগ্রি ঘুরে হয়ে যাবে ১। ফলে ঋণাত্মক সংখ্যা -১ এরও বর্গ হয়ে যাচ্ছে ধনাত্মক ১। এই গোলকধাঁধা থেকে বের হওয়া দরকার।

ভালো করে খেয়াল করুন। মাইনাস দিয়ে গুণ দিলেই একসাথে ১৮০ ডিগ্রি ঘুরে যাচ্ছে। তাহলে -১ (বা -৯ ইত্যাদি) এর বর্গমূল নিতে হলে এমন একটি সংখ্যা দরকার, যেটি একবার ঘুরেই নয়, বরং দুইবার ঘুরে (-১) হবে। অনেক ভারী একটা কথা। আবার পড়তে পারেন।

তাহলে সেটিকে একবারে ১৮০ ডিগ্রি এর অর্ধেক, মানে ৯০ ডিগ্রি কোণে ঘুরতে হবে। আমরা নতুন একটি সংখ্যা কল্পনা করি। একে নাম দেই i। ধরি i × i = -১। এই i-কে আমরা 1i-ও বলতে পারি। ১-কে 1i প্রথমে ৯০ ডিগ্রি ঘুরিয়ে সংখ্যারেখা থেকে উপরের দিকে উঠিয়ে দেবে। মানে y-অক্ষের দিকে। আরকেটি i ও গুণ হয়ে সেটি পৌঁছাবে -১ অবস্থানে। এইভাবে:


তার মানে, তথাকথিত জটিল সংখ্যা আসলে দ্বিমাত্রিক সংখ্যা। সংখ্যার একটি অংশ থাকে x-অক্ষের দিকে। আরেকটি অংশ y-অক্ষের দিকে। y-অক্ষের অংশের নামই হলো 'কাল্পনিক'। আমাদের পরিচিত 'বাস্তব' সংখ্যা হলো এক মাত্রার সংখ্যা। শুধু x-অক্ষের দিকে।


নীচের চিত্রে কিছু জটিল সংখ্যা দেখানো হলো:
জটিল সংখ্যার আর্গন্ড চিত্র 
বাস্তব জগতরেই বিভিন্ন ক্ষেত্রে এবং বহু বৈজ্ঞানিক সূত্রে এই কাল্পনিক সংখ্যার উপস্থিতি রয়েছে। কোয়ান্টাম মেকানিক্স কিংবা পরিসংখ্যান-সর্বত্রই এদের ব্যবহার হয়ে চলেছে হরদম। ফলে এদেরকে কাল্পনিক বলা অনেক বড় একটি কল্পনাই বটে। 

Category: articles