2  第二部分:讀取你的資料

本部分預計時間:20 分鐘

在第一部分,你已經成功畫出第一張圖、認識了套件、安裝了工具。現在我們要學會讀取自己的資料。

我有一個 CSV 檔案叫做 patient_data.csv,放在我的專案資料夾裡,欄位有 patient_id、treatment、age、gender、los。請幫我一次完成:

  1. read.csv() 讀取這個檔案,存成 patient_data
  2. head() 顯示前 6 筆資料
  3. dim() 看幾列幾欄、str() 看資料結構、summary() 看基本統計
  4. 用 skimr 的 skim() 產生更詳細的摘要
  5. 檢查有沒有遺漏值(colSums(is.na(...))
  6. 用白話文解讀每個欄位的分佈和需要注意的地方

給我可以從頭跑到尾的完整程式碼,加上中文註解。

Note關於資料檔案

本課程的範例資料 patient_data.csv 已包含在課程資料夾中。如果你是用 Posit.cloud,請先將檔案上傳到你的專案中。

2.1 任務 6:讀取 CSV 檔案

📋 複製這段話,貼給 AI:

我有一個 CSV 檔案叫做 patient_data.csv,放在我的專案資料夾裡。請告訴我:

  1. 怎麼讀取這個檔案到 R 裡面
  2. 怎麼看前幾筆資料確認有讀成功

請給我可以直接執行的程式碼。

也可以用套件 googlesheets4read_sheet() 直接從 Google 試算表讀取資料。

2.1.1 讀取資料

# 讀取 CSV 檔案
patient_data <- read.csv("patient_data.csv")

# 顯示前 6 筆資料
head(patient_data)
  patient_id treatment age gender los
1          1         A  45      M   5
2          2         B  52      F   8
3          3         A  38      M   4
4          4         B  61      F  12
5          5         A  55      F   6
6          6         B  42      M   9

2.2 任務 7:認識你的資料

📋 複製這段話,貼給 AI:

我已經把資料讀進來了,存在一個叫做 patient_data 的變數。請給我程式碼,讓我可以:

  1. 看這個資料有幾列幾欄
  2. 看每個欄位的基本統計(平均、最大、最小等)
  3. 看每個欄位是什麼資料類型(數字、文字等)
  4. 用 skimr 跟 summary 顯示分析結果

2.2.1 探索資料

# 載入 skimr 套件
library(skimr)

# 查看資料維度(幾列幾欄)
dim(patient_data)
[1] 100   5
# 查看資料結構
str(patient_data)
'data.frame':   100 obs. of  5 variables:
 $ patient_id: int  1 2 3 4 5 6 7 8 9 10 ...
 $ treatment : chr  "A" "B" "A" "B" ...
 $ age       : int  45 52 38 61 55 42 49 58 36 64 ...
 $ gender    : chr  "M" "F" "M" "F" ...
 $ los       : int  5 8 4 12 6 9 5 11 3 14 ...
# 查看基本統計摘要
summary(patient_data)
   patient_id      treatment              age           gender         
 Min.   :  1.00   Length:100         Min.   :35.00   Length:100        
 1st Qu.: 25.75   Class :character   1st Qu.:41.00   Class :character  
 Median : 50.50   Mode  :character   Median :49.00   Mode  :character  
 Mean   : 50.50                      Mean   :48.77                     
 3rd Qu.: 75.25                      3rd Qu.:56.00                     
 Max.   :100.00                      Max.   :64.00                     
      los       
 Min.   : 3.00  
 1st Qu.: 5.00  
 Median : 7.50  
 Mean   : 8.07  
 3rd Qu.:11.00  
 Max.   :17.00  
# 使用 skimr 產生更詳細的摘要
skim(patient_data)
Data summary
Name patient_data
Number of rows 100
Number of columns 5
_______________________
Column type frequency:
character 2
numeric 3
________________________
Group variables None

Variable type: character

skim_variable n_missing complete_rate min max empty n_unique whitespace
treatment 0 1 1 1 0 2 0
gender 0 1 1 1 0 2 0

Variable type: numeric

skim_variable n_missing complete_rate mean sd p0 p25 p50 p75 p100 hist
patient_id 0 1 50.50 29.01 1 25.75 50.5 75.25 100 ▇▇▇▇▇
age 0 1 48.77 8.43 35 41.00 49.0 56.00 64 ▇▇▆▇▆
los 0 1 8.07 3.95 3 5.00 7.5 11.00 17 ▇▃▅▃▁

2.3 任務 8:理解你看到的東西

📋 summary(patient_data) 的輸出複製起來,加上這段話貼給 AI:

這是我的資料摘要,請幫我解讀每個欄位的意義,以及有沒有什麼需要注意的地方(例如遺漏值、異常值): 【貼上 summary 輸出】

2.3.1 資料摘要解讀

summary() 的輸出,我們可以看到:

  • patient_id: 病人編號,從 1 到 100
  • treatment: 治療組別,A 組和 B 組各 50 人
  • age: 年齡分佈,平均約 47 歲
  • gender: 性別分佈,男女各半
  • los: 住院天數,平均約 8 天,B 組似乎住院天數較長

2.3.2 檢查遺漏值

# 檢查是否有遺漏值
sum(is.na(patient_data))
[1] 0
# 查看每個欄位的遺漏值數量
colSums(is.na(patient_data))
patient_id  treatment        age     gender        los 
         0          0          0          0          0