আগের অধ্যায়গুলোতে আমরা R-এর মৌলিক বিষয়গুলো দেখেছি। কিন্তু বাস্তবে যখন আপনি কাজ করবেন তখন সব কাজের শুরু হয় ডেটা import আর export এর মাধ্যমে। আমি আপনাদেরকে কিভাবে R এর ভেতরে ডেটা তৈরি করা যেমন ধরেন dataframe বানানো, matrix বানানো এগুলা দেখিয়েছি। কিন্তু কাজের সময় আমরা সাধারণত R-এর ভেতরে ডেটা তৈরি করি না। বেশিরভাগ সময় ডেটা আসে কোনো CSV file, Excel sheet এসব এ। আবার কখনও কখনও sequencing output, clinical metadata table এর মাধ্যমে অথবা laboratory measurement file থেকে। তাই প্রথম কাজই হলো সেই data যা আপনি কম্পিউটার এ রেখেছেন সেটা R-এ নিয়ে আসা। আমরা R এর ভাষায় একে R এ ডেটা load/import করা বলি।
এরপর analysis শেষ হলে আপনি যে ডেটা process করেছেন বা যে ডেটা এর উপর কাজ করেছেন সেটা save করতে হয়। এর বিভিন্ন কারণ থাকতে পারে। যেমন ধরুন আপনার হয়ত পরে আবার ডেটা নিয়ে কাজ করতে হতে পারে, অথবা অন্য কাউকে আপনার ডেটা share করতে হতে পারে। এসব ক্ষেত্রে আপনার R এ process করা ডেটাকে save করতে হয়ে। আমরা R এর ভাষায় ডেটা export করা বলি। এই অধ্যায়ে আমার মূল ইচ্ছা হচ্ছে csv অথবা excel file কিভাবে import করতে হয় সেটা দেখানো এবং ডেটা কিভাবে export করতে হয় সেটাও দেখানো। CSV এবং Excel ফাইল থেকে ডেটা ইমপোর্ট করা
আপনি যদি এই ব্লগের নিয়মিত আপডেট পেতে চান, তাহলে নিচের ফর্মটি পূরণ করুন। আমি নতুন কোনো কন্টেন্ট যোগ করার সাথে সাথেই আপনাকে ইমেইলের মাধ্যমে জানিয়ে দেব।
CSV file বলতে বোঝায় Comma-Separated Values। এটি একটি data file format। এখানে প্রতিটি column comma দিয়ে আলাদা করা থাকে। উদাহরণ:
sample_id,condition,b_cells,t_cells
S1,Healthy,500,1000
S2,Disease,300,850
এটি দেখতে খুব সাধারণ text file-এর মতো। কিন্তু spreadsheet software যেমন Excel-এ খুললে table-এর মতো দেখা যায়। যেখানে প্রথম কলাম sample_id, দ্বিতীয় কলাম condition, তৃতীয় কলাম b_cells আর চতুর্থ কলাম t_cells। আপনারা যদি অন্যান্য জায়গা থেকে import বা export সম্পর্কে পড়েন তাহলে দেখবেন যে অনেক রকম file system আছে এবং সেগুলো R এ import করার কোড ভিন্ন। আমি সচরাচর কাজের সুবিধার্থে CSV file ব্যবহার করি। এটি lightweight, সহজে share করা যায় এবং প্রায় সব software-ই এটি support করে এবং কোড এ ঝামেলা কম মনে হয় আমার। যদি এই কোথাটি সম্পূর্ণ আমার মত। অন্যরা অন্য কোন format কে ভাল বলতে পারে।যেহেতু ব্লগ আমি লিখছি, আমি CSV সম্পর্কেই বলবো।
R কোনো file import করার আগে জানতে চায় file কোথায় আছে। আপনাকে R কে ওই file এর location জানাতে হবে। যেমন ধরুন আমি এই অধ্যায়ে immune_data.csv নামে একটি file ব্যবহার করবো। এটি আছে আমার computer এ Downloads এর various person project এর blog folder এর chapter ৪ এর মধ্যে। নিচে আমি ওই location কে এভাবে লিখতে পারি।
/Users/mohammads/Downloads/Various person project/Blogging/chapter 4/immune_data.csv
বর্তমানে R কোন folder-এ কাজ করছে সেটি দেখতে:
getwd()
Output:
[1] "/Users/mohammads"
এটি হলো বর্তমান working directory। আপনি working directory পরিবর্তন করতে পারেন। এটা অনেকটা এরকম যে আপনি যেই folder এ কাজ করবেন সেই folder এ R কে নিয়ে যাওয়া। এখত্রে ব্যবহার করতে হয় setwd()।
setwd("/Users/mohammads/Downloads/Various person project/Blogging/chapter 4/")
এখন R এই folder-এর মধ্যে file খুঁজবে।
ধরুন, আমাদের একটি file আছে যার নাম immune_data.csv এবং file-টির ভেতরে আছে: sample_id condition b_cells t_cells S1 Healthy 500 1000 S2 Healthy 620 1100 S3 Disease 300 900 এখন আমরা এটি R-এ import করব।
immune_data <- read.csv("immune_data.csv")
immune_data
এখন data দেখতে: Output:
sample_id condition b_cells t_cells
1 S1 Healthy 500 1000
2 S2 Healthy 620 1100
3 S3 Disease 300 900
এখানে:
• read.csv() → CSV file পড়ার function
• “immune_data.csv” → file-এর নাম
প্রথম কয়েকটি row দেখা
Dataset বড় হলে পুরো table print করা ভালো idea না। তাই আমরা প্রথম কয়েকটি row দেখি:
head(immune_data)
শেষ কয়েকটি row দেখতে:
tail(immune_data)
Import করার পরে data ঠিকভাবে এসেছে কি না, সেটা দেখা গুরুত্বপূর্ণ।
str(immune_data)
Output:
'data.frame': 3 obs. of 4 variables:
$ sample_id: chr "S1" "S2" "S3"
$ condition: chr "Healthy" "Healthy" "Disease"
$ b_cells : int 500 620 300
$ t_cells : int 1000 1100 900
এখানে দেখা যাচ্ছে: • sample_id হলো character • condition হলো character • b_cells integer • t_cells integer এটি গুরুত্বপূর্ণ কারণ অনেক সময় number accidentally character হিসেবে import হয়।
dim(immune_data)
Output:
[1] 3 4
মানে হচ্ছে ৩টি row এবং ৪ টি column । শুধু row সংখ্যা আলাদাভাবে বের করতে চাইলে :
nrow(immune_data)
শুধু column সংখ্যা বের করতে চাইলে :
ncol(immune_data)
colnames(immune_data)
Output:
[1] "sample_id" "condition" "b_cells" "t_cells"
যদি file working directory-তে না থাকে। এটা অনেকসময় হয় যে আপনার file হয়ত অন্য কোন folder এ আছে। সেক্ষেত্রে আপনি file location ব্যবহার করে directly import/load করতে পারবেন। এখানে বলে রাখা ভাল আমি macOS ব্যবহার করছি। আপনি যদি windows ব্যবহার করেন তাহলে লেখার নিয়ম একটু ভিন্ন হবে।
immune_data <- read.csv("/Users/mohammads/Downloads/Various person project/Blogging/chapter 4/immune_data.csv")
অনেক biological data Excel file হিসেবে আসে। যেমন:
• clinical metadata
• patient information
• ELISA result
• flow cytometry summary
• cell count table
R-এর base package সরাসরি .xlsx file read করতে পারে না। এজন্য package লাগে। সবচেয়ে জনপ্রিয় packageগুলোর একটি হলো readxl।
install.packages("readxl")
তারপর load করি:
library(readxl)
ধরুন file-এর নাম: immune_data.xlsx এখন import:
immune_data <- read_excel("immune_data.xlsx")
একটি গুরুত্বপূর্ণ বিষয়। বাস্তবে bioinformatics analysis-এ অনেকেই CSV prefer করেন। একটা সুবিধা হল আপনি যদি excel ফাইল পান সেঁতা খুব সহজেই অন্য format এ পরিবর্তন করা যায়।
Import করার পরে সাধারণ ভুলগুলো
উদাহরণ:
"500"
এটি number না। এটি text। Check করতে: str(immune_data)। এর মাধ্যমে আপনি বুঝতে পারবেন কোন কলামটি numeric আর কোনটি character ডেটা। যদি এক format এ থাকে সেটাকে অন্য format এ পরিবর্তন করা যায়। as.numeric() অথবা as.character() এরকম ফাংশন ব্যবহার এর মাধ্যমে।
অনেক সময় missing value আসে:
NA
উদাহরণ:
sample_id b_cells
S1 500
S2 NA
Average বের করতে:
mean(immune_data$b_cells)
এতে result NA আসতে পারে। তাই:
mean(immune_data$b_cells, na.rm = TRUE)
na.rm = TRUE মানে missing value ignore করো। এক্ষেত্রে একটা বিষয় মাথায় রাখা খুব জরুরি। এই NA বলতে এটা বোঝায় না যে এখানে 0 আছে। আপনি বুঝবেন যে এটা ফাকা। এবং সেঁতা বিবেচনা করে আপনি কোড লিখবেন।
Analysis করার পরে আমরা processed data save করতে চাই। ধরুন আমরা B/T ratio calculate করেছি।
immune_data$b_t_ratio <- immune_data$b_cells / immune_data$t_cells
এখন আমরা updated dataset save করতে চাই। CSV File Export করা Base R দিয়ে:
write.csv(immune_data, "processed_immune_data.csv")
এখন working directory-তে নতুন file তৈরি হবে।
অনেক সময় export করার পরে অতিরিক্ত number column দেখা যায়। এটি avoid করতে
write.csv(immune_data,
"processed_immune_data.csv",
row.names = FALSE)
এটি খুব important।
বাস্তবে sequencing analysis-এ আমরা প্রায় সবসময় file import/export করি। যেমন:
• Cell Ranger output matrix
• metadata table
• differential expression result
• clonotype annotation
• spatial coordinate table
• pathway enrichment result
একটি analysis-এর বড় অংশই আসলে data management। অনেক নতুন learner মনে করেন bioinformatics মানেই machine learning বা complex statistics। কিন্তু বাস্তবে file handling খুব গুরুত্বপূর্ণ skill।
কারণ:
ভুল file import → ভুল analysis
ভুল metadata → ভুল biological interpretation
Wrong sample annotation → পুরো project-এর সমস্যা
সুতরাং data handling কোনো “ছোট skill” না। এটি analysis-এর foundation।
ডেটা import এবং export করা হয়তো খুব exciting topic মনে নাও হতে পারে। এখানে machine learning নেই, deep learning নেই, fancy plot নেই। কিন্তু বাস্তবে প্রায় সব analysis এই জায়গা থেকেই শুরু হয়। একটি analysis ঠিকভাবে করতে হলে প্রথমে data ঠিকভাবে load করতে হবে। তারপর processed result cleanভাবে save করতে হবে। তাই data handling skill যত ভালো হবে, আপনার analysis তত reliable হবে। শুরুতে এটি একটু boring লাগতে পারে। কিন্তু পরে বুঝবেন, clean data management আসলে ভালো science করার একটি বড় অংশ।
আপনি যদি এই ব্লগের নিয়মিত আপডেট পেতে চান, তাহলে নিচের ফর্মটি পূরণ করুন। আমি নতুন কোনো কন্টেন্ট যোগ করার সাথে সাথেই আপনাকে ইমেইলের মাধ্যমে জানিয়ে দেব।