農林漁牧網

您現在的位置是:首頁 > 農業

R語言描述統計第一彈|計算泰坦尼克號不同艙位的存活率

2022-01-24由 CDA資料分析師 發表于 農業

均數符號怎麼輸入

R語言描述統計第一彈|計算泰坦尼克號不同艙位的存活率

作者:丁點helper

今天開始學習在R語言中做描述性統計。為了便於大家邊學邊練,可以下載這個資料:

檔名:titanic。csv

連結:https://pan。baidu。com/s/1Pj0EsaBZdnw6mHPpeVd9Aw

密碼: yuym

將本地檔案匯入到R中

為了便於資料管理和操作,我們通常會把資料儲存為。csv格式,這是excel中的一種較為簡單的資料格式。想要把一個。csv格式的資料匯入R,可以用read。csv()這個函式:

# 將本地檔案titanic。csv匯入到R中,# 並存儲到titanic這個物件中titanic <- read。csv(“//Users//Desktop//titanic。csv”,header = TRUE)

假設該本地檔案儲存的是1912年沉沒於大西洋的巨型郵輪泰坦尼克號中乘客的基本資訊。

上面第一個命令“//Users//Desktop//titanic。csv”是檔案titanic。csv的本地儲存地址,大家要根據自己電腦的儲存位置自行調整;

第二個命令header = TRUE 是指將原檔案中的第一行自動設定為檔案的列名。

如果你的。csv檔案中並無列名,而是希望在匯入R之後再設定,則應將第二個命令設定為header = FALSE。

瞭解資料

上篇文章講過,拿到一個數據庫,首先要了解它的基本資訊。之前已經講過,我們簡單複習一下。

class(titanic) #物件是什麼資料結構[1] “data。frame”dim(titanic) #檢視資料有幾行幾列[1] 1309 6names(titanic) #檢視資料的列名[1] “pclass” “survived” “sex” “age” “sibsp” “parch” head(titanic) #檢視前6行tail(titanic) #檢視後6行

可以知道,titanic這個資料框中有1309條記錄,6個變數。

這6個變數依次為艙位等級、是否倖存、性別、年齡、同行的兄弟姐妹或配偶數量、同行的父母或子女數量。

描述性統計

接下來我們來對titanic這個資料做描述性統計。

1. 每個等級的船艙中分別有多少人?

有兩種方法,一是table()函式,用於統計分類變數pclass中各類別的頻數;二是summary()函式,功能是做描述性統計,既適用於分類也適用於計數變數,可以用來統計分類變數的頻數、計算計數變數的均數、百分位數等。

# 方法一table(titanic$pclass) 1st 2nd 3rd 323 277 709# 方法二summary(titanic$pclass) 1st 2nd 3rd 323 277 709

2. 遇難者與倖存者分別有多少人?

table(titanic$survived) died survived 809 500

3. 每個等級的艙位中分別有多少人遇難、多少人倖存?

本例中,按照『艙位等級』和『是否倖存』兩個條件統計乘客狀況,共6種可能。仍使用table()函式,統計每種可能的狀況分別有多少人,生成交叉列聯表。

# 將列聯表儲存在tab1中tab1 <- table(titanic$survived,titanic$pclass)# 檢視tab1的內容tab1 1st 2nd 3rd died 123 158 528 survived 200 119 181

4. 每個等級的艙位中倖存者的比例是多少呢?

思路很簡單,就是每等級艙位中倖存者的人數佔該艙位總人數的比例。

1)那我們先看看每等級艙位中倖存者的人數怎麼算,上面的tab1第二行就是,只需要將其提取出來,方法和前面講過的如何提取資料框中的行和列相同:

#提取tab1的第二行tab1[2, ] 1st 2nd 3rd 200 119 181

2)每種艙位總人數?上面也已經計算過:

table(titanic$pclass) 1st 2nd 3rd 323 277 709

還有一種方法,使用apply()函式,功能是對矩陣類資料的行或列進行批次處理:

apply(tab1,2,sum) 1st 2nd 3rd 323 277 709

函式中有三個命令。第一個命令tab1表示待處理的資料;第二個命令2表示對tab1的每一列進行處理,若需處理每一行,則第二個命令應輸入數字1;第三個命令sum表示求和。

因此,上述語句的意義為:對tab1中的每一列求和,即計算每個等級艙位中的總人數。

3)求每等級艙位中倖存者的人數佔該艙位總人數的比例:

# 方法一tab1[2, ]/table(titanic$pclass) 1st 2nd 3rd 0。6191950 0。4296029 0。2552891 # 方法二tab1[2, ]/apply(tab1,2,sum) 1st 2nd 3rd 0。6191950 0。4296029 0。2552891

4)你一定也發現了,這個結果非常不美觀,也不適合在科研工作中報告。我們做以下變化:

# 先乘以100tab1[2, ]/apply(tab1,2,sum)*100 1st 2nd 3rd 61。91950 42。96029 25。52891# 保留2位小數 round(tab1[2, ]/apply(tab1,2,sum)*100,2) 1st 2nd 3rd 61。92 42。96 25。53

round()函式的功能是保留小數位數。

上面的程式碼中,第一個命令tab1[2, ]/apply(tab1,2,sum)*100 是需要保留小數的物件;

第二個命令2是指保留2位小數。

5)可是這個結果顯然不對,加上百分號%才是準確的。需要用到paste()函式,該函式的功能是把各種元素連線起來,本例中,我們希望把數字和百分號連線:

paste(round(tab1[2, ]/apply(tab1,2,sum)*100,2),“%”,sep=“”)“61。92%” “42。96%” “25。53%”

第一個命令round(tab1[2, ]/apply(tab1,2,sum)*100,2) 就是上面計算好的百分數的數字部分,這是要連線的第一部分;

第二個命令“%” 是要連線的第二部分;

第三個命令sep=“” 指兩個元素之間的連線符號,這裡我們不需要任何連線符號,所以引號“”之間什麼都不用寫。