本部分預計時間:20 分鐘
在第一部分,你已經成功畫出第一張圖、認識了套件、安裝了工具。現在我們要學會讀取自己的資料。
我有一個 CSV 檔案叫做 patient_data.csv,放在我的專案資料夾裡,欄位有 patient_id、treatment、age、gender、los。請幫我一次完成:
- 用
read.csv() 讀取這個檔案,存成 patient_data
- 用
head() 顯示前 6 筆資料
- 用
dim() 看幾列幾欄、str() 看資料結構、summary() 看基本統計
- 用 skimr 的
skim() 產生更詳細的摘要
- 檢查有沒有遺漏值(
colSums(is.na(...)))
- 用白話文解讀每個欄位的分佈和需要注意的地方
給我可以從頭跑到尾的完整程式碼,加上中文註解。
本課程的範例資料 patient_data.csv 已包含在課程資料夾中。用 GitHub Codespaces 的話,檔案已經在你的工作目錄裡,直接讀取即可;如果你是用 Posit.cloud,請先將檔案上傳到你的專案中。
任務 6:讀取 CSV 檔案
📋 複製這段話,貼給 AI:
我有一個 CSV 檔案叫做 patient_data.csv,放在我的專案資料夾裡。請告訴我:
- 怎麼讀取這個檔案到 R 裡面
- 怎麼看前幾筆資料確認有讀成功
請給我可以直接執行的程式碼。
也可以用套件 googlesheets4 的 read_sheet() 直接從 Google 試算表讀取資料。
讀取資料
# 讀取 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
任務 7:認識你的資料
📋 複製這段話,貼給 AI:
我已經把資料讀進來了,存在一個叫做 patient_data 的變數。請給我程式碼,讓我可以:
- 看這個資料有幾列幾欄
- 看每個欄位的基本統計(平均、最大、最小等)
- 看每個欄位是什麼資料類型(數字、文字等)
- 用 skimr 跟 summary 顯示分析結果
探索資料
# 載入 skimr 套件
library(skimr)
# 查看資料維度(幾列幾欄)
dim(patient_data)
# 查看資料結構
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 N.unique : 2 1st Qu.:41.00 N.unique : 2
Median : 50.50 N.blank : 0 Median :49.00 N.blank : 0
Mean : 50.50 Min.nchar: 1 Mean :48.77 Min.nchar: 1
3rd Qu.: 75.25 Max.nchar: 1 3rd Qu.:56.00 Max.nchar: 1
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
| treatment |
0 |
1 |
1 |
1 |
0 |
2 |
0 |
| gender |
0 |
1 |
1 |
1 |
0 |
2 |
0 |
Variable type: numeric
| 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 |
▇▃▅▃▁ |
任務 8:理解你看到的東西
📋 把 summary(patient_data) 的輸出複製起來,加上這段話貼給 AI:
這是我的資料摘要,請幫我解讀每個欄位的意義,以及有沒有什麼需要注意的地方(例如遺漏值、異常值): 【貼上 summary 輸出】
資料摘要解讀
從 summary() 的輸出,我們可以看到:
- patient_id: 病人編號,從 1 到 100
- treatment: 治療組別,A 組和 B 組各 50 人
- age: 年齡分佈,平均約 47 歲
- gender: 性別分佈,男女各半
- los: 住院天數,平均約 8 天,B 組似乎住院天數較長
檢查遺漏值
# 檢查是否有遺漏值
sum(is.na(patient_data))
# 查看每個欄位的遺漏值數量
colSums(is.na(patient_data))
patient_id treatment age gender los
0 0 0 0 0