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

    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$ দ্বারা বোঝাচ্ছে কত পেইজ কাগজ লাগছে।

    তাহলে, ১০টা কলম কিনলে কাগজ কেনা হবে $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$ এর মতো রূপ দিতে পারি। এভাবে-

    $$\frac{x^2}{16}+\frac{y^2}{16} = 1 $$
    এটা থেকে-
    $$(\frac{x}{4})^2 + (\frac{y}{4})^2=1$$

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

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

    মানে,
    •     $x=4 \space sint$
    •     $y=4 \space cost$
    দেখেই বোঝা যাচ্ছে, এটা ৪ একক ব্যাসার্ধের একটি বৃত্ত। এখানে ৪ এর জায়গায় ১ থাকলে এটা হত  একক বৃত্ত (unit circle)। মানে ব্যাসার্ধ ১ এককের বৃত্ত।

    দুই জায়গায়ই ৪ না হয়ে কম বেশি হলে এটা হয়ে যেত উপবৃত্তের  (ellipse) সমীকরণ। যেমন

    •     $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

      Friday, May 24, 2019

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


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

      কম্পিউটার ব্যাবহারকারীগণের মধ্যে বিরাট একটা অংশ, 'লিনাক্স' শব্দটাই হয়তো শোনেননি। কেউ কেউ শুনেছেন কিন্তু ইহা আসলে কি জিনিস তা জানেন না। কেউ কেউ লিনাক্স শুনলেই মনে করেন 'উবুন্টু'র কথা। আসলে লিনাক্স মানে উবুন্টু না, উবুন্টু লিনাক্সের একটা অপারেটিং সিস্টেম মাত্র! (এরকম আরও অন্তত ৫৫০ টি অপারেটিং সিস্টেম আছে)। আবার অনেকেই মনে করেন, লিনাক্স বোধহয় ব্যাপক কঠিন একটা জিনিস! এটা ব্যাবহার করতে গেলে বিশাল বড় প্রোগ্রামার হতে হবে, কিবোর্ডে খটাখট শব্দ করে কোড লিখা জানতে হবে! আসলে এসবই ভুল ধারণা। লিনাক্স ইউজ করার জন্যে আপনাকে কম্পিউটার সায়েন্টিস্ট হতে হবে না। সাধারণ কম্পিউটার ব্যাবহার কারী হিসেবে কেন আপনারও লিনাক্স ব্যাবহার করা উচিৎ, সেটাই লিখতে বসলাম আজকে।

      আজ থেকে প্রায় ২৮ বছর আগে লিনাস টরভাল্ডস নামের ফিনল্যান্ডের একজন উদাসমনা ভদ্রলোক এই 'লিনাক্স' জিনিসটা তৈরী করেছিলেন তার ইউনিভার্সিটির প্রজেক্টটা ঠিকঠাকমতো শেষ করবার জন্যে। যাই হোক, সেই কাহিনি আমরা অন্যদিন শুনবো! সেসময় কম্পিউটারগুলো চলত 'UNIX' অপারেটিং সিস্টেম ব্যাবহার করে। এই ইউনিক্সের সোর্সকোড জনসাধারণের জন্যে উন্মুক্ত ছিল না। মানে ডেভেলপাররা কীভাবে এই জিনিসটি বানিয়েছেন তার কোড কেউ জানত না, জানার সুযোগও ছিল না!

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

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

      যাইহোক, আবারো লিনাক্স কার্নেলের কথায় ফেরত আসি। লিনাক্স কার্নেলটাকে বেজ হিসেবে ধরে বানানো শুরু হলো নানা রকম অপারেটিং সিস্টেম। এই লিনাক্স বেজড অপারেটিং সিস্টেমগুলোকে আমরা আদর করে ডাকি "ডিস্ট্রিবিউশন" বা "ডিস্ট্রো"। এখন পর্যন্ত বাজারে অন্তত পাঁচশ অপারেটিং সিস্টেম আছে লিনাক্সের। যার যেমনটা দরকার সে তেমন করেই বানিয়ে নিয়েছে। যেমন হ্যাকার বা সিকিউরিটি বিশেষজ্ঞরা ব্যাবহার করেন "Kali Linux", "Parrot Os", "Black Arch"। আবার শিক্ষার্থীদের জন্যে আছে Edubuntu, Endless OS। বিজ্ঞানীরা ব্যবহার করেন 'Scientific Linux', 'Fedora Scientific' ইঞ্জিনিয়াররা ব্যবহার করেন 'LinuxCNC', 'CAELinux', জেনেটিক ইঞ্জিনিয়ার কেমিক্যাল ইঞ্জিনিয়াররা ব্যবহার করেন 'Bio Linux', 'Poseidon Linux' ইত্যাদি!

      আর আমার প্রায় পাঁচ বছরের লিনাক্স অভিজ্ঞতায় প্রায় চল্লিশটির মত অপারেটিং সিস্টেম ব্যাবহার করার সুযোগ হয়েছে। আমার কাছে মনে হয়েছে লিনাক্স মোটেও কঠিন কিছু নয়। এটি সার্বজনীন!

      কেন উইন্ডোজ ছেড়ে লিনাক্স ব্যাবহার করবেন? 
      • সিকিউরিটি: নাসা, সার্ন, গুগল, ফেসবুক সার্ভার সহ পৃথিবীর সমস্ত গুরুত্বপূর্ণ জায়গাগুলোতে লিনাক্স অপারেটিং সিস্টেম ব্যাবহার করা হয়। ইন্টারনেট দুনিয়ার প্রায় ৯০% সার্ভারে লিনাক্স ব্যাবহার করা হয় এর সিকিউরিটি সুনামের কারণে। লিনাক্স সার্ভারে অ্যাটাক করা প্রায় অসম্ভব একটি কাজ হ্যাকারদের জন্যে। একজন সাধারণ ইউজার হিসেবে সার্ভার সিকিউরিটি নিয়ে হয়ত আপনার মাথাব্যথা নাও থাকতে পারে, কিন্তু আপনি যদি পার্সোনাল কম্পিউটারের সিকিউরিটির কথা চিন্তা করেন সেক্ষেত্রেও লিনাক্স সবার আগে। উইন্ডোজ কম্পিউটারে হরেক রকম অ্যান্টিভাইরাস ইউজ করেন আপনারা ভাইরাস বা ম্যালওয়্যার থেকে বাঁচার জন্যে। অনেক অ্যান্টিভাইরাস কোম্পানি বাজারে তাদের ব্যাবসা টিকিয়ে রাখতে নিজেরাই ভাইরাস আপলোড করে থাকে। অনেক দাম দিয়ে এসব অ্যান্টিভাইরাস কিনতে হয়। সিরিয়াল কী আপডেট করতে হয়। উইন্ডোযে যেখানে এত ঝামেলা সেখানে লিনাক্স একদম দুর্ভেদ্য একটা অপারেটিং সিস্টেম। কোনোরকম অ্যান্টিভাইরাস প্রয়োজন নেই। আমি আজ পর্যন্ত কাউকে বলতে শুনিনি যে তার লিনাক্স কম্পিউটার এ ভাইরাস এ্যটাক হয়েছে!
      • দাম: উইন্ডোজ এর জেনুইন ভার্সন যদি আপনি ব্যাবহার চান তাহলে আপনাকে প্রায় ১০০ থেকে ২৫০ ডলার গুণতে হবে। কিন্তু লিনাক্স আজীবনের জন্য ফ্রি! হ্যা আপনি ঠিকই পড়েছেন! একটি টাকাও খরচ করতে হবে না আপনাকে।
      • পারফরম্যান্স: নতুন কম্পিউটার কেনার দুই-তিন মাস পরেই ভীষণ স্লো হয়ে যায় উইন্ডোজ কম্পিউটার। একটা ক্লিক দিয়ে ঘুমিয়ে যাচ্ছেন, ঘুম থেকে উঠে দেখবেন তখনো কাজ হয়নি! মাঝেমধ্যেই আছাড় মেরে ল্যাপটপ ভেঙ্গে ফেলার ইচ্ছে করে হয়ত। বছরের পর বছর লিনাক্স ইউজ করবেন, একটা দিনও স্লো হবে না! কম্পিউটার বন্ধও করে রাখতে হবে না। দিনের পর দিন কম্পিউটার চালু রাখতে পারবেন। আমি যখন এই লিখাটা লিখছি তখনো আমার কম্পিউটার একটানা ২২ দিন ধরে চলছে, এরমধ্যে একবারও শাট ডাউন করার দরকার হয়নি। বাইরে যাবার সময় ঘুম পাড়িয়ে রেখে গেছি (মানে স্লিপ মুডের কথা বলছি)। 
      • আপডেট: উইন্ডোজের বিরক্তিকর আপডেটের সম্মুখীন হননি এরকম মানুষ হারিকেন দিয়েও খুঁজে একটা পাওয়া যাবে বলে আমার মনে হয় না! ভীষণ রকম স্লো আর ল্যাগি আপডেট, সাথে রিস্টার্ট করার প্যারা তো আছেই! রিস্টার্ট করতে গেলেও চার পাচ মিনিট সময় চলে যায়! জীবনটাই তামাতামা হয়ে যায়! 😀লিনাক্সের যেকোনো অপারেটিং সিস্টেমে এই আপডেটের কাজটা সেরে ফেলতে পারবেন মাত্র একটা ক্লিক দিয়েই। সেইসাথে ইনস্টল থাকা প্রত্যেকটা অ্যাপ আপডেট হয়ে যাবে কোনো ঝামেলা ছাড়াই। উইন্ডোজের মত শুধুমাত্র সিস্টেম আপডেট হবে না। খুঁজে খুঁজে আলাদাভাবে আর কোনো অ্যাপ আপডেট করতে হবে না।
        মাত্র এক ক্লিক এ আপডেটের ঝামেলা শেষ!
      • অ্যাপ ইনস্টলেশন: উইন্ডোজে নতুন কোনো অ্যাপ ইনস্টল করাও ঝামেলা! গুগল থেকে খুজে খুজে ডাউনলোড করো, তারপর ইনস্টল করো, দুদিন যেতে না যেতেই আবার রেজিস্ট্রেশন কী দিতে হবে নাইলে অ্যাপ কাজ করবে না! মহা মুশকিল! লিনাক্সে এত খোঁজাখুঁজি করতে হবে না। সফটওয়্যার ম্যানেজারে সার্চ করবেন আপনার প্রয়োজনীয় অ্যাপ, একটা ক্লিক করবেন, কিচ্ছা খতম! কোনো সিরিয়াল কী, রেজিট্রেশন ফী হ্যানত্যান ঝামেলা নেই! সফটওয়্যার ম্যানেজার জিনিসটা প্লেস্টোরের মত, সার্চ করবেন আর ডাউনলোড করবেন। এই ফাঁকে একটি তথ্য জানিয়ে দেই, আপনার হাতে থাকা অ্যান্ড্রয়েড ফোনটিও কিন্তু লিনাক্স অপারেটিং সিস্টেম!
        Software Manager/Store
      • প্রাইভেসি: উইন্ডোজ আপনার অগোচর আপনার প্রত্যেকটি কর্মকাণ্ডই নজরদারী করে, আপনার প্রত্যেকটি ডেটা তাদের সার্ভারে জমা হতে থাকে। লিনাক্স আপনার কোনো ডেটাই তাদের সার্ভারে পাঠায় না, যদি প্রয়োজন বশত কোনো ডেটা বা সিস্টেম লগ তারা নিতে চায়, তার আগে অবশ্যই আপনাকে নোটিফাই করবে।
      • ইউজার ইন্টারফেস: এবার আসি ইউজার এনভায়রনমেন্ট এর ব্যাপারটায়। সারাটা জীবন ধরে উইন্ডোজের চেহারা দেখতে দেখতে বিরক্ত হয়েছেন? মাঝেমধ্যেই একটু সুন্দর করে সাজাতে চেয়েছেন নিজের কম্পিউটার? কিন্তু কালার ছাড়া আর কোনোকিছু চেঞ্জ করতে পারেননি? তাহলে আপনি চোখ বন্ধ করে লিনাক্স ব্যাবহার শুরু করুন। কালার, ফন্ট, আইকন থেকে শুরু করে কার্নেল পর্যন্ত চেঞ্জ করতে পারবেন দুই একটা ক্লিক করেই! আমি নিজেই তো Asus ল্যাপটপ এ MacBook এর স্বাদ নিচ্ছি! ও আচ্ছা! ম্যাক অপারেটিং সিস্টেমও কিন্তু লিনাক্স কার্নেলেই বানানো! মোদ্দাকথা, আপনি চাইলেই আপনার মনের মাধুরী মিশিয়ে আপনার কম্পিউটার কাস্টমাইজ করতে পারবেন। টাকা দিয়ে কিনেছেন, আপনার কম্পিউটার থাকবে আপনার ইচ্ছামত, তাহলে কেন উইন্ডোজ এর কাছে বন্দী হয়ে থাকবেন? আমার ল্যাপটপের স্ক্রিনশটগুলো দেখুন, ম্যাকবুক ভেবে ভুল করবেন না!

        ফাইল ম্যানেজার

        Application Drawer
        System Info
        System Monitor
      • টার্মিনাল: আপনি যদি অ্যাডভান্স ইউজার হয়ে থাকেন তাহলে উইন্ডোজ কমান্ড লাইনের সাথে নিশ্চয় পরিচিত। উইন্ডোজ কমান্ড লাইন অথবা পাওয়ারশেল জিনিসটাকে আমার কাছে নিছক খেলনা মনে হয়েছে লিনাক্স টার্মিনালের তুলনায়। টার্মিনাল দিয়ে আপনি চাইলে আপনার কম্পিউটার কেন মহাকাশ পর্যন্ত কাঁপিয়ে দিতে পারবেন। আমি একটুও বাড়িয়ে বলছি না, টার্মিনাল এতটাই শক্তিশালী! 
        Terminal
      যাই হোক, উইন্ডোজ এ কুয়োর ব্যাঙ হয়ে না থেকে লিনাক্সে আসুন, কম্পিউটিং বিস্ময়কর জগৎটা দেখুন! তবে আশার কথা হলো, দেরীতে হলেও মাইক্রোসফট এতদিনে বুঝতে শুরু করেছে ওপেন সোর্সের গুরুত্ব, লিনাক্সের গুরুত্ব। এবছরই তারা উইন্ডোজের ভিতরেই লিনাক্স ব্যাবহার করার জন্যে WSL (Windows Subsystem for Linux) রিলিজ করেছে। আগে এই কাজটিই করতে হতো বিভিন্নরকম ভার্চুয়াল মেশিন সফটওয়্যার ব্যাবহার করে। এছাড়াও তারা উইন্ডোজের জন্যে নতুন টার্মিনাল ডেভেলপ করা শুরু করেছে।
      New cmd
      এতক্ষণ ধরে বকবক করেও আমি শুধুমাত্র লিনাক্সের বাহ্যিক দিকটাই একটুখানি তুলে ধরেছি। ভেতরের কথাবার্তা নিয়ে, একজন বিগিনার হিসেবে লিনাক্সের কোন অপারেটিং সিস্টেমটি ব্যাবহার করতে পারেন, কীভাবে ইনস্টল করবেন, সেসব বিস্তারিত লিখবো অন্য একটি লিখায়। ভালো থাকুন। Happy Computing!

      ডেটা সায়েন্সে লিনাক্স কীভাবে কাজে লাগতে পারে জানতে চোখ রাখুন এখানে
      আরও পড়ুন
      ☛ লিনাক্স ও ডেটা সায়েন্স: tr কমান্ডের কারিশমা

      Category: articles

      Thursday, May 16, 2019

      ডেটা সায়েন্সের জন্য লিনাক্স টার্মিনাল দারুণ এক জিনিস। এর আগে আমরা tr কমান্ড নিয়ে বলেছিলাম। আজকে দেখব, সামান্য কয়েকটি কমান্ড এক সঙ্গে ব্যবহার করে কত দারুণ একটা কাজ করা যায়।


      যাদের লিনাক্স নেই তারা এই মিনি টিউটোরিয়ালকে ফলো করতে WSL (উইন্ডোজ সাবসিস্টেম ফর লিনাক্স) ব্যবহার করতে পারেন। আমি নিজেও আসলে তাই করছি।

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

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

      • তাহলে শুরুতে আমরা আর্টিকেলের টেক্সটটা কপি করে নেই। আমরা শুরু থেকে Contents সেকশনের আগ পর্যন্ত কপি করব। এই মুহূর্তে লাস্ট লাইনটা এ রকম: ...such as a star cluster or a galaxy। উইকপিডিয়া পরিবর্তনশীল বলে এটা হয়ত সব সময় নাও থাকতে পারে। 
      • এবার লিনাক্স টার্মিনালে আসি। একটা ফাইল বানাই। নাম দেই star_wiki.txt। এটার জন্য কোড touch star_wiki.txt
      • এবার এই ফাইলে টেক্সটখানা বসাতে হবে। তাহলে ইডিট মোডে যেতে টাইপ করি: nano star_wiki.txt
      • এবার আগে কপি করা টেক্সটটুকু এখানে বসিয়ে দেই। এখানে Ctrl + V সবসময় কাজ করে না। তার চেয়ে বরং মাউসের রাইট ক্লিক করলেই পেস্ট হয়ে যায়। 
      • এবার Ctrol + O এবং এন্টার চেপে তারপর Ctrl + X চেপে বের হয়ে আসুন। 
      আমাদের মূল কাজ আসলে এখনও হয়নি। তবে এবার হবে। আমরা যা করতে চাই তার জন্যে পুরো কমান্ড হলো:

      cat star_wiki.txt | tr '[:upper:]' '[:lower:]' | grep -oE '\w+' | sort | uniq -c | sort -nr | head -n 10
      চাইলে পুরোটা রান করে দেখতে পারেন। তবে আমরা কাজটা করব ধাপে। প্রত্যেক লাইনে কী ঘটছে সেটা বুঝে বুঝে। 

      উপরের কমান্ডে আমরা "|" চিহ্নটা বেশ কয়েকবার ব্যবহার করেছি। লিনাক্স কমান্ড লাইনে একে বলে পাইপ কমান্ড। এটা দিয়ে একটা কাজের রেজাল্টকে আরেকটা কাজের ইনপুট হিসেবে ব্যবহার করা যায়। ব্যাপারটা R এর dplyr ও আরও ভাল করে বললে magrittr প্যাকেজের পাইপের সাথে মিল আছে। অবশ্য R এর পাইপ কমান্ড হলো %>%। এর ব্যবহার দেখতে এই লেখাটি দেখুন। 

      তাহলে একে একে দেখা যাক, ওপরের পুরো কোডটা আসলে কী করল। 
      • cat কমান্ড কোনো ফাইলের টেক্সটগুলোকে টার্মিনালে প্রিন্ট করে। ফাইল জোড়া দিতেও এটা ব্যবহার করা যায়। তবে সেটা আমাদের আজকের আলোচনার অংশ নয়। তাহলে আপাতত শুধু রান করুন cat star_wiki.txt। এটা আসলে টেক্সটটা দেখানো ছাড়া আর কিছুই করবে না। ফাইলটায় যেহেতু টেক্সট খুব বেশি নেই, তাই একে প্রিন্ট টার্মিনালে প্রিন্ট করতে অসুবিধা নেই। এবার পাইপ কমান্ড দিয়ে আমরা অ্যানালাইসিসের দিকে যাব। 
      • tr কমান্ডের কারিশমা নিয়ে আমরা আগেই বলেছিলাম। টেক্সট কনভার্ট বা ডিলিট করতে এর ব্যবহার খুব বেশি। এখানে tr '[:upper:]' '[:lower:]' কমান্ড দিয়ে আমরা আমাদের ফাইলের সব লেখাকে ইংরেজি ছোট হাতের বানিয়ে নিলাম। তাহলে এবার কোড হলো-  
      cat star_wiki.txt | tr '[:upper:]' '[:lower:]'
      • এখনও টেক্সটটা আছে প্যারাগ্রাফ আকারে। অ্যানালাইসিসের সুবিদার্থে আমরা প্রতিটি শব্দকে আলাদা আলাদা লাইনে নিয়ে আসব। এ জন্যেই পাইপ দিয়ে পরের কমান্ডে চলে গেলাম। বাড়তি কোড লাগবে grep -oE '\w+' । তাহলে সব মিলিয়ে হবে- 
      cat star_wiki.txt | tr '[:upper:]' '[:lower:]' | grep -oE '\w+' 
      • এবার আমরা শব্দগুলোকে আদ্যক্ষর অনুসারে সাজিয়ে নেব। এ জন্য লাগবে sort কমান্ড। এবার কোড হলো- 
      cat star_wiki.txt | tr '[:upper:]' '[:lower:]' | grep -oE '\w+' | sort 
      • এখানে একাধিকবার থাকা শব্দগুলোকে একাধিকবারই দেখাচ্ছে। যেমন দেখুন উপরের দিকে অনেকগুলো a দেখা যাচ্ছে। নীচে আবার with আছে চারবার। আমরা এবার একটা শব্দকে একবারই শুধু রাখব। সাথে সেটা কয়বার ছিল সেই তথ্য নিয়ে আসব। এর জন্য কোড হলো uniq -c। c হলো count বা গণনার জন্যে। সব মিলিয়ে এবার-
      cat star_wiki.txt | tr '[:upper:]' '[:lower:]' | grep -oE '\w+' | sort | uniq -c 
      • এটা ভালোই হলো। কিন্তু কোন শব্দগুলো বেশি আছে সেটা সহজে বোঝা যাচ্ছে না। তাই আবার sort করা দরকার। যাতে বেশি ফ্রিকুয়েন্সির শব্দগুলো শুরুতে থাকে। এজন্য আমরা sort -nr ব্যবহার করব। এখানে n মানে হলো নিউমেরিক সর্ট। আর r মানে হলো রিভার্স সর্ট। এটা না করলে বেশি ফ্রিকুয়েন্সির শব্দ থাকবে শেষে। এবার তাহলে-  
      cat star_wiki.txt | tr '[:upper:]' '[:lower:]' | grep -oE '\w+' | sort | uniq -c | sort -nr
      • মূল কাজ আসলে শেষ। কিন্তু সব শব্দের ফ্রিকুয়েন্সি দেখে কোনো লাভ নেই। আমরা দেখব কোন দশটি শব্দ সবচেয়ে বেশি আছে। head -10। অবশ্যই ১০ এর বদলে আপনি অন্য কিছি দিতেই পারেন। 
      • তাহলে ফাইনাল কমান্ড দাঁড়াল 
      cat star_wiki.txt | tr '[:upper:]' '[:lower:]' | grep -oE '\w+' | sort | uniq -c | sort -nr | head -10

      এবার আমরা পেয়ে গেলাম সবচেয়ে বেশি ব্যবহৃত শব্দগুলো। চাইলে এটাকে আমরা আলাদা ফাইলে সেভও করে নিতে পারি। সেজন্যে বাড়তি লিখতে হবে > star_wiki_top.txt। 

      কত সহজে কেল্লা ফতে হয়ে গেল! 

      আগেই বলেছি, উইকিপিডিয়া পরিবর্তনশীল। তাই আপনার রেজাল্ট আমার রেজাল্টের সাথে নাও মিলতে পারে। তাতে কী এসে যায়? মূল বিষয়টা তো জানা হয়েই এল! 

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

      সূত্র:  Data Science at the Command Line নামের অসাধারণ বইটি। লেখক: Jeroen Janssens
      Category: articles