• 沒有找到結果。

第二章 研究背景

2.3 R

備整合資料處理及統計功能,包括線性與非線性模型(linear and nonlinear modelling)、統 計檢定方法( statistical tests)、時間序列分析(time-series)、分類(classification)與集群分析 (clustering)等分析方法,以及陣列、矩陣的算與繪圖工具,同時也是一種語法簡單的程 方式,主要可以分為平行處理、網格運算(Grid Computing)、Hadoop/MapReduce 等解決 方法。

常見的平行處理方式包括MPI(Message Passing Interface),是一種電腦或節點(Node)

在叢集(cluster)環境的管理通訊標準,使用者的程式可以同時在許多電腦上執行,啟動

平行分散式運算,有效提升執行效率。另一個是SNOW(Simple Network of Workstations),

採用Master / Slave cluster 架構,提供高階的溝通介面給 Master 來管理 Slave 工作站。

平行處理可以有效提升R 的運算效率,但是 cluster 繁雜的設定與管理,通常是 R 使用

者進入平行處理的障礙,使用者本身必須對於cluster 有深度的了解,才能有效的使用 R

的平行處理機制

另一個方式是 Hadoop/MapReduce 架構,主要的概念是把一件工作拆解成許多小工作,

最後再將小工作的輸出合併成為單一結果,有效的使用平行化技術處理大量的資料,主 流的技術有Hadoop Streaming、RHIPE 與 RHadoop 等方式,待章節 3.3 再作詳細說明。

‧ 國

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

7

圖 3:R 使用介面圖:Console(上)與 RStudio(下)

FOAF(Friend of A Friend)是一種以 RDF 為基礎架構,描述個人和他們的社會網絡關 係,包括自己的名字、電子郵件信箱、個人喜好與認識的朋友等資訊。我們可以利用 FOAF-a-Matic [20]製作 FOAF 資料,命名為 foaf.rdf,放到適當的網站讓所有人可以公開 下載,網路上的搜尋機器人可以發現這個檔案,並且利用檔案內容中的rdfs:seeAslo 發 現其他的FOAF 檔案,藉以串成整個社群網路。底下為 foaf.rdf 的範例。

<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"

xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"

xmlns:foaf="http://xmlns.com/foaf/0.1/">

<foaf:Person>

<foaf:name>Leigh Dodds</foaf:name>

<foaf:firstName>Leigh</foaf:firstName>

<foaf:surname>Dodds</foaf:surname>

<foaf:mbox_sha1sum>71b88e951cb5f07518d69e5bb49a45100fbc3ca5</foaf:mbox_sha1sum

>

<foaf:knows>

<foaf:Person>

<foaf:name>Dan Brickley</foaf:name>

<foaf:mbox_sha1sum>241021fb0e6289f92815fc210f9e9137262c252e</foaf:mbox_sha1sum

> <rdfs:seeAlso

rdf:resource="http://rdfweb.org/people/danbri/foaf.rdf"/>

</foaf:Person>

</foaf:knows>

</foaf:Person>

</rdf:RDF>

FOAF 從 OWL(Web Ontology Language)借用反函數屬性 Inverse Functional Property (IFP) [13]的概念,一個反函數屬性是一個簡單的概念,它的數值標識唯一個資源。如果 一個屬性P 被標記爲反函數(InverseFunctional),那 麽對於所有的x、 y 和 z,P(y,x) and P(z,x) implies y = z。舉例來說,若 y、z 代表不同的實例,x 為身分證號碼。如果 y、z

兩人具有相同的身分證號碼(x),那麼可以推斷這兩個實例指的是同一個人。

複的foaf:name,卻不可能會有相同的 email 或是社群網路帳號,FOAF 定義代表個人的 唯一識別符號(unique identifiers)如下:

foaf:aimChatID foaf:homepage foaf:icqChatID foaf:jabberID foaf:mbox

foaf:mbox sha1sum foaf:msnChatID foaf:weblog foaf:yahooChatID

文獻[18]利用唯一識別符號(unique identifiers)特性,從多個社群網站蒐集 FOAF 檔 案,使用OWL 推理引擎並使用與 foaf:knows 與 FOAF inverse property,進而從不同的 FOAF 檔案,推論得到同一個使用者。研究主要分析:

(1) Network Statistics:平均最短路徑(average shortest path length)

(2) Account Statistics:多個社群網路的使用者帳號數量分析,如長尾理論結果。

(3) Friendship Statistics:少數擁有多個帳號的使用者,具有良好的連結能力,位居各社 群網路的核心與溝通橋梁。

另外文獻[10]從網路蒐集的 FOAF 檔案分成 blog 與非 blog 兩類,主要分析:

(1) FOAF 文件中所使用的 foaf:mbox/ foaf:dateOfBirth 與

foaf:mboxsha1sum/foaf:homepage,後者比較沒有隱私的疑慮,因此出現的頻率較高。

(2) FOAF 文件使用 foaf:knows / rdfs:seeAlso 與其他 FOAF 文件相連接,blog 網站使用 的頻率比非blog 網站較為頻繁。

(3) 結合網路上不同的 FOAF 檔案,拼湊完整的個人資料。

(4) Social network analysis,網路由多少人(foaf:name)所組成,分析統計入/出分支度 (in/out-degree)、Patterns of Connected Components 等。

Agent age nick publications

Person made (maker) mbox currentProject name primaryTopic

(primaryTopicOf) homepage pastProject

title Project weblog account

img Organization openid OnlineAccount depiction

(depicts) Group jabberID accountName

familyName member mbox_sha1sum accountServiceHomepage givenName Document interest PersonalProfileDocument knows Image topic_interest tipjar

based_near topic (page) sha1

workplaceHomepage thumbnail workInfoHomepage logo schoolHomepage

資料來源:http://xmlns.com/foaf/spec/

3.2 社會網路分析(Social Network Analysis,SNA)

社會網絡分析是依據數學方法與圖論等理論為基礎,分析與計算個人與團體組織之 間的關係,藉以找出網路中重要的個體與特性。常見的分析測量指標[14]有 Degree centrality(分支度)、Betweenness centrality(中介中心性)、Closeness centrality(接近中心性) 與Eigenvector centrality(特徵性)等。

 Degree centrality (分支度):

(1) 定義:在圖上與頂點相連的邊數為分支度,是圖形中最簡單的測量指標。

(2) 意義:若為有向圖(directed graph)則分入/出分支度(in/out-degree),in-degree 是 incoming edges 的數量,out-degree 則是 out-going edges 的數量;若為無向圖(undirected graphs),total degree = in-degree + out-degree。degree 主要是評估團體組織中的核心人物,

degree 比較高的節點(vertex)表示與其他個體的往來較為頻繁,擁有較高的影響力。

 Betweenness centrality (中介中心性):

(1) 定義:是指所有節點之間的最短距離通過該節點的次數。

(2) 意義:因為該點對於網路上的其他節點而言,等於是兩者之間的最短路徑。具有 Betweenness 較高的節點,代表在網路上資訊流通影響力比較大。

<

 Closeness centrality(接近中心性):

(1) 定義:是指該節點與圖中其它所有點的路徑之距離總和。

 Eigenvector centrality(特徵性):

(1) 定義:該節點的評估指標由所有連接的節點決定。

(2) 意義:是 Degree Centrality 的改良方法,也稱作 Bonacich Power Centrality[3],對於 一樣擁有相同的degree Centrality 的兩個節點來說,不同的相鄰的節點可能有不同的影 響力。舉例來說,認識十個普通人與認識十個企業家的影響力可能不一樣。分析這種通 過與具有高度值的相鄰節點所獲得的間接影響力。

‧ 國

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

12

1 ) (

) ,

(

I R

1

R

C α β

=

α

β

公式(4)

α is a scaling vector, which is set to normalize the score.

β reflects the extent to which you weight the centrality of people ego is tied to.

R is the adjacency matrix (can be valued) I is the identity matrix (1s down the diagonal) 1 is a matrix of all ones.

另外小世界網路(small world networks / small world phenomenon),也稱作六度分隔理論

(Six Degrees of Separation),原始理論是 Milgram 1967 準備數百封的相同收件人的信件,

隨機交給陌生人傳遞,平均需要經過6 次轉寄過程。之後引申的意義是世界上原先不認

識的兩個人,只要中間經過少數人就能建立聯繫關係。

‧ 國

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

13

3.3 R與Hadoop的整合

在R 尚未導入與 Hadoop/MapReduce 技術之前,R 的平行處理架構扮演分析大量資 料的重要角色,相關的package 如 rmpi、 nws、snow、sprint、foreach、multicor 等,但 是即使使用多核心cpu 與叢集(cluster)的平行處理技術,仍然無法提供複雜分析巨量資料 的能力。Hadoop/MapReduce 是一個功能強大的程式架構,可以有效處理儲存在 HDFS 系統的大量資料,但是對於慣用R 的使用者來說,需要另外熟悉 Hadoop/MapReduce 的 語法與操作,解決方式是可以在R 的環境直接使用 Hadoop/MapReduce。R 與 Hadoop 的結合有許多方式,主要包括RHadoop[26]、RHIPE[8]與 Hadoop Streaming。

3.3.1 RHadoop

RHadoop 是 Revolution Analytics 研發的一個開放原始碼計畫,提供 R 程式開發人 員強大的工具來分析儲存在Hadoop 的資料。RHadoop 提供了一個的 R 程式程式庫 rmr,

其主要的目標是提供的map-reduce 開發人員簡單、效率、優雅的方式撰寫 Map Reduce

作業。使用rmr 程式庫撰寫的程式碼可能只需要使用 Java 語言的一半,同時維持程式碼

的可讀性,具備可重用和可擴展等特色。提供開發人員於原有熟悉的R 環境下,使用

MapReduce 架構處理大量的資料。

除了rmr 提供 MapReduce 程式框架之外,另外還有 rhdfs 和 rhbase 等程式庫。rhdfs 提供基本的連接到Hadoop HDFS,開發人員可以瀏覽、讀取、寫入和修改存儲在 HDFS 中的文件;rhbase 使用 Thrift server 提供 HBASE 基本連接,開發人員可以瀏覽,讀取,

寫入和修改存儲在HBASE 表。 rmr 程式庫程式提供 Hadoop 的抽象層概念,開發人員 只需要專注於大量資料的分析,不用注意分散式處理程序、系統容錯與平行處理等事 務。

words = unlist(words.list)

return( keyval(words, 1) ) //回傳字元,數值為 1 }

#定義 reduce 函數

wc.reduce = function(word, counts) {

keyval(word, sum(counts)) //計算字元總和 }

#wordcount 主程式

# mapreduce(input, output, input.format, map,reduce,combine)

#指定參數 input, output, map, reduce and input.format wordcount = function (input, output = NULL) {

mapreduce(input = input , output = output,

input.format = "text", map = wc.map, reduce = wc.reduce)}

RHadoop WordCount 程式範例

RHIPE 代表 "R and Hadoop Integrated Programming Environment",提供 Hadoop 與 R 緊密結合的介面,實現直接使用 R 來分析巨量資料。RHIPE 是一個 R 的程式庫(Library),

允許使用R 執行 MapReduce 的工作。

RHIPE 是以 Hadoop Streaming 為基礎,並加強檔案處理能力部分功能,如提供二進 制檔案。R 程式開發人員可以在 R 的環境,直接存取 HDFS 的檔案並在 Hadoop cluster 執行MapReduce 的工作。RHIPE 使用 Google protocol buffers 作為資料的輸出介面,支

援多數的R 資料型態,除增加效率外並容易整合其他程式語言。

RHIPE 運作時,每個 DataNode 都必須安裝 R、Protocol Buffers 與 RHIPE。以 RHIPE 運作過程為例,首先由rhcp、rhdel、rhls 等功能與 HDFS 進行檔案複製、刪除與列表,

使用rhmr 和 rhex 指令執行 MapReduce 工作,最後使用 rhstatus 觀察 R 運作的狀態,或

rhget Copying from the HDFS Moves files from the HDFS to a local directory.

rhgetkey Get Value Associated With a Key In A Map File rhinit Initialize RHIPE

rhjoin Wait For A MapReduce Job rhkill Kill A MapReduce Job

rhload Load an RData from the HDFS.

rhls List Files On HDFS

rhmr Prepares a MapReduce Job For Execution rhoptions Get or Set RHIPE Options

rhput Put a file unto the HDFS

rhread Read Key/Value Pairs From The HDFS rhsave Save .RData to HDFS

rhsave.image save.image to HDFS

rhstatus Report Status Of A MapReduce Job

rhsz Serialize and Unserialize See Details.

rhuz Serialize and Unserialize See Details.

rhwatch Start and Monitor Status of a MapReduce Job

rhwrap Macro to Wrap Boilerplate Around RHIPE Map code rhwrite Write R data to the HDFS

#RHIPE WordCount 程式範例

#載入 RHIPE library

words_vector<-unlist(strsplit(unlist(map.values)," ")) lapply(words_vector,function(i) rhcollect(i,1))

}) #定義 Reduce function

3.3.3 Hadoop Streaming

Hadoop 為了增加程式設計的使用彈性,提供 Hadoop Streaming 的 API 方式,讓使 用者除了Java 之外,可以使用支援 stdin/stdout 的語言或可執行的腳本語言(Scripts)撰寫 map 和 reduce 功能。Hadoop Streaming 使用 Unix 的標準串流方式作為 Hadoop 和使用者 程式之間的界面,使用者藉由標準輸入(stdin)和寫入到標準輸出(stdout),可以使用多種 語言撰寫MapReduce 程式。Hadoop Streaming 通常需要編寫兩個功能:Map 與 Reduce,

程式名稱分別為mapper 與 reducer。Map 先將資料分割成獨立的區塊,Reduce 結合 Map 產生的結果來執行有用的分析。底下為Hadoop Streaming 範例。

$HADOOP_HOME/bin/hadoop jar $HADOOP_HOME/hadoop-streaming.jar \ -input myInputDirs \

-output myOutputDir \ -mapper /bin/cat \ -reducer /bin/wc

在上面的例子中,首先指定資料的輸入、輸出目錄與檔名,mapper 與 reducer 逐行 從標準輸入(stdin)讀取資料,再把處理過的資料後發送到標準輸出(stdout)。Hadoop Streaming 依據 mapper 與 reducer 產生對應的 Map / Reduce 作業( Job),該作業( Job)會被 送到適當的Hadoop cluster,並監視作業( Job)的進度直到完成。

當程式被指定為mapper 時,如/bin/cat,map 會以獨立的程序啟動這個程式。當 mapper 執行時,它會把資料逐行分割提供給程式,當作標準輸入(stdin)的內容。在此同時,mapper 從標準輸出(stdout)收集資料,輸出(key/value)格式作為 map 的輸出結果。

同樣的方式套用在reducer。當程式被指定為 reducer 時,如/bin/wc,reducer 會以獨

立的程序啟動這個程式。當reducer 執行時,它會把資料逐行分割提供給程式,當作標

準輸入(stdin)的內容。在此同時,mapper 從標準輸出(stdout)收集資料,並輸出為(key/value) 格式,作為reducer 的輸出。

Hadoop Streaming 與 R 整合變得相當簡單,但是 Hadoop Cluster 的每個 DataNode 都必須安裝R 程式。使用 Hadoop Streaming 的優點是,它允許 Java 以及非 Java 的

相關文件