مدخل إلى تحليل البيانات بلغة الـ R

برمجة nadhir 30064℃ 0تعليق

(مصدر الصورة)

السلام عليكم,

في المقال السابق تحدثنا هن أهمية تحليل البيانات والمراحل التي يتم من خلالها هذا التحليل لكن لم نتكلم كثيرا عن الادوات أو لغات البرمجة التي يمكننا استعمالها. من لغات البرمجة الأكثر استعمالا في مجال المعلوماتية الحيوية هي لغة الـ R حتى أنك لو اطلعت على عروض العمل أو شروط التوضيف في الشركات أو المخابر العلمية, تجد أن التمكن من لغة الـ R يعتبر من الشروط الأساسية في المترشح. كما أنها تعتبر من الشروط الأساسية في كل عمل يتطلب تحليل البيانات والاحصاء.

في هذا المقال سوف نحاول توضيح لماذا هذا الاهتمام بلغة الـ R وسأحاول ان شاء الله كتابة مواضيع متعلقة باستعمال الـ R في مجال المعلوماتية الحيوية, ربما ستكون مفيدة للمبتدئين في هذه اللغة.

ماهي لغة اللـ R؟

الـ R كما يعرفها موقعها الرسمي : "عبارة عن مجموعة متكاملة من البرمجيات التي تسمح بمعالجة البيانات, القيام بعمليات حسابية و اظهار البيانات الرسومية".

ينظر للـ R على أنها امتداد للغة الـ S و الـ S-PLUS المطورة في بداية التسعينيات من القرن الماضي. تتميز لغة الـ R بكثرة استعمالها من طرف الاحصائيين حتى أن الكثير من الناس يظن أنها حكر لهم مثل برنامج SPSS. لكن يتميزالـ R بكونه يتمتع بصفات لغات البرمجة الاخرى حيث يمكن القيام بالبرمجة الكائنية وحتى انشاء صفحات ويب.  لكن مايميزه هو انه يحتوي على العديد من الحزم الاحصائية مما جذب إليه العديد من الاحصائيين.

تلقى لغة الـ R اهتماما كبيرا في مجال المعلوماتية الحيوية لعدة أسباب, من بينها سهولة الاستعمال اذا يمكن لباحث ذو خلفية زهيدة في البرمجة أن يتعلم استعمالها على الاقل في مستوى يلبي حاجياته الاساسية في تحليل البيانات ورسم المخططات. وسبب مهم في رأيي هو توفر عدد كبير من حزم تحليل البيانات البيولوجية حيث أن أغلبية الباحثين يقومون بنشر خوازمياتهم بلغة الـ R إلى درجة أنه تم  انشاء مستودع  حزم  bioconductor (موقع يحتوي على الحزم البرمجية) خاص فقط بالحزم ذات العلاقة بمجال البرمجية الحيوية, بالاضافة إلى أن امكانية اظهار رسومات ذات شكل جذاب بسهولة.

تحميل وتنصيب الـ R

يمكن تحميل لغة الـ R من الموقع الرسمي (وذلك باختيار أقرب مستوع لمنطقتك للحصول على سرعة أكبر في التحميل). لتنصيب لغة الـ R لا تحتاج إلى القيام بأية تعديلات, خاصةً إذا كنت في نظام ويندوز أو ماكنتوش أما إن كنت في نظام لينوكس فيمكنك تثبيت الـ R بالطريقة التالية (مثال توزيعة Ubuntu).

أولا يجب أظافة موقع تحميل الـ R الخاص بتوزيعتك للنظام

# للحصول على اصدار التوزيعة
`-CODENAME=`grep CODENAME /etc/lsb-release | cut -c 18

# إضافة موقع التحميل الخاص بالتوزيعة
sudo sh -c 'echo "deb http://cran.rstudio.com/bin/linux/ubuntu $CODENAME" >> /etc/apt/sources.list'

# اضافة رقم سري للتشفير 
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys E084DAB9

# تحديث قائمة مواقع التحميل المستعلمة من طرف النطام
sudo apt-get update 

ثم ادخال الأمر التالي للتصيب:

sudo apt-get install r-base r-dev

بعد التحميل يمكنك تشغيل بيئة برمجة الـ R كما هو موضح في الصورة (بيئة البرمجة هو برنامج يعطيك واجهة تسمح لك بالستعمال اللغة بطريقة ملائمة, أحسن من الكتابة في محرر نصوص ثم التشغيل اليدوي)

بيئة تطوير لغة الـ R

أذا كانت لديك خلفية في البرمجة ربما ستبدوا لك واجهة هذه البيئة ملائمة بعض الشيء لكن ربما تبدوا مخيفة للبعض, لهذا سوف نقوم بتثبيت برنامج RStudio الذي يقدم واجهة أحسن (للتنبيه هذا البرنامج فقط يقدم واجهة أحسن, لايقوم بثبيت الـ R). يمكن تحميل البرنامج من الموقع الرسمي هنا.

مثال عن واجهة RStudio

إظافة حزم جديدة:

تحتوي النسخة المحملة للـ R على مجموعة من الحزم التي تمكننا من قرائة البيانات وتحليلها والقيام بمجموعة من الاختبارات الاحصائية, لكن في بعض الأحيان نحتاج إلى القيام ببعض العمليات التي لاتوجد بصفة تلقائية في الـ R وليست سهلة البرمجمة أو ربما ليست هي لب الموضوع, لهذا تم انشاء مواقع (أو مخازن, Repository) تحتوي على مجموعة حزم مفتوحة المصدر مطورة من طرف اناس ومجموعات أبحاث.

1. مخزن الـ CRAN:

 المخزن الرسمي للـ R في موقع  الـ CRAN , ويحتوي على العديد من الحزم الخاصة بعدة مجالات بينها المعلوماتية الحيوية. إذا أردت تنصيب حزمة من الموقع الرسمي يمكنك كتابة الأمر التالي :

> install.package("Package_Name")

 

مثلا قمنا بتجربة RNA-Seq وبعدها استعملنا برنامج Bowtie لمطابقة السلاسل التي تحصلنا عليها مع الجينوم المرجعي وتحصلنا على ملفات BAM. لنفرض مثلا أننا نريد القيام بقراءة الملف والقيام ببعض العمليات. لكن للأسف لايمكن القيام بذللك باستعمال الـ R. يمكنك مثلا تحميل حزمة rbamtools من موقع الـ CRAN كالتالي:

> install.package("rbamtools")

2. مخزن الـ Bioconductor:

تهدف منصة اللـ Bioconductor إلى انشاء موقع يحتوي على حزم متعلقة بمجال معالجة البيانات الحيوية وتسهيل الوصول إليها واستعمالها. بالاضافة إلى الحزم يحتوي الموقع على مجموعة من البيانات المتعملة بكثرة, مثلا أسماء الجينات مع أرقام تسلسلها في عدة قواعد بيانات. على الرغم من أن منصة الـ Bioconductor مفتوحة المصدر إلا أنها لا تقبل الحزم إلى إذا خضعت لشروط الموقع, وهي إظافة ملفات لشرح كيفية استعمال الحزمة مع أمثلة وشرح لمختلف الدوال المتاحة ويكون الملف مرتبة بطريقة تتناسب مع شروط الموقع. لهذا في بعض الأحيان يقوم بعض الباحثين بارسال حزمهم لموقع الـ CRAN لسرعة النشر.

لتحميل الحزم من Bioconductor يجب أولا تحميل السكريبت الذي يقوم بذلك عن طريق الأمر:

> source("http://bioconductor.org/biocLite.R")

ثم تحميل الحزمة باستعمال دالة biocLite. مثلا للتعامل مع السلاسل واحداثيات الجينات يمكننا تحميل حزمة GenomicRanges كالتالي

> biocLite("GenomicRanges")

للحصول على شرح لأي دالة من الدوال يمكنك استعمال أمر help و اسم الدالة مثلا:

> help(hist)

لغة الـ R:

تتميز لغة الـ R ببساطتها اذ أنها لغة سكريبت فلا تحتاج لكتابة دالة دخول كما هو في لغات البرمجة الكلاسيكية. مثل كل لغات السكريبت الأخرى أول سطر هو أول أمر.

1. المتغيرات البسيطة:

تتقبل لغة الـ R أنواع المتغيرات البسيطة مثل الاعداد الطبيعية, الأعداد الحقيقية  و الجمل النصية. يتم انشاء متغير باستعمال علامة -> او = مثلا :

> a <- 1 #an integrer variable
> b <- 2.3 #a real value variable
> c <- "Hellow, world"  #a string variable

2. الأشعة و المصفوفات :

بالاضافة إلى هذه الأنواع يمكن انشاء متغيرات ذات بنية أكثر تعقيدا كالأشعة (جدول بصف واحد) أو المصفوفات. يتم انشاء شعاع باستعمال الدالة c. يمكن انشاء أشعة تحتوي على أي نوع من البيانات مثلا:

> expression <- c(0.4,10,2,1)
> geneNames <- c("gene1","gene2","gene3","gene4")

يمكن انشاء المصفوفات باستعمال أمر matrix , في العادة تحتوي على قيم عددية, يمكن تحديد عدد الأعمدة عن طريق المعامل mrow و عدد الأسطر عن طريق المعامل mcol. مثلا في هذا المثال قمنا بانشاء مصفوفة بثلاثة أعمدة وسطريين تحتوي على قيمة 0

> m <- matrix(0,nrow=2,ncol=3)
> m
     [,1] [,2] [,3]
[1,]    0    0    0
[2,]    0    0    0

يمكن أيضا اعطاء قيم للمصفوفة على شكل شعاع أو مجموعة أشعة. مثلا في هذا المثال لدينا قيم تعبير ثلاث جينات في ثلاث تجارب ونريد وضعها في مصفوفة . ولجعل المصفوفة سهلة القراءة يمكننا استعمال الدالة rownames لتسمية السطور والدالة colnames لتسمية الاعمدة

> gene1<- c(10,3,8)
> gene2<- c(5,2,7)
> gene3<- c(3,10,1)
#Store them in a matrix (a gene per row)
> expression<- matrix(c(gene1,gene2,gene3),nrow=3,ncol=3,byrow=TRUE)

> expression
 [,1] [,2] [,3]
[1,] 10 3 8
[2,] 5 2 7
[3,] 3 10 1

#Set the names of the rows and columns
> rownames(expression) <- c("gene1","gene2","gene3")
> colnames(expression) <- c("experiment1","experiment1","experiment1")
> expression
 experiment1 experiment1 experiment1
gene1 10 3 8
gene2 5 2 7
gene3 3 10 1

3. العوامل (Factors):

في بعض الأحيان يكون لدينا شعاع يحتوي على بيانات متككرة أو بيانات مصنفة  (مثلا ذكر, انثى) في هذه الحالة يمكن استعمال نوع آخر من البيانات وهي العوامل والتي تسمح لك يتصنيف البيانات .

> gender <- factor(c("m","m","f","m","f","f","f"))
> gender
[1] m m f m f f f
Levels: f m

في هذا المثال نلاحظ أنه لدينا مستويين (نوعين) من القيم f و m

4. أطر البيانات (Data Frames):

يمكن أيضا تسميها بالجداول, هي شبيهة بالمصفوفات لكن كل عمود عبارة عن عامل (Factor) أو شعاع. مثلا يمكننا انشاء جدول يحتوي على أسماء الجينات ونسبة التعبير

> results<- data.frame(geneName = c("gene1","gene2","gene3"),  expression= c(1,4,0.3)  )
> results
  geneName expression
1    gene1        1.0
2    gene2        4.0
3    gene3        0.3

مثلا اذا اردنا الحصول على اسماء الجينات فقط يمكننا كتابة اسم المتغير+ $ + اسم العمود, مثلا:

> results$geneName
[1] gene1 gene2 gene3
Levels: gene1 gene2 gene3

5. قراءة البيانات من الملفات:

يحتوي الـ R على أوامر تسمح للك بقراءة البيانات من الملفات وتحميلها على شكل جداول. في عادة النوعان الأكثر استعمالا من البيانات هي الملفات النصية حيث تكون فواصل بين الحقول (مثلا فراغ, نقطة فاصلة,...إلخ) أو ملفات برامج الجدولة (Excel مثلا) محفوضة على شكل ملف csv.

يوفر الـ R دالتين لقراءة هذا النوع من البيانات, دالة read.table التي تسمح بقراءة الملفات النصية وتعطيك تحكما تاما في كيفية القراءة. مثلا يمكنك أن تخبرها أن السطر الأول يمثل اسم الأعمدة وأن الحقول مفصولة بينها بفراغات يمفتاح Tab وليس Space.

مثلا ليكن لدينا ملف يحتوي على البيانات التالية:

chr start end length CpGcount GCcontent pctGC obsExp
chr10 93098 93818 721 32 403 0.559 0.572
chr10 94002 94165 164 12 97 0.591 0.841
chr10 94527 95302 776 65 538 0.693 0.702
chr10 119652 120193 542 53 369 0.681 0.866
chr10 122133 122621 489 51 339 0.693 0.88
chr10 180265 180720 456 32 256 0.561 0.893
chr10 180865 182549 1685 230 1263 0.75 0.984
chr10 242994 243152 159 10 74 0.465 1.193
chr10 313778 313905 128 6 64 0.5 0.769

لنفرض مثلا أن اسم الملف هو data.txt يمكننا قرائه كالتالي:

> data <- read.table(file="data.txt",header=TRUE, sep="\t")
> data
    chr  start    end length CpGcount GCcontent pctGC obsExp
1 chr10  93098  93818    721       32       403 0.559  0.572
2 chr10  94002  94165    164       12        97 0.591  0.841
3 chr10  94527  95302    776       65       538 0.693  0.702
4 chr10 119652 120193    542       53       369 0.681  0.866
5 chr10 122133 122621    489       51       339 0.693  0.880
6 chr10 180265 180720    456       32       256 0.561  0.893
7 chr10 180865 182549   1685      230      1263 0.750  0.984
8 chr10 242994 243152    159       10        74 0.465  1.193
9 chr10 313778 313905    128        6        64 0.500  0.769

إذا كان حجم البيانات كبيرا من الأحسن استعمال أمر head لاظهار الأسطر الأولى من الملف, في العادة للتأكد من أن القراءة تمت بالشكل الصحيح. يمكن أيضا معرفة عدد الأسطر وعدد الأعمدة باستعمال أمر dim

> head(data)
    chr  start    end length CpGcount GCcontent pctGC obsExp
1 chr10  93098  93818    721       32       403 0.559  0.572
2 chr10  94002  94165    164       12        97 0.591  0.841
3 chr10  94527  95302    776       65       538 0.693  0.702
4 chr10 119652 120193    542       53       369 0.681  0.866
5 chr10 122133 122621    489       51       339 0.693  0.880
6 chr10 180265 180720    456       32       256 0.561  0.893
> dim(data)
[1] 9 8

نكتفي بهذا القدر في هذا المقال الذي ربما سيكون مفيدا للمتديين في لغة الـ R قدمنا فيه تعريفا باللغة وبعض الامثلة البسيطة لعدم تعقيد الأمور على القراء ذو معلومات محدودة في البرمجة.

في المقالات القادمة سوف نحاول التعامل مع مثال لبيانات حقيقية ونحاول استعمال الـ R للحصول على بعض المعلومات. أتمى أن يكون المقال مفيدا لبعض الزوار.

رابط المقالة : المعلوماتية الحيوية بالعربية » مدخل إلى تحليل البيانات بلغة الـ R

معجب (48)