
資料科學專案的發起點
資料科學家面對的專案可能會包含下列這些工作內容:使用者的需求發想、與使用者討論需求規格,取得測試資料、載入環境、整理資料、使用圖形探索資料、利用模型預測、部署專案到正式環境最後是將專案的內容以淺顯易懂的方式與組織內部其他的團隊溝通及分享。
載入資料在資料科學專案中扮演發起點,如果這個資料科學專案目的是協助我們制定資料驅動的策略(Data-driven strategy),而非倚賴直覺,那麼為專案細心盤點資料來源與整理獲取方法,可以為將來的決策奠基穩固的基礎。資料常見來源包含:
純文字檔案
非結構化純文字檔案
結構化純文字檔案
CSV
JSON
HTML
試算表
關聯式資料庫管理系統中的資料表
使用 R 語言載入純文字檔案
純文字檔案指的是只有文字所構成的電腦檔案,這代表其中不包含字型的樣式或段落標記等,這類型檔案最明顯的特性就是能夠使用最簡單的文字編輯器(例如 Windows 的「記事本」、macOS 的 TextEdit)直接開啟檢視。
純文字檔案涵蓋的範圍相當廣泛,能夠再區分為非結構化純文字檔案與結構化純文字檔案兩大類;而結構化純文字檔案亦能再細分出 JSON、CSV 與 HTML 等。
非結構化純文字檔案
非結構化純文字檔案常用來儲存像是文章、劇本或系統日誌(System logs)等,例如儲存在工作目錄的經典電影「刺激 1995」簡介 the_shawshank_redemption_summaries.txt,我們使用內建的 readLines()
函數將檔案內容一列一列載入到文字向量之中。
text_file_path <- "the_shawshank_redemption_summaries.txt"
the_shawshank_redemption_summaries <- readLines(text_file_path)
print(class(the_shawshank_redemption_summaries))
print(length(the_shawshank_redemption_summaries))
print(the_shawshank_redemption_summaries)
結構化純文字檔案
結構化純文字檔案指的是透過特定符號讓資料能夠系統性地儲存、讀取及處理,例如 JSON(JavaScript Object Notation) 可以透過大括號 {}
儲存鍵值對應的資料、CSV(Comma Separated Values) 可以透過逗號 ,
分隔不同欄位、HTML(Hyper Text Markup Language) 可以透過標記 <></>
顯示不同外型與功能的資料。
JSON 是一種輕量的資料交換格式,對於人類而言是容易閱讀和寫作的格式,對於電腦而言是容易解析和建立的格式,簡言之,是一種對人類與電腦都友善的純文字格式,JSON 雖然源於 JavaScript,但卻是獨立於該程式語言之外,能夠被眾多程式語言輕鬆解析和建立的一種理想資料交換格式。JSON 可能由兩種資料結構組成:鍵值對應關係與有序列表,可以用 R 語言的 list
來理解。
我們使用 rjson
套件中的 fromJSON()
函數指定參數 file
載入 teams_rowbased.json
。
json_file_path <- "teams_rowbased.json"
teams_json <- rjson::fromJSON(file = json_file_path)
print(class(teams_json))
print(length(teams_json))
print(teams_json[[1]])
CSV 是最廣泛被使用的一種結構化純文字檔案格式,因此還有特定的副檔名 .csv
,我們使用內建的 read.csv()
函數載入。
movies_csv <- read.csv("movies.csv")
print(class(movies_csv))
head(movies_csv)
HTML 是一種用於建立網頁的標準標記語言,常與 CSS、JavaScript 一起被用於設計網頁、網頁應用程式以及行動應用程式的使用者介面,瀏覽器可以讀取 HTML 檔案,並將其渲染成視覺化網頁,HTML 描述了一個網站的結構語意隨著線索的呈現,使之成為一種標記語言而非程式語言。載入 HTML 時使用 httr
搭配 rvest
套件,前者用於對網頁伺服器發送請求,後者用於解析 HTML 的內容。
首先我們透過 httr
套件的 GET()
函數向 https://www.imdb.com/chart/top 這個網址發送了 GET 請求,並且帶著 Headers 使得回應可以是英文的。然後透過 rvest
套件的 read_html()
函數解析回應的文字,並且利用 CSS 選擇器取得想要的資訊,例如評分最高的前 250 部電影名稱。
r <- httr::GET("https://www.imdb.com/chart/top", add_headers("accept-language" = "en,en-US;q=1"))
imdb_top <- rvest::read_html(r[["content"]])
imdb_top_movie_titles <- imdb_top |>
rvest::html_elements(".titleColumn a") |>
rvest::html_text2()
print(imdb_top_movie_titles)
有時候我們想要擷取的資訊是 HTML 標記中的屬性,也能夠改採 rvest
套件的 html_attr()
函數取得,例如評分最高的前 250 部電影頁面連結。
imdb_top_movie_links <- imdb_top |>
rvest::html_elements(".titleColumn a") |>
rvest::html_attr("href")
split_movie_links <- strsplit(imdb_top_movie_links, split = "/?", fixed = TRUE)
movie_link_routes <- vector()
for (item in split_movie_links){
movie_link_routes <- c(movie_link_routes, item[1])
}
imdb_top_movie_links <- paste0("https://www.imdb.com", movie_link_routes)
print(imdb_top_movie_links)
使用 R 語言載入試算表
試算表是類比紙本計算表格的電腦軟體,由許多列與欄所構成的儲存格,其中可以存放數值、算式或文字,常見的試算表軟體有 Microsoft Excel、macOS Numbers 與 Google Sheets。試算表的檔案為一個活頁簿(Workbook)、活頁簿中可以有多個試算表(Spreadsheets),我們使用 readxl
套件的 read_excel()
函數預設讀取第一張試算表。
excel_file_path <- "imdb.xlsx"
movies_xlsx <- readxl::read_excel(excel_file_path)
print(class(movies_xlsx))
head(movies_xlsx)
由於活頁簿中可以有多個試算表的設計,載入之前建議先使用 readxl
套件的 excel_sheets()
函數檢視活頁簿中有幾個試算表。
excel_sheets <- readxl::excel_sheets(excel_file_path)
print(excel_sheets)
在 readxl
套件的 read_excel()
函數指定參數 sheet
載入特定試算表,可以接受試算表名稱、亦能輸入整數(由左邊從一開始數來第幾張試算表)。
casting_xlsx <- readxl::read_excel(excel_file_path, sheet = "casting")
actors_xlsx <- readxl::read_excel(excel_file_path, sheet = 3)
head(casting_xlsx)
head(actors_xlsx)
使用 R 語言載入關聯式資料庫管理系統中的資料表
關聯式資料庫(Relational database)是基於關聯模型所建構的資料庫,是儲存在電腦中的資料集合。一個資料庫中通常會有多個資料表(Table)能夠藉助集合運算(Set operation)等數學方法來處理資料表之間的操作和關聯,也能夠用來表示現實世界中的商業邏輯,並能夠接受結構化查詢語言 SQL 來進行檢索和操作。
我們使用 DBI
套件的 dbConnect()
函數建立與資料庫的連線,並且運用 RSQLite
套件的 SQLite()
函數傳入連線引擎,再運用結構化查詢語言 SQL 搭配 DBI
套件的 dbReadTable()
函數載入,資料庫使用完畢之後用 dbDisconnect()
函數將連線關閉。
connection <- DBI::dbConnect(RSQLite::SQLite(),
dbname = "imdb.db")
movies_db <- DBI::dbReadTable(connection, name = "movies")
casting_db <- DBI::dbReadTable(connection, name = "casting")
actors_db <- DBI::dbReadTable(connection, name = "actors")
head(movies_db)
head(casting_db)
head(actors_db)
dbDisconnect(connection)
在認識了如何使用 R 語言載入純文字檔案、試算表與關聯式資料庫中的資料表之後,第三十二週約維安計畫:使用 R 語言載入資料來到尾聲,希望您也和我一樣期待下一篇文章。
對於這篇文章有什麼想法呢?喜歡😻、留言🙋♂️或者分享🙌