大數據需處理的資料是廣泛的,基本上可分成二大類,有序資料與無序資料,對於有序資料,目前許多程式語言已可處理。但對於無序資料,例如,地理位置資訊,臉書訊息,視訊資料⋯等,無法處理。而R語言正可以解決這方面的問題,自此R已成為有志成為資訊科學家(Data Scientist) 或大數據工程師(Big Data Engineer) 所必需精通的電腦語言。

Google 首席經濟學家Hal Ronald Varian 有一句經典名言形容R。

The Great beauty of R is that you can modify it to do all sorts of things. And you have

a lot of prepackaged stuff that’s already available, so you’re standing on the shoulders of

giants.

上述大意是,R 語言之美在於,你可以透過修改很多高手已經寫好的套件程式,解決各式各樣的問題。因此,當你使用R 語言時,你已經站在巨人的肩膀上了。

 

前面把R語言說得天花亂墜,你可能會想:「有這麼誇張嗎?」現在就讓我們來看看R語言發撲克牌的功力。

 

R語言首家線上賭場上線啦!

撲克牌有趣的應用

實例1:建立一個撲克牌向量。

對這個實例而言,cardsuit 是代表撲克牌的4 種花色,cardnum 是代表撲克牌的數字,先利用rep( ) 函數產生52 張牌的花色,然後利用paste( ) 函數將花色與撲克牌數字組合。

 

隨機抽樣

不論是數學家或統計學家從一堆數據中抽取樣本,作更進一步的分析與預測是一件很重要的事。在R 語言可以使用sample( ) 函數,輕易地完成這個工作,這個函數的使用格式如下:

sample(x, size, replace = FALSE, prob = NULL)

x:這是個向量,代表隨機數樣本的範圍。

size:這是正整數,代表取隨機樣本的數量。

replace:預設是FALSE,如果是TRUE,代表抽完一個樣本這個樣本需放回去,供

下次抽取。

prob:預設是NULL,如果想控制某些樣本被抽取機率放大,則可在放置數值向量代表被抽中的權重。

隨機抽樣應用在撲克牌

上面曾經建立一個撲克牌的向量deck,這個向量包含撲克牌的52張資料。

現在,我們來讓R語言在線發牌!

實例2:隨機產生52張牌。

這個實例每次執行皆會有不同的結果。

 

種子值

在實例2中,每次執行時皆會產生不同的出牌順序,在真實的實驗過程中,

有時我們會想要記錄實驗隨機數據處理過程,希望不相同的測試者可以獲得相同的隨機數,以便可以做比較與分析,此時可以使用種子值的觀念。set.seed( ) 函數可用於設定種子值,set.seed( ) 函數的參數可以是一個數字,當設定種子值後,在相同種子值後面的sample( ) 所產生的隨機數序列將相同。

實例3:重新執行實例2,但此次增加設定種子值,以觀察執行結果。

執行結果

對上述程式而言,每次執行皆可以獲得相同的撲克牌出牌順序。此外,上述程式第6列筆者設定set.seed( )函數的參數是1,在此若放置不同的參數也可以,但不同參數會有各自不同的出牌順序。

實例4:重新執行實例3,但此次set.seed( )函數放置不同的參數,以觀察執行結果。

執行結果

比較實例4與實例3由於實例4的set.seed( )參數是8,因此實例4產生了與實例3不同的種子值,最後可以發現彼此的出牌順序是不同的,但每一次執行實例4時,皆可以有相同的出牌順序。

 

R語言也能應用在骰子上,兩者相去不遠,有興趣的讀者不妨動手試試看。