Wednesday, July 25, 2018

জিডিপি ও জিএনপি। দুটোই অর্থনীতির গুরুত্বপুর্ণ বিষয়। দুটোই একটি অর্থনীতিতে উৎপাদিত সবগুলো পণ্য ও সেবার (goods and services) বাজার মূল্য পরিমাপ করার চেষ্টা করে। তাহলে পার্থক্যটা কোথায়? পার্থক্যটা হলো ব্যাখ্যায়। 


জিডিপির পূর্ণ রূপ হলো Gross Domestic Product (GDP)। বাংলায় বলা হয় মোট অভ্যন্তরীণ উৎপাদন। একটু চিন্তা করলেই বোঝা যাবে অভ্যন্তরীণ শব্দটিই এখানে জিডিপির মূল ব্যাখ্যা। কোনো একটি দেশের সীমানার অভ্যন্তরে একটি নির্দিষ্ট সময়ে যে পণ্য ও সেবাগুলো তৈরি হবে, সেগুলোর মোট বাজার দরই হলো জিডিপি। দেশের অর্থনীতির শক্তি যাচাই করা হয় এর মাধ্যমেই। অনেক সময় বিনিয়োগকারীরা দেখেন, যে দেশে তারা বিনিয়োগ করতে যাচ্ছেন, তার জিডিপি যথেষ্ট ভালো কি না। নীতিমালা প্রণয়নের জন্যে সরকারকেও জিডিপি নিয়ে কাজ করতে হয়। 

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

আসলে এমন দেশ খুঁজে পাওয়া দুষ্কর যেখানে সব মানুষই নিজের দেশে থাকেন। দেশের অর্থনীতে তো সেইসব প্রবাসীদের অনেকও ভূমিকা রাখেন। কিন্তু জিডিপেতে সেই হিসেবটা আসেনি। সেই কাজটি করে জিএনপি বা Gross National Product (GNP)। বাংলায় বলে মোট বা স্থুল জাতীয় উৎপাদন। এটি হিসেব করে যে দেশের সকল মানুষ বা দেশীয় সকল প্রতিষ্ঠান পৃথিবীর যে কোন প্রান্তে বসেই মোট কী পরিমাণ উৎপাদন করল। যেমন ধরুন, বাংলাদেশি একটি প্রতিষ্ঠান কাজ করছে জার্মানিতে। তাহলে এটি যে পরিমাণ বাজারমূল্যের উৎপাদন করবে, সেটিও জিএনপিতে যোগ হবে। 

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

জিডিপি বেশি হবে নাকি জিএনপি সেটা তাই নির্ভর করে দেশে বিদ্যমান দেশীয় ও বিদেশী প্রতিষ্ঠানের উৎপাদনের অনুপাতের উপর। 

চীনের কথাই ধরুন। পাব্লিক ডেটা প্ল্যাটফর্ম Knoema-এর হিসেব অনুসারে দেশটির জিডিপি জিনপির চেয়ে ৩০ হাজার কোটি ডলার বেশি। কারণ হলো দেশটিতে বিদেশি প্রতিষ্ঠানের কাজ অনেক বেশি। আবার ঠিক উল্টো কারণে যুক্তরাষ্ট্রের জিনপি জিডিপির চেয়ে ২৫ হাজার কোটি ডলার বেশি। 

জিডিপি ভালো না জিএনপি ভালো?
দুটি পরিমাপ প্রায় একই কাজ করলেও জিডিপির ব্যবহারই বেশি। সে তুলনায় জিএনপির ব্যবহার কম। তবে অর্থিনীতির সঠিক চিত্র তুলে ধরতে দুটোরই ব্যবহার হওয়া উচিত। 

এদিকে বিশ্ব ব্যাংক ও জাতিসংঘ আরেকটি পরিমাপ ব্যবহার করার প্রতি জোর দেয়। এটি তাদের মানব সূচকের (Human Development Index) ওপর ভিত্তি করে তৈরি। নাম জিএনআই বা মোট জাতীয় আয় (Gross National Income)। তবে জিডিপি ও জিএনপি উৎপাদন পরিমাপ করলেও নাম থেকেই বোঝা যাচ্ছে জিএনআই আসলে পরিমাপ করে ইনকাম বা আয়। 

সূত্রঃ
২। উইকিপিডিয়া: Knoema 
Category: articles

Wednesday, July 18, 2018

[লিখেছেনঃ ড. রহমতুল্লাহ ইমন] 


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

আসলে সে সময়ে সম্ভাবনা তত্ত্বকে কাজে লাগিয়ে বর্তমানের তথ্য উপাত্তের ওপর ভিত্তি করে ভবিষ্যৎ সম্পর্কে পূর্বাভাস দেয়া শুরু হয়েছিল। চেরনভ ও মোজেস যেমনটা ১৯৫৯ সালে বলেছেন,
 Statistics is the science of prediction and decision making in the face of uncertainty। 

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

এ জগতে কোন কিছুই নিখুঁত নয়, আবার কোন কিছুই আমরা পুরোপুরি জানতেও পারি না। তারপরেও সত্য সন্ধানের প্রচেষ্টা তো থেমে থাকেনি কখনো। অজানাকে জানার, অচেনাকে চেনার প্রচেষ্টাই হল বিজ্ঞান। পরিসংখ্যানও বিজ্ঞান একারণেই। আমরাও অজানাকে জানার চেষ্টা করে থাকি। আমাদের অজানা হল সমগ্রকের (population) কোন বিশেষ বৈশিষ্ট যাকে আমরা পরামিতি (parameter) বলে থাকি। আর তা আমরা জানার চেষ্টা করে থাকি সংগৃহীত তথ্য উপাত্তের ভিত্তিতে।

তাহলে কী দাঁড়াল অবশেষে? পরিসংখ্যান হল জানার মাধ্যমে অজানাকে সন্ধান করার বিজ্ঞান। কী অবাক করা কথা? বিশ্বকবি রবীন্দ্রনাথ ঠাকুর ঠিক এই কথাটিই বলেছিলেন শতবর্ষ আগে। ১৯২৪ সালে তাঁর লেখা গান,

আকাশভরা সূর্য-তারা, বিশ্বভরা প্রাণ,
তাহারি মাঝখানে আমি পেয়েছি মোর স্থান,
বিস্ময়ে তাই জাগে আমার গান॥
এই গানটির মাঝেই তিনি উল্লেখ করেছেন সেই অমোঘ বাক্যটি

কান পেতেছি, চোখ মেলেছি, ধরার বুকে প্রাণ ঢেলেছি,
জানার মাঝে অজানারে করেছি সন্ধান,
বিস্ময়ে তাই জাগে আমার গান॥

আমার ক্ষুদ্র জ্ঞানে পরিসংখ্যানের এর চাইতে ব্যাপক ও নিখুঁত সংজ্ঞা আর কেউ কখনো দেননি।
ছোট্ট একটা উদাহরণ দেয়া যাক। আমার জানার ইচ্ছে হল রাজশাহী বিশ্ববিদ্যালয়ের ছাত্ররা সপ্তাহে গড়ে কতক্ষণ লাইব্রেরী ব্যবহার করে। এর একটি প্রকৃত মান নিশ্চয়ই আছে কিন্তু আমার সেটা জানা নেই। আমি দৈবচয়নের (random sampling) মাধ্যমে ১০ জন ছাত্রছাত্রীকে নির্বাচন করলাম। এবার তাদের জিজ্ঞাসা করলাম সপ্তাহে তারা কতক্ষণ লাইব্রেরি করে? তাদের কাছ থেকে পাওয়া উত্তরগুলো হল ঘন্টার হিসেবে ০, ১, ০, ৪, ০, ০, ৬, ৮, ৩, ০।

এই উপাত্তগুলো এখন আমার জানা। আর এই জানা মানগুলো দিয়েই আমি অজানা কে জানার চেষ্টা করব। যদিও আমি জানি না এর মান কত তবুও যুক্তির খাতিরে ধরে নিলাম তা ২। তাহলে আমি কি আমার জানা তথ্যগুলোকে এভাবে প্রকাশ করতে পারি না?
০ = ২ – ২
১ = ২ – ১
০ = ২ – ২
৪ = ২ + ২
০ = ২ – ২
০ = ২ – ২
৬ = ২ + ৪
৮ = ২ + ৬
৩ = ২ + ১
০ = ২ – ২

অর্থাৎ
জানা (উপাত্ত) = অজানা (প্রকৃত মান) + বিচ্যুতি

এখানে প্রকৃত অজানা মান ২, আর তা থেকে উপাত্তগুলো কখনো -২, -১, -২, +২, -২, -২, +৪, +৬, +১, -২ এভাবে বিচ্যুত হয়ে আছে। এখান থেকে আরও বোঝা যাচ্ছে যে বিচ্যুতি (error) যত কম হবে ততই উপাত্ত প্রকৃত অজানা মানের কাছকাছি পৌঁছাবে। সবচে ভাল হত যদি সবগুলো বিচ্যুতিই শূন্য হত যাতে প্রতিটি উপাত্তই হুবহু প্রকৃত মানের সমান হত। কিন্তু বৈচিত্রই তো এ জগতের প্রধান বৈশিষ্ট। স্রষ্টা কোন কিছুই তো একদম এক ছাঁচে সৃষ্টি করেননি। আমরা বড়জোর যা পারি তা হল এই বিচ্যুতিকে যথাসম্ভব কমিয়ে আনতে।

আমরা লিখতে পারি
বিচ্যুতি = উপাত্ত - প্রকৃত অজানা মান

আমরা এমনভাবে উপাত্ত থেকে প্রকৃত অজানা মান বের করব যাতে বিচ্যুতির বর্গ সমষ্টি (sum of square errors) হয় সর্বনিম্ন।

আমরা এখানে কেন বিচ্যুতির বর্গ নিলাম? গণিতের কলনবিদ্যার (calculus) অন্তরীকরণ (differentiation) থেকে আমরা জানি যে কোন ফাংশন ভা অপেক্ষককে (function) তার পরামিতির সাপেক্ষে অন্তরীকৃত করার পর সেখান থেকে পরামিতির এমন মান পাওয়া যাবে যা ঐ অপেক্ষককের বৃহত্তম বা ক্ষুদ্রতম মান নির্ণয় করতে পারবে। বিচ্যুতির চিহ্নমুক্ত সমষ্টি (sum of absolute errors) পরামিতি থেকে উপাত্তগুলোর দূরত্ব নির্দেশ করে বটে কিন্তু এই অপেক্ষকটিকে পরামিতির সাপেক্ষে অন্তরীকরণ করা যায় না।

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

অপেক্ষকটিকে অন্তরীকরণের পর এখান থেকে যে সমাধান আসে তা খুবই চিত্তাকর্ষক। পরামিতির নিরূপকটি (estimate) আসলে নমুনা গড় (sample mean)। আমরা আগেই বলেছি যে পরামিতির নিরূপকটি ঐ অপেক্ষককের বৃহত্তম বা ক্ষুদ্রতম মান নির্ণয় করতে পারে। নমুনা গড় আসলে কী দেবে সেটা পরীক্ষার জন্য আমরা অপেক্ষকটিকে তার পরামিতির সাপেক্ষে আরেক দফা অন্তরীকৃত করব। শাস্ত্র বলছে অপেক্ষকটির দ্বিতীয় দফা অন্তরীকৃত মান ধণাত্মক হলে অপেক্ষকটি ক্ষুদ্রতম মান দেবে আর অন্তরীকৃত মান ঋণাত্মক হলে অপেক্ষকটির মান হবে বৃহত্তম।

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

আর এভাবেই বারে বারে জানার মাঝে অজানাকে খুঁজে নেয় পরিসংখ্যান।
জয়তু রবীন্দ্রনাথ!

লেখক: অধ্যাপক, ম্যাথেম্যাটিক্যাল সায়েন্সেস,  Ball State University। 
Category: articles

Tuesday, July 17, 2018

R-এ অধিকাংশ কাজই একাধিক উপায়ে করা যায়। নান্দনিক গ্রাফিক্সের জন্য কালার বড় ভূমিকা পালন করে। R-এ প্লট কালার করা যায় অন্তত ৯ উপায়ে। চলুন জেনে নেওয়া যাক সে উপায়গুলো।

ও, আচ্ছা। প্লট করার জন্যে তো হাতে কিছু ডেটা লাগবে। আগে ডেটা বানিয়ে নিই তাহলে।

x=rexp(1000)
y=(rnorm(1000)

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

par(family="serif")

তাহলে এবার আসল কাজে আসা যাক! মনে রাখতে হবে R-এ কমেন্ট শুরু হয় # চিহ্ন দিয়ে। মানে # চিহ্নের পরের কোড রান হবে না। 

১। কালার সিকুয়েন্স 

plot(x, y, col=4, pch=16, cex=1.4, main="Scatter Plot",
     xlab="X values", ylab="Y values")
grid() # optional

এখানে plot ফাংশনের col ছাড়া বাকি আর্গুমেন্টগুলো অপশনাল। প্লটের নান্দনিকতার স্বার্থেই যোগ করা। যাই হোক, এখানে খেয়াল করুন, আমরা শুধু একটি সংখ্যা বসিয়ে দিয়েছি। R-এ প্রায় প্রতিটি সংখ্যার বিপরীতে একটি করে কালার আছে। আপনি চাইলে এখানে 4,5,10, 25, 36- যাই ইচ্ছে বসিয়ে দেখতে পারেন। 

আবার কখনও একই সাথে অনেকগুলো কালারের প্রয়োজন হলে col=1:10 বা c(1,2,4,6,7,3) ফরম্যাটেও লিখতে পারেন। চেক করেই দেখুন না!

আবারও মনে করিয়ে দেই। উপরের grid কমান্ডটি কিন্তু অপশনাল। এটা আসলে প্লটে বক্স আঁকে। # দিয়ে অপশনাল কথাটা বলা আছে।

২। কালার নেইম 

এক্ষেত্রে আমরা সরাসরি কালারের ইংরেজি (সাধারণত) নাম বসিয়ে দেব।

plot(x, y, col="blue", pch=16, cex=1.4, main="Scatter Plot",
     xlab="X values", ylab="Y values")

একই প্লট পাওয়া গেল। এখানেও চাইলে আপনি একাধিক কালার ব্যবহার করতে পারেন একই প্লটে। Scatter প্লটের ক্ষেত্রে একাধিক কালার আপাতত দরকার না হলেও হিস্টোগ্রামে দরকার হতে পারে। যেমনঃ
hist(x, col=c("blue", "grey"))
box() #optional
grid() #optional
এক্ষেত্রে যেটা দরকার, তা হলো সবগুলো কালারের নাম জানা। সেটাও সহজ। প্রথমত, এই লিঙ্ক থেকে R-এর সবগুলো কালার নেইম পাবেন। অফলাইনে ব্যবহার করতে ডাউনলোড করে নিতে পারেন। আরও সহজে নামগুলো দেখতে চাইলে colors() কোড ব্যবহার করুন। তবে এক্ষেত্রে কোন কালারের চেহারা কেমন সেটা বোঝা যাবে না। সেটা বোঝা যাবে পিডিএফ ফাইলটা থেকে (লিঙ্কের)।

৩। অটো কালার ১ (topo.colors(10))
hist(y, col=topo.colors(10))
grid() #optional
box() #optional

যতটা আলাদা কালার চাই, ব্র্যাকেটের ভেতরে সেটা উল্লেখ করে দিতে হবে। 

৪। অটো কালার ২
hist(x, col=heat.colors(12))
grid() #optional
box() #optional

এক্ষেত্রেও যতটা আলাদা কালার চাই, ব্র্যাকেটের ভেতরে সেটা উল্লেখ করে দিতে হবে। 

৫। অটো কালার ৩
hist(x, col=terrain.colors(3))
grid() #optional
box()#optional
এক্ষেত্রেও যতটা আলাদা কালার চাই, ব্র্যাকেটের ভেতরে সেটা উল্লেখ করে দিতে হবে। 

৬। হেক্সাডেসিমাল কোড

এই সাইট ভিজিট করুন। অথবা hexadecimal colors লিখে সার্চ দিলে আরও নানান সাইট পাওয়া যাবে। এখান থেকে হেক্সাডেসিমাল কোডটি বা কোডগুলো বসিয়ে দিতে পারেন। 
hist(x, col="#80ff00")
grid() #optional
box()#optional

৭,৮। Rgb ও hsl কালার কোড

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

hist(x, col=rgb(0,0.8,0.9))
grid() #optional
box()#optional

আর hsl কোডে আরেকটু জটিলতা আছে। এটাকে ব্যবহার করতে চাইলে এই টিউটোরিয়াল পড়ুন। 

৯। সেরা কৌশল 

এতক্ষণ যেগুলো বললাম এগুলোর অনেকগুলো থেকেই অনেক সময় সেরা কম্বিনেশন বাছাই করা কঠিন। যেমন নীচের ম্যাপটি আঁকতে চাই। ম্যাপটি আঁকার বিস্তারিত কোড আছে এখানে। 

spplot(zilla, "literacy",col.regions=terrain.colors(5),
       cuts=4, col='transparent', main='Sample Map',
       scales=list(draw=T))

এখানে terrain.colors(5) ভালো কাজ করেছে। তবে কালারের সিকুয়েন্স ধরে রাখতে পারেনি। 

কিন্তু এটায় দেখুন, মান বাড়ার সাথে কালার গাঢ় হয়েছে। অথবা নীচের হিস্টোগ্রাম দেখুনঃ
নানান ক্ষেত্রেই এটার প্রয়োজন অনুভব করবেন। এক্ষেত্রে একটি প্যাকেজ লাগবে। নাম RColorBrewer। ইন্সটল করে লোড করে নিন। 

install.packages("RColorBrewer")
library(RColorBrewer)

এবার আবার হিস্টোগ্রাম আঁকি। 
hist(x, col=brewer.pal(n=5, name='YlGn'), ylim=c(0,500))

এখানে n এর জায়গায় যতগুলো কালার চান সেটা বসাবেন। আর name এর জায়গায় কী বসাবেন সেটার উপরই বির্ভর করছে কালার কেমন হবে। নীচের ছবিতে দেখে নিন কোডগুলো। বড় করে দেখতে এখানে ক্লিক করুন। 

 

আপনাকে আর পায় কে। দৃষ্টিনন্দন প্লট এঁকে তাক লাগিয়ে দিন বসকে!

এর বাইরে আপনি আরও কিছু জানলে কমেন্টে অবশ্যই জানাবেন।
Category: articles

ইংরেজি উইকিপিডিয়ার বাংলাদেশ পেইজের এজুকেশন সেকশনে শোভা পাচ্ছে আমার আঁকা এই ম্যাপটি। ম্যাপটিতে বাংলাদেশের বিভিন্ন এলাকার স্বাক্ষরতার চিত্র তুলে ধরা হয়েছে। এমন একটি ম্যাপ R-এ আঁকা অকল্পনীয় রকম সহজ। এটা নিয়েই আজকের পোস্ট।

প্রথম কাজ ম্যাপ আকাঁর জন্য প্রয়োজনীয় শেইপ ফাইল (shape file)। R এর plot ফাংশন দিয়ে শুরুতে আমরা এই ফাইলের একটি অংশই প্লট করব। বাংলাদেশের জন্য বানানো শেইপ ফাইলটি আপনাকে ডাউনলোড করে নিতে হবে। এটা পাওয়া যাবে এই লিঙ্কে। লিঙ্ক থেকে Shapefile টি ডাউনলোড করে নিন।

এখানে ক্লিক করেও ডাউনলোড করতে পারেন।

কোনো লিঙ্ক কাজ না করলে এখানে গিয়ে সর্বশেষ ভার্শনের rds ফাইল নামিয়ে নিন। 

একটি জিপ ফাইল ডাউনলোড হবে। ফাইলটাকে আনজিপ করে নিন। আনজিপ করে এমন একটি ফোল্ডার পাবেন।



এই ফোল্ডারে আসলে বিভিন্ন আলাদা আলাদা ম্যাপ আঁকার ফাইল আছে। যেমন আলাদা করে বিভাগের ম্যাপ আঁকতে চাইলে দরকার হবে BGD_adm1 ফাইলটি। জেলাগুলোও দেখাতে চাইলে BGD_adm2 ফাইলটি। আর উপেজেলাগুলোও আলাদা করে দেখাতে চাইলে লাগবে BGD_adm3 ফাইলটি।

☛ লক্ষ্য করুন 
ভার্সনভেদে ডাউনলোড করে আনজিপ করা ফাইলের নাম আলাদা হতে পারে। যেমন একটি ক্ষেত্রে এটির নাম gadm36_BGD_2। 

একটি বিষয় বুঝে নেওয়া ভাল। Shapefile আসলে অনেকগুলো আলাদা ফাইলের সমন্বয়। যেমন, BGD_adm1 নামে অনেকগুলো ফাইল আছে। একই নামের সবগুলো ফাইল একই ফোল্ডারে থাকলে তবেই কেবল ফাইলটি কাজ করবে। তার মানে এই নয় যে ঐ ফোল্ডারে অন্য ফাইল থাকা যাবে না। আমাদের এই ফোল্ডারেই কিন্তু চারটি ম্যাপ আঁকার ফাইল আছে।

এবার ম্যাপটিকে R-এ পড়াতে হবে। এজন্য "rgdal" নামে একটি প্যাকেজ লাগবে। R এর প্যাকেজ ইনস্টল করার মতো সহজ কাজ দুনিয়াতে আর নেই। ইনস্টল ও লোড করে নিন।

☛ টিপস: Rstudio ব্যবহার করলে কাজটি সহজ হবে। না থাকলে ইনস্টল করে নিন। শুধু ম্যাপিং-ই না, R এর করা কাজগুলো হাজারো উপায়ে সহজতর হয়ে যাবে। Rstudio তে কোড run করতে Ctrl+Enter চাপুন।

install.packages("rgdal")
library(rgdal)

এবার Shapefile টিকে লোড করার পালা।

zilla=readOGR("D:/R/RGIS/BD", layer="BGD_adm2")

খেয়াল করুন, এখানে "D:/R/RGIS/BD" হলো BGD_adm2 ফাইলটি যে ফোল্ডারে আছে তার লোকেশন। আপনি ফাইলগুলো যেখানে রাখবেন সেই ফোল্ডারের লোকেশন এখানে লিখতে হবে। আর layer অংশটিতে কিছু করা লাগবে না। অবশ্য আপনি যদি উপজেলার ম্যাপ আঁকতে চান, তাহলে BGD_adm3 লিখতে পারেন।

☛ layer এর জায়গায় ফোল্ডারের ফাইল থেকে সঠিক নামটি বসাতে হবে।

এবার "zilla" অবজেক্টটি প্লট করে দেখুন। বাংলাদেশের ম্যাপ পেয়ে যাবেন।

plot(zilla, col="green")

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

install.packages("sp")
library(sp)

বাংলাদেশের প্রতিটি জেলার স্বাক্ষরতার হার আমাদেরকে zilla অবজেক্টটিতে যোগ করতে হবে। তার আগে ৬৪টি জেলার তথ্য zilla অবজেক্টে-এর সাথে মিলিয়ে সাজিয়ে নিতে হবে। এখানেই Rstudio না থাকলে একটু সমস্যা হবে। zilla অবজেক্টে জেলাগুলোর ক্রম দেখার জন্য Rstudioতে View(zilla) কোড রান করলে ID_2 ও NAME_2 কলামে যথাক্রমে জেলার ক্রম ও নাম দেখা যাবে। এই ক্রম অনুসারেই আপনাকে স্বাক্ষরতার তথ্য লিপিবদ্ধ করতে হবে। 



কাজটি আপনি অনেকভাবে করতে পারেন। ৬৪টি জেলার হার একটি এক্সেল ফাইলে বসিয়ে ফাইলটিকে .csv আকারে সেইভ করে নিতে পারেন। আবার এক্সেল ফাইল সরাসরি পড়াতেও পারেন। এক্ষেত্রে readxl প্যাকেজ ব্যবহার করতে পারেন। আবার চাইলে সরাসরি R এর মধ্যেই হারগুলো নিয়ে একটি ভেক্টর বানিয়ে নিতে পারেন। যেমনঃ

literacy=c(61.24, 43.24,...) 

আপাতত আমরা csv ফাইল বানিয়ে রেখেছি। এটাই Rকে দিয়ে পড়াচ্ছি। এখান থেকে ডাউনলোড করে নিন। 

literacy=read.csv("D:/R/RGIS/literacy.csv")

"D:/R/RGIS/literacy.csv" অংশটিতে ফাইলটি যে ফোল্ডারে রেখেছেন তার পূর্ণ লোকেশন লিখতে হবে। 

এবার এটাকে আমরা zilla-এর সাথে যুক্ত করব। zilla অবজেক্টি ডেটা ফ্রেইম না হলেও ডেটা ফ্রেইমের কিছু নিয়ম এখানে খাটে। সেই কৌশলই আমরা কাজে লাগাব। 

zilla$literacy=literacy

Rstudio-তে View(zilla) রান করলে একেবারে ডান পাশের কলামে literacy দেখা যাবে। 


এবার আমরা প্রায় প্রস্তুত। তাহলে ম্যাপটা এঁকেই ফেলি! 

spplot(zilla, "literacy",col.regions=topo.colors(5),
       cuts=4, col='transparent', main='Sample Map',
       scales=list(draw=T))

বাহ! এইমাত্র আপনি সফল একজন ম্যাপ আর্টিস্ট হয়ে গেলেন। পাওয়া গেল ম্যাপটি।

এই কোডটির ব্যাখ্যা
Shapefile টিকে রাখতে হবে একদম শুরুতে (আমরা এখানে যাকে zilla নামে সেইভ করেছি)। তারপরেই যে কলামের তথ্যের ভিত্তিতে প্লট করতে চাই তার নাম (যেমন আমাদের এখানে literacy)। col.regions= অংশে হবে কালারগুলোর নাম। R প্রোগ্রামিং-এ কালার বসানোর অনেক উপায় আছে। topo.colors(5) হলো এমন একটি উপায়। যেখানে ৫টি কালার সেট হয়ে যাবে। আপনি চাইলে c("red", "green", ...) এভাবেও বসাতে পারেন। আবার heat.colors(5) বা terrain.colors(5) বসিয়েও দেখতে পারেন।

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

col.regions অংশে যতগুলো আলাদা কালার বসিয়েছেন cuts অংশে তার ১ কম সংখ্যা বসবে। আপাতত এটা জানাই যথেষ্ট। আরও জানতে হলে ?spplot রান করে জেনে নিতে পারেন। 
Category: articles

Thursday, June 7, 2018

R এর গ্রাফগুলোতে এমনিতে গ্রিড থাকে না। কিন্তু চাইলে করা যাবে না, এমন কিছু R-এ খুঁজে পাওয়া দুষ্কর। আমরা আজকে নীচের গ্রাফটি আঁকার উপায় দেখব।


বরাবরের মতোই আগে লাগবে ডেটা। তো কিছু ডেটা বানিয়ে নেই। 

x=sample(30)+1:30
y=sample(30)+30:1
df=data.frame(x,y)
df.ts=ts(df,start=1980)

একটি টাইম সিরিজ ফরম্যাট বানিয়ে নিলাম। এবার চাইলে প্লটের ব্যাকগ্রাউন্ড সেট করে নিতে পারি। না করলেও দুনিয়া ধ্বংস হয়ে যাবে না। আপনার ইচ্ছা! 

par(bg="#8FBC8F")

এখানে #8FBC8F হলো হেক্স কোডে লেখা কালার। আপনি এ সাইট থেকে আরও নানান ধরনের কালার বসাতে পারেন। চাইলে আপনি red, blue ইত্যাদিও দিতে পারেন। 

x ও y চলকে বসানোর জন্য দুই রকম কালার ঠিক করে রাখি। 

color= c("red","yellow")

এবার প্রাথমিক প্লটখানা এঁকে ফেলি। এতে কিন্তু কোনো গ্রিড নেই। 

ts.plot(df.ts, gpars=list(col=color), lwd=5,
        ylab="Value", xlab="Year", main="Grid on R plot")

এবারই আমাদের মূল কাজ। মানে গ্রিড। 

grid(7,7, col="black", lwd=3, lty='solid')

7, 7 বোঝাচ্ছে যে x ও y অক্ষ বরাবর যথাক্রমে কয়টি করে লাইন আঁকা হবে। লাইনের রঙ, লাইনের প্রস্থ সবই চেঞ্জ করতে পারবেন ইচ্ছা মতো। 

আরও নানান উপায় দেখতে হেল্প ফাইল দেখে নিন। 

?grid

এবার প্লটে লিজেন্ড দিয়ে বুঝিয়ে দেওয়া যাক কোন লাইনটা কোন চলকের। 

legend("top", legend=names(df), ncol=2, col=color, pch=19)
তবে সবচেয়ে ভালো grid() ফাংশনের ভেতরে কিছুই না লিখলে। এতে করে y অক্ষের সাথে দাগগুলো নিজে নিজেই মিলে যাবে। দেখতে ও বুঝতেও হবে সহজ। অবশ্য প্লট ব্যাকগ্রাউন্ড সেট করলে কালার ম্যাচিং না হলে কালার যুক্ত করা যেতে পারে।

par(bg="#00bfff")
plot(sample(10,6), pch=19, col="white", type="b", lwd=2,
     ylab="Value")
grid()

এটায় কালার মিলছে না। তাই গ্রিডের কালার দিয়ে দিলাম।

par(bg="#00bfff")
plot(sample(10,6), pch=19, col="white", type="b", lwd=2,
     ylab="Value")
grid(col="black")

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

আরও পড়ুন 
☛  স্মুথ প্লট আঁকবেন কীভাবে 
Category: articles
আমরা নীচের ছবির মতো একটি গ্রাফ আঁকতে চাই। যেখানে একই গ্রাফে অনেকগুলো টাইম সিরিজ ডেটা থাকবে।

একই গ্রাফে অনেকগুলো টাইম সিরিজ 

তো প্রথমেই আঁকার জন্যে আমাদের কাছে কিছু ডেটা থাকতে হবে। আপাতত আমরা নিজেরাই কিছু ডেটা বানিয়ে নিচ্ছি। আপনি চাইলেই এক্সেল বা CSV (কমা সেপারেটেড ভ্যালু) ফাইল থেকেও ডেটা লোড করতে পারেন।

x=seq(30000,40000,500)+rnorm(mean=500, sd=1000,n=21)
y=seq(29000,39000,500)+rnorm(mean=500, sd=1000,n=21)
z=x-y
df=data.frame(income=x, expense=y, balance=z)

এখানে আমরা df নামে একটি ডেটা ফ্রেইম তৈরি করলাম। আপনি চাইলে head(df) লিখে ডেটা ফ্রেইমের চলকগুলোর প্রথম ৬টি করে মান দেখে নিতে পারেন। এবার আমাদেরকে এই ডেটাকে টাইম সিরিজ ফরম্যাটে রূপ দিতে হবে। একটি চলক (variable) নিয়ে প্লট করার উপায়টা আগে একটু দেখে নেই। 

x.ts=ts(x, end=2018)

ts ফাংশন x চলকটিকে টাইম সিরিজ ফরম্যাটে রুপান্তর করল।  ?ts কমান্ডের সাহায্যে আপনি ts ফাংশনের আরও নানান অপশন দেখে নিতে পারেন। যেমন ডেটা কোন বছর শুরু হল, সেটা জানা থাকলে start=year অপশন ব্যবহার করতে পারেন। 

এবার আমরা একে প্লট করব

plot(x.ts) 
এটা খুব একটা সুন্দর হবে না। তার চেয়ে আরও কিছু attribute যোগ করলে ভাল হয়। 

plot(x.ts, col=3, lwd=2, ylab="Amount")
lwd এর কাজ হলো লাইন কতটা মোটা বা চিকন হবে তা ঠিক করা। lwd=1 দিলে সবচেয়ে চিকন হবে। আরও ভাল করতে চাইলে একটা ব্যাকগ্রাউন্ড যোগ করতে পারেন।

par(bg="gray")
plot(x.ts, col="red", lwd=2) 

একটি চলকের টাইম সিরিজ গ্রাফ 

এবার আমরা একই গ্রাফে আমাদের df ডেটাফ্রেইমের ৩টা চলক একত্রে আঁকবো। তাহলে একে আগে টাইম সিরিজ ফরম্যাট করা যাক। চেঞ্জ করে নতুন নাম দিলাম df.ts।

df.ts=ts(df, end=2018)
এবার একে প্লট করে ফেলি।

ts.plot(df.ts, gpars=list(col=topo.colors(3)), lwd=2,
        ylab="Amount")
খেয়াল করুন, এখানে আমরা plot ফাংশনের বদলে ts.plot ব্যবহার করলাম। 

topo.colors এর কাজ হলো অটোম্যাটিক কালার করে নেওয়া। ভেতরে ৩ মানে ৩টি কালার হবে। যেহেতু আমাদের চলক ৩টি। অটো কালার করার আরও অনেক উপায় আছে। যেমন terrain.colors(3), rainbow(3), heat.colors(3)। আবার ম্যানুয়ালিও কালার করা যাবে। 

ts.plot(df.ts, gpars=list(col=c("green",'Blue','Yellow'), lwd=2))। 

এবার legend দিয়ে বোঝাতে হবে কোন কালারের কী মানে। 

legend("topleft", legend=names(df), fill=terrain.colors(3), ncol=3)

ts.plot কমান্ডে col অপশনে যেটা থাকবে এখানে fill এর জায়গায় সেটাই দিতে হবে। ncol মানে লিজেন্ড বক্স এর কলাম কয়টি হবে। প্লট দেখে সুবিধামতো লিজেন্ড এর পজিশন ঠিক করতে হবে। topleft এর বদলে top, bottom, right, left বা এদের যে কোন রকম কম্বিনেশন ব্যাবহার করা যাবে। 
legend এর ভেতরের legend এর মানে হলো কালারগুলোর নাম কী কী হবে। ওপরের কোডে আমরা সরাসরি ডেটাফ্রেইমের কলাম নেইম দিয়ে দিয়েছি। চাইলে ইচ্ছামতো অন্য কিছুও দেওয়া যায়। 

legend("topleft", legend=c("red","green","yellow"), fill=terrain.colors(3), ncol=3)


আরেকটি অপশনাল কাজ বাকি। প্লটের ব্যাকগ্রাউন্ড একটু চেঞ্জ করে নিলে আরেকটু দৃষ্টিনন্দন হতে পারে। এটা আমাদের মোটামুটি ফাইনাল কাজ। 

par(bg="gray")
ts.plot(df.ts, gpars=list(col=topo.colors(3)), lwd=5, ylab="Amount", xlab="Year")
legend("topleft", legend=names(df), fill=topo.colors(3), ncol=3,)
এই প্লটটা স্বাভাবিকের মতো এবড়োথেবড়ো নয়। 

পড়ে নিন তাহলে 
Category: articles

Wednesday, June 6, 2018

শুধু যে ডেটা অ্যানালিটিক্সের সিরিয়াস কাজেই R কারিশমা দেখায় এমন না। হাসতে-খেলতে মনের খোরাক যোগানোরও নানান উপাদান পাওয়া যাবে এর মধ্যে।

ggplot2 প্যাকেজ দারুণ সব ডিজাইন আঁকা যায়। তবে প্যাকেজের ভেতরে না গিয়েও বেশ দারুণ প্লট তৈরি করা যায়। যেমন, কোনো প্যাকেজ ছাড়াই আমরা এটা আঁকতে পারি।


এর কোড খুবই সরল। ভবিষ্যতে আমরা এর খুঁটিনাটি ব্যাখ্যা করব ইনশাআল্লাহ।



R এর অন্যতম বিখ্যাত প্যাকেজ হলো ggplot2। এর মাধ্যমেই আমরা নীচের ফুলটি এঁকে ফেলতে পারি।

R প্রোগ্রামিং দিয়ে আঁকা ফুল 

এর জন্যে প্রথমেই ggplot2 প্যাকজেটি লোড করতে হবে।

library(ggplot2)

আর যদি প্যাকেজটি আগে ইনস্টল করা না থাকে তবে ইনস্টল তো করে নিতেই হবে।

install.packages("ggplot2")

ফুলের আকার-আকৃতির জন্যে প্রথমে কিছু ফর্মুলা লিখে নিতে হচ্ছে। এরপরেই পাওয়া যাবে কাঙ্খিত সেই বাহারি ফুল!

angle=pi*(3-sqrt(5)) n=500 t=angle*(1:n) x=sin(t) y=cos(t) df=data.frame(t,x,y) library(ggplot2) p=ggplot(df, aes(x*t,y*t)) p+geom_point(size=8, alpha=0.6, color='blue')+ theme(title=element_blank(), text=element_blank(), panel.grid = element_blank(), panel.background = element_rect(fill='white'))

চাইলেই আপনি আরও হাজার রকম ফুল আঁকতে পারেন। শুধু ওপরের angle টাই পাল্টে দেখুন না! যেমন এইটুকু শুধু পাল্টালাম। ফলাফল নিজেই দেখুন।

angle=pi*(5-sqrt(10)) n=700
আবার এই কোড কী করল দেখুন!
angle=2.73*(3-sqrt(4)) n=300
R প্রোগ্রামিং দিয়ে আঁকা ফুল
Category: articles

Wednesday, May 30, 2018

সকল কাজের মোক্ষম কাজী R প্রোগ্রামিং ল্যাঙ্গুয়েজ। ইমেইল করার জন্যেও এতে রয়েছে দারুণ একটি প্যাকেজ। নাম: mailR



শুরুতে আপনাকে R এর প্যাকেজটি ইনস্টল ও লোড করে নিতে হবে।
install.packages("mailR")

এই প্যাকজেটি আবার R এর আরেকটি প্যাকেজ rjava এর ওপর নির্ভর করে। তবে সেটা আপনাকে আলাদা করে ইনস্টল করা লাগবে না। R নিজেই করে নিবে। তবে আপনার পিসিতে জাভা ইনস্টল করা থাকতে হবে। না থাকলে এখান থেকে ডাউনলোড করে ইনস্টল করে নিন। এটা একবারই করতে হবে।
আপনার কম্পিউটার 64 bit হলে জাভার ৬৪ বিটের ভার্সন নিবেন কিন্তু।

এবার library(mailR) কোড রান করে প্যাকেজটি লোড করুন।
এবার নীচের কোডখানা নিজের মতো করে সাজিয়ে পাঠিয়ে ফেলুন আপনার ইমেইল।

send.mail(from="yourmail@mail.com",
to="sendto@mail.com",
subject="R Email",
body="Write what you want to send",
html=T,
smtp=list(host.name = "smtp.gmail.com",
port = 465,
user.name = "yourmail@mail.com",
passwd = "password",
ssl = T),
authenticate=T,
attach.files="C:\\file_path")

এখানে নিজের মতো করে সব কিছু ঠিক করে দিয়ে কোডটি রান করালেই কেল্লা ফতে!

☛ ফাইল অ্যাটাচ করতে হলে attach.files অংশে ফাইলের লোকেশন লিখতে হবে।

☛ গুগোলের জিমেইল থেকে ইমেইল পাঠাতে গেলে সরাসরি কাজ করবে না। সেক্ষেত্রে গুগোল আপনাকে একটি ইমেইল পাঠিয়ে বাইরের অ্যাপ থেকে ইমেইল করার অনুমতি চাইবে। অনুমতি দিলেই এর পর থেকে ইমেইল যাবে। তবে এ কারণে নিরাপত্তায় কোনো সমস্যা হলে তার দায় আপনাকেই নিতে হবে!

আরও পড়ুন 
☛ R প্রোগ্রামিং মহান কেন
Category: articles

Wednesday, May 9, 2018

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


এই যে কাজগুলো, এগুলোর জন্যে বর্তমানে জ্ঞানের নতুন একটু শাখাই গড়ে উঠেছে। নাম ডেটা সায়েন্স। পরিসংখ্যানের ধারণা ও প্রয়োগ নির্ভর জ্ঞানের নতুন এই শাখাটি চাকরির বাজারে ক্রমশ পেছনে ফেলে দিচ্ছে অন্য সব পেশাকে। হার্ভার্ড বিজনেস রিভিউ ম্যাগাজিনের ২০১২ সালের অক্টোবর সংখ্যায় বলা হয়, ‘একুশ শতকের সবচেয়ে আকর্ষণীয় চাকরি হল ডেটা সায়েন্স’। জব রিভিউ সাইট গ্লাসডোর এর একটি জরিপ অনুসারে, ইতোমধ্যে অ্যামেরিকার সেরা পেশার তালিকায় এক নম্বরে স্থান পেয়েছে পেশাটি। আইবিএম এর এক জরিপ অনুসারে শুধু ২০১৫ সালেই অ্যামেরিকায় এই ফিল্ডে সাড়ে তেইশ লাখ চাকরি দেওয়া হয়।

ডেটা সায়েন্সের এ বিশাল ক্ষেত্রটিতে কাজের জন্যে রয়েছে কাড়ি কাড়ি সফটওয়্যার। রয়েছে প্রোগ্রামিং ল্যাঙ্গুয়েজ, স্ট্যাটিস্টিক্যাল প্যাকেজ। অনেকে তো মাইক্রোসফট এক্সেলেই অনেক উপাত্ত বিশ্লেষণ করে ফেলেন। আরেকটু ভালো করতে চাইলে কেউ কেউ আবার SPSS, Stata, Minitab কিংবা SAS এর আশ্রয় গ্রহণ করেন। কেউ কেউ আবার জাভা, পাইথনের মতো প্রোগ্রামিং কাজে লাগিয়েও করেন ডেটা সায়েন্সের কাজ।

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

সব মিলিয়ে R এর জনপ্রিয়তাও দিন দিন বেড়ে চলছে। নীচের গ্রাফটিতে একটু চোখ বুলালেই বিষয়টি সহজে বোঝা যায়।
চিত্র ১: ২০১৫ ও ২০১৬ সালে উপাত্ত বিশ্লেষণের কাজে প্রোগ্রামিং/পরিসংখ্যানিক ল্যাঙ্গুয়েজের ব্যবহার

কিন্তু R কেন এত জনপ্রিয়? এর পেছনের কারণগুলোতে একটু চোখ বুলিয়ে নেয়া যাক।
প্রথমত, R একটি ফ্রি সফটওয়্যার। Matlab, SPSS কিংবা SAS এর মতো লাইসেন্স ক্রয়ের কোনো বিষয় নেই। যে কেউ ডাউনলোড করে ব্যবহার করতে পারেন। শুধু তাই নয়, এর সোর্স কোডও সবার জন্যে উন্মুক্ত। আপনি চাইলে কোড বদলে একে মডিফাইও করে নিতে পারেন। সাইজও খুব ছোট। মাত্র ৫০ এমবির কাছাকাছি। যেখানে Matlab এর সাইজ ৮ থেকে ১১ জিবি। অন্য দিকে পরিসংখ্যানিক বিশ্লেষণের জন্যে R ই সবচেয়ে পূর্ণাঙ্গ টুল। এর কাজকে একটু সুশৃঙ্খল উপায়ে করার জন্যে রয়েছে আরেকটি সফটওয়্যার R স্টুডিও। দারুণ এই টুলটিও সম্পূর্ণ ফ্রি।

প্রোগ্রামিং/সফটওয়্যার ব্যবহার করতে গেলে মাঝে-মধ্যে সমস্যায় আটকে যাওয়া অস্বাভাবিক নয়। কিন্তু বেশিরভাগ ফ্রি সফটওয়্যারের অসুবিধা হল, সহজে বিভিন্ন সমস্যায় সমাধান পাওয়া যায় না। অথবা সমাধান পেতে হলে গুণতে হয় অর্থ। কিন্তু এখানে সে অসুবিধাও নেই। সমাধানের জন্যে প্রস্তুত আছেন লাখ লাখ ব্যবহারকারীরাই। Stackoverflow কিংবা Quora সহ অসংখ্য ব্লগ ও ফোরামে যে কোন সমস্যা নিয়ে প্রশ্ন করলেই জবাব পাওয়া যায়। দীর্ঘ দিন ধরে R জনপ্রিয় থাকার কারণে বর্তমানে বেশিরভাগ সাধারণ সমস্যার জবাব গুগোলে সার্চ করলে নিমিষেই মিলে যায়। মানে, বেশিরভাগ সমস্যা আগে থেকেই সমাধান হয়েই আছে।

R এর অন্যতম প্রধান একটি সুবিধা হলো অসংখ্য প্যাকেজের উপস্থিতি। ধরুন, আপনি প্রাণপরিসংখ্যান নিয়ে কাজ করতে চান। তাহলে আপনাকে শুধু survivalপ্যাকেজটি লোড করতে হবে। বার ডায়াগ্রাম কিংবা পাই চার্টগুলোকে দৃষ্টিনন্দন করে উপস্থাপন করতে চাইলে আপনার জন্যে ggplot2 নামের প্যাকেজটি। সব মিলিয়ে সুন্দর করে উপাত্ত উপস্থাপনের জন্যে R এর বিকল্প পাওয়া কঠিন। (নীচের চিত্রে R দিয়ে বানানো একটু পাই চার্ট দেখানো হলো।) ডেটাবেজ নিয়ে কাজ করতে চাইলে রয়েছে sqldf। সুন্দর সুন্দর ম্যাপ বানাতে চাইল কাজে আসবে ggmap, maptools সহ অনেকগুলো প্যাকেজ। আর এগুলোও সব কিন্তু বিনামূল্যেই পাওয়া যাবে। এরকম প্যাকেজের সংখ্যা বর্তমানে ১০ হাজারের ওপরে। এগুলো মূল সফটওয়্যারের সাথে না দেয়ার উদ্দেশ্য সফটওয়্যারটি যাতে ভারী না হয়ে যায়। দরকারের সময় ২/৩ ক্লিকেই বা এক লাইন কোড লিখেই লোড করে ফেলা যায় নির্দিষ্ট প্যাকেজটি। নতুন নতুন কাজের জন্যে নিয়মিত নতুন প্যাকেজ উদ্ভাবনের কাজ এখনও চলছেই। এমনকি আপনি নিজেও চাইলে প্যাকেজ বানিয়ে উন্মুক্ত করে দিতে পারেন।
R দিয়ে বানানো পাই চার্ট 

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

আইট্রিপলই (IEEE) এর স্পেকট্রাম ম্যাগাজিনের ২০১৭ সালের জরিপ অনুসারে বিভিন্ন প্রোগ্রামিং এর র‍্যাংকিং

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

বিজনেজ অ্যানালাইসিস এর জগতে R এর দক্ষতা বুঝতে পেরে অধিকাংশ প্রচলিত সফটওয়্যারই R এর সাথে সাথে সমন্বয় করে কাজ করার ব্যবস্থা করছে। এছাড়াও এক্সেল, SPSS, Stata, Microsoft Access, Oracle, MySQL কিংবা SQLite দিয়ে বানানো ডেটাবেজও R খুব সহজে পড়ে নিয়ে কাজ করতে পারে।

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

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

সূত্রঃ
ইডিএক্স ব্লগ, কম্পিউটার ওয়ার্ল্ড ডট কম, ইনফোওয়ার্ল্ড ডট কম, ওয়াশিংটন পোস্ট, আইবিএম ডট কম, স্ট্যাকওভারফ্লো, অ্যানালিটিক্স ট্রেইনিংস ডট কম।

  • https://blog.edx.org/the-importance-of-data-science-in-the-21st-century
  • analyticstrainings.com/?p=101
  • https://www.computerworld.com/article/2921176/business-intelligence/great-r-packages-for-data-import-wrangling-visualization.html
  • https://www.analyticsvidhya.com/blog/2016/10/18-new-must-read-books-for-data-scientists-on-r-and-python/
  • https://www.infoworld.com/article/2940864/application-development/r-programming-language-statistical-data-analysis.html
  • http://sharpsightlabs.com/blog/r-recommend-data-science/
  • https://www.washingtonpost.com/news/on-leadership/wp/2016/01/20/glassdoor-ranks-the-25-best-jobs-in-america-2/
  • https://www-01.ibm.com/common/ssi/cgi-bin/ssialias?htmlfid=IML14576USEN&
  • https://stackoverflow.blog/2017/10/10/impressive-growth-r/
  • https://www.kdnuggets.com/2015/05/r-vs-python-data-science.html
Category: articles
R এ আঁকা গ্রাফগুলো সাধারণত একটু এবড়োথেবড়ো হয়। অনেক সময়ই দেখতে অতটা সুন্দর হয় না। যেমন এই গ্রাফটি দেখুন।

R প্রোগ্রামিং: টাইম সিরিজ গ্রাফ 

এই ছবিটা কিছুটা এবড়োথেবড়ো। অনেক সময় আরও অনেক বেশি এবড়োথেবড়োও হয়।

সামান্য কিছু কোড করেই একে অনেকটা উন্নত করে নেওয়া যায়।
png(filename="output.png", type="cairo")
#see ?png for more detail
# Code to plot
dev.off()

filename অংশে আপনি যে লোকশনে সেভ করতে চান, সেটা ও ফাইলের নাম উল্লেখ করবেন। উপরের কোডে output নামে একটি png ফাইলে ছবিটা সেভ হবে। আর এটা সেভ হবে আপনার working directory তে। আপনার বর্তমান ওয়ার্কিং ডিরেক্টরি দেখুন।

getwd()

চাইলে আবার পাল্টেও নিতে পারেন।
setwd("D:/R")

উদাহরণ

আমরা নীচের বানানো ডেটা ব্যবহার করব।
x=seq(30000,40000,500)+rnorm(mean=500, sd=1000,n=21)
y=seq(29000,39000,500)+rnorm(mean=500, sd=1000,n=21)
z=x-y
df=data.frame(income=x, expense=y, balance=z
df.ts=ts(df, end=2018)

এবার smooth করার জন্য কাজ। এখানে par(bg="gray") অংশটি অপশনাল। ব্যাকগ্রাউন্ড সেট করার জন্য বসানো হয়েছে।

png(filename="myplot.png", type="cairo")
par(bg="gray")
ts.plot(df.ts, gpars=list(col=topo.colors(3)), lwd=5, ylab="Amount", xlab="Year", main="Smooth R plot")
legend("topleft", legend=names(df), fill=topo.colors(3), ncol=3,)
dev.off()

উপরের ছবিটাই এখন মসৃণ হয়ে এমন হয়ে যাবে।

smooth R প্লট
আরও পড়ুন 
Category: articles