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 কারিশমা দেখায় এমন না। হাসতে-খেলতে মনের খোরাক যোগানোরও নানান উপাদান পাওয়া যাবে এর মধ্যে। 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