excel存檔後中文變亂碼
excel存檔後中文變亂碼

本篇內容包括:

  • 匯入CSV資料
  • 匯入錯誤訊息解決
  • aggregate函數應用
  • 用R語言實作SPSS單分組變量平均數法
  • 用R語言實作SPSS雙分組變量平均數法
  • 用factor函數轉換值為因子

這一篇讓我們用R語言來實作一個SPSS中常見的統計的比較平均數法,如何使用R語言中的功能來呈現。方法也許不止一種,主要希望可以用最簡單的方式讓原本只會使用SPSS圖形化介面的使用者,可以進入簡單的程式領域,用羅輯思考分析,理解用程式語言的角度來看統計分析。

匯入CSV資料

一般而言,如果用excel編輯完成後,再儲存成csv,通常會變成亂碼,為什麼知道是亂碼呢?一來匯入出問題,二來用sublime打開,就會發現了。所以保險起見,不管你是不是用excel編輯過檔案,都先用支援utf-8的編輯器確認一下吧!

excel存檔後中文變亂碼
excel存檔後中文變亂碼

這個部份,如果裡面沒有非英文字,通常非常順利,但一旦出問題,通常要花非常多的時間才能找到答案,甚至google了很久,花很多時間,搞的精疲力竭,仍然找不到正確的答案,畢竟魔鬼藏在細節裡

確定資料格式(UTF-8)

這裡要特別注意的是,標題列如果包含非英文語系的字,像中文、日本或韓文等語系,建議使用支援UTF-8的編輯器(ex: Sublime)打開來確認一下內容,再重新存檔一次(格式UTF-8),才能避免底下的這些錯誤情況。

到底要不要加fileEncoding = “UTF-8″呢!

如果你有做前一項,基本上是不用加,都可以正常匯入資料。

匯入錯誤訊息

Error in read.table(file = file, header = header, sep = sep, quote = quote, :
empty beginning of file

Error in make.names(col.names, unique = TRUE) :
無效的多位元組字串於 ''

Warning messages:
1: In read.table(file = file, header = header, sep = sep, quote = quote, :
輸入連結 'bank.csv' 中的輸入不正確
2: In read.table(file = file, header = header, sep = sep, quote = quote, :
incomplete final line found by readTableHeader on 'bank.csv'

通常看到上述的錯誤訊息,正確的解決方法,請看看前一項,應該8成都可以解決。

函數:read.csv

saledata <- read.csv(file = "bank.csv", header = TRUE)

head()顯示前6排資料內容
head()顯示前6排資料內容

計算平均數

各族群各項變數之平均值為何?

案例:依性別之不同,計算出客戶平均貸款與平均存款。

實作分群

分群:性別

實作單分組變量比較平均數法

用myvars定義出要計算出來的客戶的平均貸款和平均存款。

myvars <- c("貸款","存款")

函數:aggregate()

aggregate(saledata[myvars], by=list(saledata$性別),mean)

單分組比較平均數法,用aggregate()分組取得平均數
單分組比較平均數法,用aggregate()分組取得平均數

這時候因為我們沒有定義分組的標籤名稱,系統用自動用Group.1代替性別,若我們想顯示出性別,就另外定義性別取代Group.1。

aggregate(saledata[myvars], by=list(性別=saledata$性別),mean)

定義分組的標籤名稱
定義分組的標籤名稱

實作雙分組變量比較平均數法

前一個案例是單因子,若是兩個因子呢?

案例:先依據性別之不同,再區分信用等級,計算出不用性別與信用等級下,客戶的平均貸款與平均存款。

aggregate(saledata[myvars], by=list(性別=saledata$性別,信用等級=saledata$信用等級),mean)

雙因子比較平均數法
雙因子比較平均數法

這時候,看似很完美的呈現了我們想要的結果,但是性別的部份,出現的卻是0和1,如何把0和1替換成男和女呢?

讓呈現出來的資料結果更人性化及更容易看的懂呢!

值標籤(value labels)

一般而言,解決方法有幾種,第一種,最省事,直接附註:0是男生1是女生;第二種,使用值標籤(value labels),將資料作轉換。

第一種不用說,不用教你我都會;讓我們來看第二種值標籤,將類別型態的值定義成新標籤。

函數:factor()

假設0是男生,1是女生

將值轉換為因子(factor)

saledata$性別 <- factor(saledata$性別,levels = c(0,1), labels = c("男","女"))

aggregate(saledata[myvars], by=list(性別=saledata$性別,信用=saledata$信用),mean)

用值標籤value labels重新定義性別代號
用值標籤value labels重新定義性別代號

練習題

請依職業別之不同,計算出客戶平均所得與平均存款。

回覆留言

Please enter your comment!
Please enter your name here