iT邦幫忙

2022 iThome 鐵人賽

DAY 10
0
AI & Data

語言學與NLP系列 第 10

Day 10 一篇搞懂 R 語言的迴圈 Loop

  • 分享至 

  • xImage
  •  

今天要帶大家認識 R 語言的迴圈寫法。可能大家聽到 loop 都會有一點懼怕,覺得是比較複雜的程式語言。的確,寫 loop 是非常考驗邏輯的一件事,我自己初學程式語言時也是文之色變(現在好像也沒好到哪xdd),不過在經過多次嘗試後,已經很習慣 loop 的邏輯了!所以今天就簡單向大家介紹一下吧~

首先,為什麼要使用 loop 呢?在電腦的世界裡是一個口令(code)一個動作(執行),它不會舉一反三,所以你必須一直指定電腦該做些什麼。然而,當你要一直重複某個步驟時,一次一次慢慢執行是非常消耗時間的事。因此,產生了 loop。也就是說,你把你需要完成的事情,寫進一個 loop 裡面,這樣電腦就能一直重複這個步驟,直到你叫它停止,或是資料處理完畢為止。R 語言中的 loop 有三種:

  • for: 逐一查看陣列,執行區塊內的 code。
  • while:重複執行區塊內的 code,直到指定的條件為 false 為止。
  • repeat: 重複執行區塊內的 code,直到 break。

在此,我們介紹最常用也最基礎的 for 迴圈
我們使用 Kaggle 這個平台上整理好 IMDB 電影評論這個檔案做示範。所以要先下載檔案並讀取資料(https://www.kaggle.com/datasets/PromptCloudHQ/imdb-data)

我們的目標是要新增一個 Comment 欄位,透過影評所打出來的分數給 "Must See", "OK" 和 "Bad Movie" 這三種較為直觀的評論。


data = read.csv("IMDB-Movie-Data.csv")
# 下載並讀取資料

head(data) # 我們先觀察一下資料

data <- data[!is.na(data$Metascore), ] # 去除 NA 值


result <-c() # 建立一個空的 list 來儲存 loop 的結果

# 
for(i in seq_along(data$Rating)){# seq_along()是 data 的長度,我們鎖定 Rating 這個欄位的分數給出分類
  
  if ((data$Rating[i] >= '8.0') & (data$Metascore[i] >='80') ){
  result[i]= "Must See" 
  
  # 如果 Rating 分數大於等於 8.0 且 Metascore 分數大於等於 80,就評定為 "Must See" 並丟入 result 中 (小 i 代表重複的物件)
  
  }else if ((data$Rating[i] < '5.0') & (data$Metascore[i] < '60')){
  result[i]= "Bad movie"

  # else if 代表其他條件。
  
  }else{
  
  # else 代表前面的條件都挑選完畢後剩下的該怎麼做
     result[i]= "OK"
    }
  }
  
data$Comments = result # 建立 Comments 這個欄位在 data 裡,並且裡面的資料是來自 result 這個 list

head(data, 10)  # 看看前 10 筆資料

執行結果為:

IMBD

是不是快速又簡單呢?今天就到這邊,我們明天見~


上一篇
Day 9 來自製簡單的文字雲
下一篇
Day 11 機器學習之決策樹(Decision Tree)
系列文
語言學與NLP30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言