زبان برنامه‌نویسی R – خود را با این ۲۳ سوال محک بزنید

۳۳۵ بازدید
آخرین به‌روزرسانی: ۰۱ دی ۱۳۹۷
زمان مطالعه: ۹ دقیقه
زبان برنامه‌نویسی R – خود را با این ۲۳ سوال محک بزنید

زبان برنامه‌نویسی R یکی از محبوب‌ترین زبان‌های برنامه‌نویسی بین دوست‌داران علم داده‌هاست (data science). اگر واقعا به علم داده‌ها علاقه‌مندید، احتمالا یا زبان برنامه‌نویسی R را بلدید یا در حال یادگرفتن آن هستید. زبان برنامه‌نویسی R همچنین شامل اکوسیستم‌های متعددی از کتابخانه‌های داده و آمار است. به عنوان بخشی از برنامه «DataFest 2017»، سوالات زیر برای آزمایش دانش دوست‌داران و کاربران زبان برنامه‌نویسی R از این برنامه تدوین شده است.

سوال‌ها و جواب‌ها

متن و سوال شماره ۱

تابع زیر را در نظر بگیرید:

1f <- function(x) {
2
3g <- function(y) {
4
5y + z
6
7}
8
9z <- 4
10
11x + g(x)
12
13}

اگر دستور زیر را انجام دهیم، خروجی چه خواهد بود؟

1z <- 10
2
3f(4)

الف) ۱۲

ب) ۷

ج) ۴

د) ۱۶

جواب:

در قوانین زبان برنامه‌نویسی R ،z<-4 قبل از z<-10 اجرا می‌شود. در نتیجه (g(x برابر با ۸ خواهد شد. در نتیجه جواب الف صحیح است.

متن و سوال شماره ۲

مجموعه داده‌های iris دارای گونه‌های مختلف گل مانند Setosa، Versicolor و Virginica با طول Sepal مخصوص به خودند. در حال حاضر، ما می‌خواهیم توزیع طول sepal در تمام گونه‌های گل را درک کنیم. یک راه برای این کار این است که این رابطه را از طریق نمودار زیر نشان دهید.

کدام یک از توابع زیر برای چنین گرافی مناسب است؟

الف) xyplot

ب) stripplot

ج) barchart

د) bwplot

جواب:

طرح بالا از نوع نواری است در حالی که گزینه الف، ج و د به ترتیب طرح پراکنده، نوار و جعبه‌ای تولید می‌کنند. در نتیجه گزینه ب صحیح است.

متن و سوال شماره ۳

فایل زیر با نام (Dataframe.csv) را در نظر بگیرید.

Alpha125.50
Beta235.61
Beta212.030
Beta211.300
Alpha265.461

کدام یک از دستورات زیر فایل بالا را به درستی در یک قابل داده با ۵ ردیف می‌خواند؟

الف) csv(‘Dataframe.csv’)

ب) csv(‘Dataframe.csv’,header=TRUE)

ج) dataframe(‘Dataframe.csv’)

د) csv2(‘Dataframe.csv’,header=FALSE,sep=’,’)

جواب:

گزینه ۱ و ۲ اولین ردیف را به عنوان هدر (header) می‌خواند. گزینه ۳ وجود ندارد. در نتیجه گزینه د درست است.

متن و سوال شماره ۴

فرمت اکسل یکی از فرمت‌‌های رایج برای ذخیره‌ی داده‌ها است. بسیار ضروری است روش‌های وارد کردن داده‌ها از فایل اکسب به زبان برنامه‌نویسی R را یاد بگیریم. در فایل زیر با نام (Dataframe.xlsx)، داده‌ها در صفحه‌ی سوم (third sheet) وارد شده‌اند.

Alpha125.50
Beta235.61
Beta212.030
Beta211.300
Alpha265.461

کدام یک از دستورهای زیر داده‌های جدول فوق را به یک قالب داده در زبان برنامه‌نویسی R انتقال می‌دهد؟

الف) Openxlsx::read.xlsx(“Dataframe.xlsx”,sheet=3,colNames=FALSE)

ب) Xlsx::read.xlsx(“Dataframe.xlsx”,sheetIndex=3,header=FALSE)

ج) XLConnect::readWorksheetFromFile(“Dataframe.xlsx”,sheet=3,header=FALSE)

د) همه دستورهای بالا

جواب:

تمام گزینه‌های بالا درست است. تمام دستورهای بالا به درستی داده‌ها را از صفحه‌ی سوم اکسل فراخوانی می‌کند.

متن و سوال شماره ۵

نام فایل: (Dataframe.csv)

A10Sam
B20Peter
C30Harry
D!?
E50Mark

داده‌های ناموجود با علامت تعجب (!) و علامت سوال (؟) مشخص شده‌اند. کدام یک از دستورات زیر داده‌‌های بالا را به درستی در زبان برنامه‌نویسی R می‌خواند؟

الف) csv(‘Dataframe.csv’)

ب) csv(‘Dataframe.csv’,header=FALSE, sep=’,’,na.strings=c(‘?’))

ج) csv2(‘Dataframe.csv’,header=FALSE,sep=’,’,na.strings=c(‘?’,’!’))

د) dataframe(‘Dataframe.csv’)

جواب:

گزینه الف نمی‌تواند (!) و (؟) را به شکل NA در زبان برنامه‌نویسی R بخواند. گزینه ب نیز تنها قادر به خواندن (؟) است. گزینه د وجود ندارد. در نتیجه گزینه ج درست است.

متن و سوال شماره ۶-۷

نام فایل: (Dataframe.csv)

Column 1Column 2Column 3
Row 115.514.1269.5
Row 218.656.2352.4
Row 321.447.0263.21
Row 436.156.6336.12

۶- فایل بالا هم اسم ستون و هم اسم سطر دارد. کدام یک از دستورها زیر به خوبی فایل بالا را در زبان برنامه‌نویسی R می‌خواند؟

الف) delim(‘Train.csv’,header=T,sep=’,’,row.names=TRUE)

ب) csv2(‘Train.csv’,header=TRUE, row.names=TRUE)

ج) dataframe(‘Train.csv’,header=TRUE,sep=’,

د) csv(‘Train.csv’,,header=TRUE,sep=’,’)

جواب:

در گزینه الف و ب تنها بردار حاوی نام ردیف واقعی یا یک عدد را به ستون جدول نسبت می‌دهد که شامل نام‌های ردیف و نه یک مقدار منطقی است. گزینه ج وجود ندارد. بنابراین، گزینه د راه حل درست است.

۷- کدام‌یک از دستورها زیر تنه دو ردیف اول فایل را می‌خواند؟

الف) csv(‘Dataframe.csv’,header=TRUE,row.names=1,sep=’,’,nrows=2

ب) csv2(‘Dataframe.csv’,row.names=1,nrows=2)

ج) delim2(‘Dataframe.csv’,header=T,row.names=1,sep=’,’,nrows=2)

د) dataframe(‘Dataframe.csv’,header=TRUE,row.names=1,sep=’,’,skip.last=2)

 جواب:

گزینه ب نمی‌تواند فایل را به درستی بخواند چراکه جداکننده default در تابع csv2، “;” است در حالی که در فایل‌‌های csv، “,”. گزینه ج نیز مقدار header argument اشتباهی دارد. گزینه د وجود ندارد. در نتیجه گزینه الف درست است.

متن و سوال شماره ۸

دو فایل داده با نام‌های (Dataframe1) و (Dataframe2) در زیر وجود دارد.

Dataframe1
Feature1Feature2Feature3Feature4
A100025.510
B200035.534
C300045.578
D400055.53
Dataframe2
Feature1Feature2Feature3
E500065.5
F600075.5
G700085.5
H800095.5

کدام یک از دستورها نتایج نشان‌ داده شده در زیر را نشان می‌دهد؟

Feature1Feature2Feature3
A100025.5
B200035.5
C300045.5
D400055.5
E500065.5
F600075.5
G700085.5
H800095.5

الف) merge(dataframe[,1:3],dataframe2)

ب) merge(dataframe1,dataframe2)[,1:3]

ج) merge(dataframe1,dataframe2,all=TRUE)

د) گزینه الف و ب

ه) همه گزینه‌ها

جواب:

گزینه ج منجر به خواندن feature 4 می‌شود که مورد نظر ما نیست. لذا گزینه د صحیح است.

متن و سوال شماره ۹:

داده‌های زیر را در نظر بگیرید (dataframe).

V1V2
1121.5461
25161351
34516918
4613112
5112.36230
625.231456
712457

این داده‌ها در زبان برنامه‌نویسی R خوانده و در متغیر «dataframe» ذخیره شده‌اند. کدام یک از دستورهای زیر چکیده (میانگین، مد و میانه) داده‌ها را در یک خط نشان می‌دهد؟

الف) summary(dataframe)

ب) stats(dataframe)

ج) summarize(dataframe)

د) summarise(dataframe)

ه) هیچ کدام

جواب:

گزینه الف تنها میانگین و میانه را می‌دهد. گزینه ب، ج و د نیز قادر به ارائه مقادیر مورد نیاز نیستند. در نتیجه گزینه ه درست است.

متن و سوال شماره ۱۰

یک سری داده در زبان برنامه‌نویسی R خوانده و در متغیر «dataframe» ذخیره شده‌اند. داده‌های ناموجود با NA نشان داده شده است.

A10Sam
BNAPeter
C30Harry
D40NA
E50Mark

کدام یک از دستورهای زیر تعداد داده‌های ناموجود در هر ستون را نمی‌دهد؟

الف) colSums(is.na(dataframe))

ب) apply(is.na(dataframe),2,sum)

ج) sapply(dataframe,function(x) sum(is.na(x))

د) table(is.na(dataframe))

جواب:

گزینه د تعداد تمام داده‌های ناموجود را می‌دهد اما نه به ازای هر ستون. در نتیجه گزینه د صحیح است.

متن و سوال شماره ۱۱

یکی از فازهای مهم در تحلیل داده‌ها (Data Analytics)، تحلیل غیرمستقیم از ویژگی‌هایی شامل چک کردن مقادیر گم‌شده و توزیع آن‌ها و .. است. در ادامه یک مجموعه داده (dataframed)وجود دارد و می‌خواهیم هیستوگرامی برای متغیر «Value» رسم کنیم.

ParameterStateValueDependents
AlphaActive502
BetaActive455
BetaPassive250
AlphaPassive210
AlphaPassive261
BetaActive302
BetaPassive180

کدام یک از دستورهای زیر به ما در انجام این کار کمک می‌کند؟

الف) hist(dataframed$Value)

ب) ggplot2::qplot(dataframed$Value,geom=”Histogram”)

ج) ggplot2::ggplot(data=dataframed,aes(dataframe$Value))+geom_histogram()

د) همه گزینه‌ها

جواب:

تمام گزینه‌های فوق می‌توانند هیستوگرام رسم کنند که برای مشاهده ناهمواری (skewness ) داده‌ها مناسب است.

متن و سوال شماره ۱۲

جدول (Parameter) زیر را در نظر بگیرید.

ParameterStateValueUsage
AlphaActive500
BetaActive451
BetaPassive250
AlphaPassive210
AlphaPassive261
BetaActive301
BetaPassive180

الگوریتم‌های خاص مانند XGBOOST تنها با داده‌های عددی کار می‌کنند. در این حالت، متغیرهای دسته‌ای (categorical variable) موجود در داده‌ها در ابتدا به متغیرهای DUMMY تبدیل می‌شود. این متغیرها نماینده‌ی حضور یا عدم حضور سطحی از متغیر دسته‌ای در داده‌ها هستند. برای مثال بعد از ایجاد متغیر DUMMY برای «Parameter»، سری داده‌ها به شکل زیر خواهد بود.

Parameter_AlphaParameter_BetaStateValueUsage
10Active500
01Active451
01Passive250
10Passive210
10Passive261
01Active301
01Passive180

کدام یک از دستورهای زیر به ما کمک می‌کند چنین کنیم؟

الف) dummies:: dummy.data.frame(dataframe,names=c(‘Parameter’))

ب) dataframe$Parameter_Alpha=0

dataframe$Gende_Beta=0

dataframe$Parameter_Alpha[which(dataframe$Parameter==’Alpha’)]=1

dataframe$Parameter_Beta[which(dataframe$Parameter==’Alpha’)]=0

dataframe$Parameter_Alpha[which(dataframe$Parameter==’Beta’]=0

dataframe$Parameter_Beta[which(dataframe$Parameter==’Beta’]=1

ج) contrasts(dataframe$Parameter)

د) گزینه الف و ب

جواب:

گزینه‌ی ج ستون Parameter را با دو سطح رمزنگاری (encode) می‌کند اما «hot encoding» اجرا نمی‌نماید. لذا گزینه د درست است.

متن و سوال شماره ۱۳

جدول داده (dataframe) زیر را در نظر بگیرید.

Column1Column2Column3Column4Column5Column6
Name1Alpha1224540Alpha
Name2Beta1632511Beta
Name3Alpha52104320Gamma
Name4Beta3672841Delta
Name5Beta4590320Phi
Name6Alpha1224120Zeta
Name7Beta3264641Sigma
Name8Alpha4284540Mu
Name9Alpha56112311Eta

می‌خواهیم رابطه بین «Column2»و «Column3» را بررسی کنیم. کدام یک از دستورهای زیر به ما کمک می‌کند؟

الف)  corr(dataframe$column2,dataframe$column3)

ب) cov(dataframe$column2,dataframe$column3))/(var(dataframe$column2)*sd(dataframe$column3))

ج)

(sum(dataframe$Column2*dataframe$Column3)-                 (sum(dataframe$Column2)*sum(dataframe$Column3)/nrow(dataframe)))/(sqrt((sum(dataframe$Column2*dataframe$Column2)-(sum(dataframe$Column2)^3)/nrow(dataframe))*     (sum(dataframe$Column3*dataframe$Column3)-(sum(dataframe$Column3)^2)/nrow(dataframe))))

د) هیچ کدام

جواب:

در گزینه الف، corr دستور اشتباهی است. دستور مناسب برای محاسبه رابطه cor است. در گزینه ب، این انحراف استاندارد است که باید معیار باشد و نه واریانس. به شکل مشابه، فرمول گزینه ج اشتباه است. در نتیجه گزینه د صحیح است.

متن و سوال شماره ۱۴

جدول داده زیر با نام «dataframe» را در نظر بگیرید.

ParameterStateValueDependents
AlphaActive502
BetaActive455
BetaPassive250
AlphaPassive210
AlphaPassive261
BetaActive302
BetaPassive180

داده‌های بالا برای شما در زبان برنامه‌نویسی R در یک متغیر با نام «dataframe» بارگذاری شده است. ردیف اول نماینده نام هر ستون است. کدام یک از دستورات زیر تنها ردیف‌هایی با پارامتر Alpha را انتخاب می‌کند؟

الف)‌ subset(dataframe, Parameter=’Alpha’)

ب) subset(dataframe, Parameter==’Alpha’)

ج) filter(dataframe,Parameter==’Alpha’)

د) گزینه ب و ج

ه) تمام گزینه‌ها

جواب:

در گزینه الف به‌ جای عملگر تساوی (equality operator) از عملگر انتصاب (assignment operator) استفاده شود. در نتیجه گزینه د درست است.

متن و سوال شماره ۱۵

از کدام یک از توابع زیر برای مشاهده داده‌ها در فرمت مشابه «spreadsheet» استفاده می‌شود؟

الف)  disp()

ب) View()

ج) seq()

د) همه گزینه‌ها

جواب:

گزینه ب تنها گزینه‌ای است که این کار را برای ما انجام می‌دهد.

متن و سوال شماره ۱۶

قالب داده‌های زیر در متغیری با نام «» ذخیره شده است.

AB
1Right
2Wrong
3Wrong
4Right
5Right
6Wrong
7Wrong
8Right

فرض کنید که ‌‌B یک متغیر دسته‌ای است و می‌خواهید یک «boxplot» برای هر سطح از هر دسته رسم کنیم. کدام یک از دستورهای زیر به ما برای این هدف کمک می‌کند؟

الف) boxplot(A,B,data=data)

ب)‌ boxplot(A~B,data=data)

ج) boxplot(A|B,data=data)

د) هیچ‌ کدام

جواب:

تابع Boxplot در زبان برنامه‌نویسی R برای این کار نیاز به یک ورودی فرمول برای کشیدن boxplots با سطوح مختلف یک متغیر دارد. در نتیجه گزینه ب درست است.

متن و سوال شماره ۱۷

کدام یک از دستورهای زیر صفحه رسم را به یک پنجره ۴ * ۳ تبدیل می‌کند در حالی که تصاویر به پنجره بر حسب ستون وارد می‌شوند؟

الف) par(split=c(4,3))

ب) par(mfcol=c(4,3))

ج) par(mfrow=c(4,3))

د) par(col=c(4,3))

جواب:

«mfcol» باعث وارد شدن تصاویر بر حسب ستون می‌شود. در نتیجه گزینه ب درست است.

متن و سوال شماره ۱۸

داده‌ها با نام «df» به شکل زیرند:

Dates

2017-02-28

2017-02-27

2017-02-26

2017-02-25

2017-02-24

2017-02-23

2017-02-22

2017-02-21

پس از خواندن داده‌های بالا، می‌خواهیم خروجی‌های زیر را داشته باشیم.

Dates

28 Tuesday Feb 17

27 Monday Feb 17

26 Sunday Feb 17

25 Saturday Feb 17

24 Friday Feb 17

23 Thursday Feb 17

22 Wednesday Feb 17

21 Tuesday Feb 17

کدام یک از دستورهای زیر خروجی مورد نظر را به ما می‌دهد؟

الف) format(df,”%d %A %b %y”)

ب) format(df,”%D %A %b %y”)

ج) format(df,”%D %a %B %Y”)

د) هیچ کدام

جواب:

هیچ کدام از دستورهای بالا عمل مورد نظر را برای ما انجام نمی‌دهد. در نتیجه گزینه د صحیح است.

متن و سوال شماره  ۱۹

کدام یک از دستورات زیر به ما برای تغییر نام ستون دوم قالب داده با نام «table» از alpha به beta کمک می‌کند؟

الف) colnames(table)[2]=’beta’

ب) colnames(table)[which(colnames==’alpha’)]=’beta’

ج) setnames(table,’alpha’,’beta’)

د) همه‌ گزینه‌‌‌‌ها

جواب:

گزینه د صحیح است.

متن و سوال شماره ۲۰

زبان برنامه‌نویسی R با بسیاری از داده‌های پرحجم سروکار دارد. در نتیجه پاک کردن داده‌های بلااستفاده در زبان برنامه‌نویسی R بسیار مفید است. کدام یک از دستورات زیر یک متغیر یا object با نام «santa» را از محیط کار (workspace) حذف می‌کند؟

الف) remove(santa)

ب) rm(santa)

ج) هر دو

د) هیچ کدام

جواب:

دستورات «remove» و «rm» هر دو برای پاک کردن محیط کار استفاده می‌شوند. در نتیجه گزینه ج صحیح است.

متن و سوال شماره ۲۱

«dplyr» یک بسته محبوب در زبان برنامه‌نویسی R برای بازی با داده‌‌ها است. این بسته شامل پنج تابع اصلی برای کنترل داده‌‌ها است. کدام یک از گزینه‌های زیر یکی از پنج تابع اصلی نیست؟

الف) select()

ب) filter()

ج) arrange()

د) summary()

جواب:

«summary» تابعی در زبان برنامه‌نویسی R است که در dplyr وجود ندارد. در نتیجه گزینه د صحیح است.

متن و سوال شماره ۲۲

طی انتخاب «Feature» با اسفاده از داده‌های زیر با نام «table» ستون یک و دوم به عنوان اطلاعات نامرتبط شناخته شده‌اند. در نتیجه باید در مدل‌سازی ما حذف شوند.

Column1Column2Column3Column4Column5Column6
Name1Alpha1224540Alpha
Name2Beta1632511Beta
Name3Alpha52104320Gamma
Name4Beta3672841Delta
Name5Beta4590320Phi
Name6Alpha1224120Zeta
Name7Beta3264641Sigma
Name8Alpha4284540Mu
Name9Alpha56112311Eta

کدام یک از دستورهای زیر تمام ردیف‌ها را از ستون سوم تا متن و سوال شمارهم انتخاب می‌کند؟

الف) dplyr::select(table,Column3:Column6)

ب) table[,3:6]

ج) subset(table,select=c(‘Column3’,’Column4’,’Column5’,’Column6’))

د) تمام گزینه‌های بالا

جواب:

تمام دستورهای فوق می‌توانند نتیجه مورد نظر را به ما بدهند. لذا گزینه د صحیح است.

متن و سوال شماره ۲۳

جدول داده‌‌های زیر را با نام «table» در نظر بگیرید.

Column1Column2Column3Column4Column5Column6
Name1Alpha1224540Alpha
Name2Beta1632511Beta
Name3Alpha52104320Gamma
Name4Beta3672841Delta
Name5Beta4590320Phi
Name6Alpha1224120Zeta
Name7Beta3264641Sigma
Name8Alpha4284540Mu
Name9Alpha56112311Eta

کدام یک از دستورهای زیر ردیف‌های شامل مقادیر «Alpha» در ستون اول و مقادیر کمتر از ۵۰ در ستون چهارم را به ما می‌دهد؟

الف) dplyr::filter(table,Column1==’Alpha’, Column4<50)

ب) dplyr::filter(table,Column1==’Alpha’ & Column4<50)

ج) هر دو گزینه الف و ب

د) هیچ کدام

جواب:

تابع فیلتر در بسته dplyr از «,» و «&» برای اضافه کردن شرایط استفاده می‌کند. در نتیجه گزینه ج صحیح است.

امیدواریم مطالعه این مقاله، برای شما مفید واقع شده باشد. اگر به یادگیری در این زمینه علاقه دارید، مطالب زیر را به شما پیشنهاد می‌کنیم:

#

بر اساس رای ۱ نفر
آیا این مطلب برای شما مفید بود؟
اگر بازخوردی درباره این مطلب دارید یا پرسشی دارید که بدون پاسخ مانده است، آن را از طریق بخش نظرات مطرح کنید.
منابع:
analyticsvidhya
نظر شما چیست؟

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *