天天看點

簡單易學多元資料可視化R實作:神奇的卡通臉譜圖Chernoff faces

簡單易學多元資料可視化R實作:神奇的卡通臉譜圖Chernoff faces

.chernoff face是由美國統計學家chernoff在1976年率先提出的,用臉譜來分析多元度資料,即将p個次元的資料用人臉部位的形狀或大小來表征。

他首先将該方法用于聚類分析,引起了各國統計學家的極大興趣,并對他的畫法作出了改進,一些統計軟體也收入了臉譜圖分析法,國内也有很多研究工作者将該方法應用于多元統計分析中。

臉譜圖分析法的基本思想是由15-18個名額決定臉部特征,若實際資料變量更多将被忽略,若實際資料變量較少則臉部有些特征将被自動固定。統計學曾給出了幾種不同的臉譜圖的畫法,而對于同一種臉譜圖的畫法,将變量次序重新排列,得到的臉譜的形狀也會有很大不同。

按照切爾諾夫于1973年提出的畫法,采用15個名額,各名額代表的面部特征為:

1表示臉的範圍

2表示臉的形狀

3表示鼻子的長度

4表示嘴的位置

5表示笑容曲線

6表示嘴的寬度

7—11分别表示眼睛的位置,分開程度,角度,形狀和寬度

12表示瞳孔的位置

13—15分别表示眼眉的位置,角度及寬度。

這樣,按照各變量的取值,根據一定的數學函數關系,就可以确定臉的輪廓、形狀及五官的部位、形狀,每一個樣本點都用一張臉譜來表示。

臉譜容易給人們留下較為深刻的印象,通過對臉譜的分析,就可以直覺地對原始資料進行歸類或比較研究。

由于chernoff臉譜圖能形象地在平面上表示多元度資料并給人以直覺的印象,可幫助使用者形象記憶分析結果,提高判斷能力,加快分析速度。目前已應用于多地域經濟戰略名額資料分析,空間資料可視化等領域。

在r軟體中,用aplpack包中的faces()函數作臉譜圖,具體函數參數如下:

faces(xy,which.row,fill=false,nrow,ncol,scale = true,byrow =false,main,labels)

下面是2008年美國各州的犯罪率部分統計資料在r中實作chernoff 臉譜圖過程:

下載下傳r,安裝aplpack軟體包

安裝r後,打開它,點選按鈕“packages & data”,選擇“package installer”,在下拉菜單中選擇“cran(binaries)”,然後點選“get list”,下拉滾動到“alpack”,最後點選“install select”按鈕,完成安裝。

簡單易學多元資料可視化R實作:神奇的卡通臉譜圖Chernoff faces

或者,也可以在r控制台鍵入:

in[1]:install.packages("alpack")

2. 擷取資料

flowingdata網站中資料集有清洗過的2008年美國各州的犯罪率部分統計。可以在http://datasets.flowingdata.com/crimeratesbystate-formatted.csv中找到,我們沒有必要下載下傳它,可以通過url在r中直接調用read.csv()函數直接下載下傳資料。

in[2]:crime<-read.csv("http://datasets.flowingdata.com/crimeratesbystate-formatted.csv")

3.檢視資料,在控制台鍵入

in[3]:crime[1:6,]

将顯示資料集的前6行資料:

簡單易學多元資料可視化R實作:神奇的卡通臉譜圖Chernoff faces

記住,資料集總共有8列,第一列是州的名字,其餘的列為7中類型的犯罪。

4. 制作臉譜圖

一旦有了資料,使用aplpack包的faces()函數可以很容易地制作。首先,加載軟體包:

library(alpack)

如果在加載過程中,出現錯誤,需要檢查你安裝的是否正确。

臉譜圖:

in[4]:windows()

faces(crime[,2:8])

簡單易學多元資料可視化R實作:神奇的卡通臉譜圖Chernoff faces

windows()建立一個圖形視窗,faces(crime[,2:8])用資料集的第2至8列變量來畫臉譜,

其中:

murder(謀殺)類型的變量表示臉高,眼寬,耳朵高度;

forcible_rape(強奸)類型變量表示臉寬,頭發高度;

robbery(搶劫)類型變量表示臉的結構,頭發寬度;

aggravated_assault(惡意攻擊)類型變量表示嘴巴高度,頭發發型;

burglary(夜盜)類型變量表示嘴寬,鼻子高度;

larceny_theft(盜竊)類型變量表示微笑,鼻子寬度;

motor_vehicle_theft(機動車輛盜竊)變量表示眼寬,耳朵寬度。

簡單易學多元資料可視化R實作:神奇的卡通臉譜圖Chernoff faces

5. 變換特征

觀察上面的臉譜圖,52張臉代表52個州,每張臉表示了每個州的7種犯罪類型,可以很容易地發現第3,10張明顯地與其他臉不同,說明第3,10個州與其他州的犯罪類型明顯不同。

但是在上面的臉譜圖中還需要做一些改變:

這些臉是用數字标簽的,如果沒有關鍵字沒有多大用,是以需要用州的名字進行标簽;

2.有些臉是帶有微笑的,對于積極的資料集,比如生活品質或棒球統計,微笑是有意義的,值越高越好,而對于犯罪資料,犯盜竊罪微笑是不符合常理的,值越高越差。

不巧的是,r中face()函數并不允許我們自己選擇每個變量關聯的人臉部分,我們需要找到一個解決辦法,根據幫助檔案(在r控制台鍵入?faces),在這個案例中微笑的曲線被用在輸入矩陣的第6列中。将資料集的第6列填充相同的值0,即所有的曲線是中性的

in[5]:crime_filled<-cbind(crime[,1:5],rep(0,length(crime$state)),crime[,7:8])

cbind()函數聯合多個列形成一個矩陣,上面将犯罪資料集的第6列置為0,其餘不變,并重新指派給crime_filled變量,檢視crime_filled前6行:

in[6]:crime_filled[1:6,]

簡單易學多元資料可視化R實作:神奇的卡通臉譜圖Chernoff faces

注意,新的資料集中有1列資料的值都為0。

對crime_filled矩陣使用faces()函數

in[7]:windows()

faces(crime_filled[,2:8])

簡單易學多元資料可視化R實作:神奇的卡通臉譜圖Chernoff faces

可以得到類似的臉,但是沒有笑臉:

簡單易學多元資料可視化R實作:神奇的卡通臉譜圖Chernoff faces

6.添加标簽

用州的名字替換數字來标簽每張臉譜:

in[8]:faces(crime_filled[,2:8],labels=crime_filled$state)

簡單易學多元資料可視化R實作:神奇的卡通臉譜圖Chernoff faces

label參數設定為crime_filled資料集的州列

簡單易學多元資料可視化R實作:神奇的卡通臉譜圖Chernoff faces

可以很容易地将每張臉與對應的州關聯起來。怎麼樣,還不錯吧!仔細閱讀r中faces()幫助檔案,還可以根據其它功能畫出不同效果圖。比如,頭像可以以聖誕老人為模。

in[9]windows()

a<-faces(crime_filled[,2:8],labels=crime_filled$state,face.type=2)

簡單易學多元資料可視化R實作:神奇的卡通臉譜圖Chernoff faces

哇哦,世界上竟然有如此浪漫的統計學家!如此簡單易學,隻需要一組多元資料、一個faces()函數,就可以輕松搞定chernoff臉譜。

總之,chernoff臉譜是一種有趣的資料呈現方法,它可以把多中繼資料用二維的人臉的方式整體表現出來。各類資料變量經過編碼後,轉變為臉型,眉毛,眼睛,鼻子,嘴,下巴等面部特征,資料整體就是一張表情各異的人臉。面對錯綜複雜的資訊時,人們會自動過濾掉無用資訊,保留有用資訊。人腦通常可以察覺到一些非常細微甚至難于測量的變化,然後對其做出反應,同時,人腦區分臉譜時,這種優越性更加明顯,因為無論是臉的胖瘦,還是五官的大小位置,都極易給人留下深刻的印象,因而易于差別。

作者簡介:席雄芬,北京郵電大學無線信号處理專業研究所學生在讀,主要研究圖信号處理,對基于社交網絡的圖資料挖掘感興趣,希望借助此平台能認識更多的從事大資料方面的人,結交更多的志同道合者。

原文釋出時間為:2015-09-14

本文來自雲栖社群合作夥伴“大資料文摘”,了解相關資訊可以關注“bigdatadigest”微信公衆号