«

»

জুন 16

R পরিচিতি – লেকচার ২.২: R ড্যাটা ম্যানেজমেন্ট

প্রথমে আপনাকে ওয়ার্কিং ডিরেক্টরি সেট করে নিতে হবে।

setwd("~/R/Shikkhok/3rdclass")

আপনার ওয়ার্কিং ডিরেক্টরিতে এই ফাইলগুলো ডাউনলোড করে কপি করে নিন।

এরপর আমরা গত ক্লাসে তৈরি করা বিভিন্ন অবজেক্ট ও সেটা থেকে তৈরি করা data.frame থেকে একটি csv ফাইল তৈরি করে নেই।

# Creating some vectors
age <- c(23, 25, 54, 43, 28)
income <- c(14000, 65000, 24000, 42000, 19000)
names <- c("Abul", "Babul", "Dobir", "Sobir", "Sumona")
joining <- as.Date(c("2012-12-15", "2011-05-17", "2009-03-10", "2008-04-10", "2004-06-11"))
gender <- c(1, 1, 1, 1, 2)
gender.f <- factor(gender, label=c("m", "f"))
likeornot <- c(1, 3, 2, 4, 5)
likeornot.f <- factor(likeornot, label=c("very low", "low", "medium", "high", "very high"), ordered=TRUE)

# Creating a data frame
dataframe <- data.frame(age, income, names, joining, gender.f, likeornot.f)

# Saving our data frame
write.csv(dataframe, "foo.csv")

শেষ কমান্ডটিতে আপনি দেখছেন একটি

foo.csv

নামে ফাইল তৈরি হয়েছে ওয়ার্কিঙ ডিরেক্টরিতে।

কাজের সুবিধার জন্য সমস্ত অবজেক্ট ডিলিট করে নিন।

rm(list=ls())

বিভিন্ন ধরণের ফাইল R-এ লোড/রিড করা

সিএসভি ফাইল লোড করা

এরপর আগে তৈরি করা csv ফাইলটি ও আরো দু’টি ফাইল যেগুলো ডাউনলোড করেছেন সেগুলো লোড করে নিন।

# Loading csv files
csvreloaded <- read.csv("foo.csv")
csvcomsep <- read.csv("comsep.csv", header=TRUE, sep=",")
csvsemisep <- read.csv("semisep.csv", header=TRUE, sep=";")

এক্সেলে ফাইল তৈরি করলে সেটা আগে csv তে কনভার্ট করে নিয়ে তারপর লোড করা উচিত। লোড করার আগে টেক্সট এডিটরে দেখে নেবেন ফাইলটি সেমিকোলন সেপারেটেড নাকি কমা সেপারেটেড।

এসপিএসএস ফাইল লোড করা

এসপিএসএস ফাইল লোড করতে Rcmdr প্যাকেজের সাহায্য নিন। বিকল্প হিসেবে সরাসরি foreign প্যাকেজ দিয়েও কাজ করতে পারবেন।

# Reading SPSS files using Rcmdr
library(Rcmdr)
library(foreign, pos=4)
spssData <- read.spss("/home/mhaseeb/R/Shikkhok/3rdclass/Bankloan_data.sav",
                      use.value.labels=TRUE, max.value.labels=Inf, to.data.frame=TRUE)
colnames(spssData) <- tolower(colnames(spssData))

স্ট্যাটা ফাইল লোড করা

এসপিএসএসের ড্যাটাফাইলের মতোই Rcmdr ব্যবহার করতে পারেন স্ট্যাটা ড্যাটা লোড করতে,

# Loading STATA data
stataData <- read.dta("/home/mhaseeb/R/Shikkhok/3rdclass/stataData.dta",
                      convert.dates=TRUE, convert.factors=TRUE, missing.type=TRUE,
                      convert.underscore=TRUE, warn.missing.labels=TRUE)

সাবসেট (subset) তৈরি করা

একটি আর্গুমেন্ট ব্যবহার করে সাবসেট তৈরি

লেকচারের প্রথমে তৈরি করা foo.csv ড্যাটাটা থেকে পুরুষ ও মহিলাদের নিয়ে পৃথক দু’টি সাবসেট তৈরি করতে লিখতে হবে,

# Subsetting a dataset
subset1 <- subset(csvreloaded, gender.f=="m")
subset2 <- subset(csvreloaded, gender.f=="f")

মাল্টিপল আর্গুমেন্ট ব্যবহার করে সাবসেট তৈরি

# Subsetting using multiple conditions
subset3 25 & age<50)
subset4 <- subset(csvreloaded, age!=23 | gender.f=="f" )

ড্যাটাসেটের অংশবিশেষ নিয়ে সাবসেট তৈরি

# Selecting observations
spssData[1:3,]
spssData[,1:2]
subset5 <-  spssData[1:3, 1:2]

ড্যাটা sort করার পদ্ধতি

ড্যাটা ছোট থেকে বড় ক্রমে সাজিয়ে নিতে,

# Sorting objects/variables
sorted1 <- csvreloaded[order(csvreloaded$age),]

ড্যাটা বড় থেকে ছোট ক্রমে সাজিয়ে নিতে,

sorted2 <- csvreloaded[order(-csvreloaded$age),]

মিসিং ভ্যালু কীভাবে ম্যানেজ করবেন

R-এ মিসিং ভ্যালুকে NA লেখা হয়।
কোন ড্যাটায়/অবজেক্টে মিসিং ভ্যালু আছে কিনা সেটা পরীক্ষা করতে is.na কমান্ডটি ব্যবহার করতে হবে,

a <- c(1, 34, 24, 12, 24)
# Checking if there is any missing value
is.na(a)
a1 <- c(1, 34, 24, 12, NA)
is.na(a1)

কোন ড্যাটায় 99, 77, 990 ইত্যাদি সংখ্যা দিয়ে মিসিং ভ্যালু লেখা থাকলে সেটা যেভাবে NA করে নিতে হবে,

# Missing value with 99
b <- c(1, 34, 24, 12, 99)
mean(b)
# Replacing 99 with NA
b1 <- ifelse(b == 99, NA, b)

মিসিং ভ্যালুসহ কোন অবজেক্টে কোন ক্যালকুলেশন করতে গেলে

na.rm=TRUE

দিয়ে সেটা na গুলো রিমুভ করে নিতে হবে

mean(b1)
# Calculating mean with missing values in the data
mean(b1, na.rm=TRUE)

লিংক

১. R স্কৃপ্ট
২. লেকচার স্লাইড
৩. লেকচার ভিডিও ১ ডাউনলোড লিংক
৩. লেকচার ভিডিও ২ ডাউনলোড লিংক
৩. লেকচার ভিডিও ৩ ডাউনলোড লিংক
৩. লেকচার ভিডিও ৪ ডাউনলোড লিংক

Comments

comments

About the author

হাসিব মাহমুদ

ব্লগার,
সচলায়তন.কম
নীড়পাতা.কম

Leave a Reply