2009年8月9日 星期日

UCINET 簡易 教學 使用 筆記

前陣子自己曾寫一篇關於社會網路分析的文章,發現還不少人用 UCINET 關鍵字找到,然而那篇文章只是純粹地發牢騷,並沒有記下任何的使用資訊。今天有收到別人的留言,我想,就順道回憶一下這套軟體的使用。


首先,要做的事就是將手頭社群網路建成 UCINET 軟體可輸入的資料格式,在此以文字檔為例:(前兩行是制式格式)


dl n = 個數 , format = 輸入格式
data:
...
...


其中,個數代表整個圖中有幾個 node 組成,輸入格式可分成 node list 和 edge list 兩種,若圖是有權重的,那只能用 edge list 方式輸入。



  • nodelist


dl n = 4, format = nodelist1
data:      
1 2 3
2 3 4
3 4
4 3


此例代表 node 1 跟 node 2 和 node 3 有連線; node 2 跟 node3 和 node 4 有連線,以此類推



  • edgelist


dl n = 4, format = edgelist1

data:      

1 2 10

2 3 15

3 4 1

4 3 5


此例代表 node 1 連到 node 2 ,權重為 10 ;node 2 連到 node 3 ,權重為 15 ;node 3 連到 node 4 ,權重為 1 ,以此類推


以 edge list 或 node list 的輸入格式,都是有向圖的輸入,若要弄成無向圖時,則需留意輸入,例如輸入 node 1 連到 node 2 後,要記得再建立 node 2 連到 node 1 的資訊。而使用上述的格式,是因為社群網路資訊可能很大,因此會需要用程式產生輸入資料,若資料不大,可以使用 UCINET 提供的輸入方式。


UCINET 6 -> [Data] -> [Import from text data] -> [dl]


完成圖的輸入後,緊接著就是分析的部分,此部分必須搭配演算法的意義來使用,例如最簡單的就是輸出 in-degree 和 out-degree 資訊,透過基本的資訊,可以得知哪些點可能是重要的,例如某點的 out-degree 和 in-degree 都多,但表該點可能位於圖的中心等。然而,分析並不是這般簡單的,因此才會有源源不絕的演算法蹦出來,以 Betweenness 為例,簡言之,若有某點常常出現在一些最短路徑上,那該點可能是重要的,因此,可以用 UCINET 幫你計算出該圖各點的 Betweenness 數值,數值高的就是一種重要的意義。


UCINET 6 -> [Network] -> [Centrality] -> [Freeman Betweenness] -> [Node Betweenness]


以上述提到的 node list 測資丟入


sna sample


運算完的 Betweenness 資訊如下:


                  1            2
        Betweenness nBetweenness
       ------------ ------------
    3         0.500        8.333
    2         0.500        8.333
    1         0.000        0.000
    4         0.000        0.000


其中, 2 跟 3 所得的 0.5 數值是因為 1 到 4 這條路可分成 1->2->4 和 1->3->4 ,各取 1/2 的關係。


最後,並沒有什麼演算法是萬能的,對於社群網路的分析靠的是經驗,這些都是我所缺乏的。


其他資訊:



4 則留言:

  1. 您好:

     想請問一下如何入門UCINET?
     是否有相關的文件呢?因為它的SOP也無法下載
     故想請問一下您相關資訊 謝謝


    版主回覆:(02/04/2010 02:43:02 AM)


    抱歉, 我對該軟體也不怎熟, 當初我只有修課稍微接觸, 大概只用不到 5 次, 最後比較著重在寫程式跟演算法, 例如用 C 語言寫出 betweenness 等等, 整體上使用 UCINET 大多拿來驗證程式有沒寫錯囉, 至於文件我也沒很仔細找或熟讀, 要說的話, 頂多文章上頭標示的連結: CCU - Social Network Analysis Lab 裡 Course Info 中, 有一些課程講義可以下載參考看看, 內有電子書, 主要用 UCINET 進行 demo 的樣子.

    我自己的認知:將資料弄成 UCINET 可以匯入的格式,接著依照演算法來進行運算。前提是要先懂那些演算法算完的意義,UCINET只是幫你計算,還有能畫出圖形來分析,所以我覺得要先懂演算法,透過 UCINET 運算後才有意義,不然能運行也只是看到一堆數字而已,上課老師倒也是先提提演算法的概念,再用 UCINET 跑出的結果跟大家分析。

    回覆刪除
  2. 很感謝您熱心的寫出UCINET教學使用筆記 因為很多購買這套軟體的客戶詢問用法 因此我希望能將您的網頁以超連結方式放在linksoft公司網頁 讓更多人了解這套軟體 您可以在此看到 http://www.linksoft.com.tw/products.asp?seq=64

    版主回覆:(09/29/2009 11:25:54 AM)


    這個使用筆記只是我之前求學時,順手寫得下的筆記,很歡迎你們拿去當簡單的介紹,只是我後來都沒有使用了,所以不曉得教學還適不適用於你們的新產品。如果文章還有價值,歡迎透過超連結或附上出處使用 :)

    回覆刪除
  3. 您好 您上面的回覆說初步的知識是演算法
    如果要學演算法是否得從C語言開始入門?
    身為一個非理工科系的初學者 建議的入門知識或是工具有甚麼呢?
    還請給建議,一直對這個很有興趣,謝謝!

    回覆刪除
    回覆
    1. 依照這篇筆記,"演算法"這關鍵字是點出一個方向,那就是 UCINET 提供了很多種分析方式,但哪種分析是適合你所碰到的問題,需要有相關知識背景才能夠判斷的,因此才說需要了解演算法的背景。

      對於 UCINET 分析的方法,大多採用圖學(Graph)相關的演算法,舉例來說,以一串珠子,被多條線串起來,有的珠子可以連結到多顆珠子,有的只有連到一個珠子。假設想要知道那哪個珠子比較重要?以 Betweenness 演算法就是計算方式每顆珠子連到其他珠子的路徑,看哪些珠子被經過最多,就代表那些珠子重要。套在人際關係來說,有哪些朋友的人脈最廣(可以連結的珠子最多),對你是不是也有類似重要的價值等等。

      但挑錯演算法,結果可能就一樣了,而面對各類問題,有經驗的就可以挑選恰當的演算法,或是懂得其演算法意義等。

      對於演算法跟程式語言的關係,演算法是解決的方法,而程式程式是實際執行方式。舉例來說有一堆散落的物品,重量都不一樣,如何挑出最重的,那演算法可能可以幫你設計解決問題的步驟,提升效率。至於是派誰去執行,大概就像挑哪套程式語言吧。

      對於怎樣學習演算法?在大學課程就是按部就班,碰到某個問題,用某個解法解決,就像學數學一樣,從簡單教到難。或許,你可以朝週邊的現象來觀察,接著擬定你的問題,再找解法,這樣也是一種方式,但缺點可能是沒有相關知識的背景,很容易卡關或是想法侷限等,正所謂思而不學則怠。

      因為不曉得你的年紀跟狀況,我假定是大學剛畢業好了,若你真的非常有興趣,可以先挑一套程式語言學習(哪套應該都可以,只是有些語言特色可以降低入門門檻),接著再學習"資料結構",最後在學習"演算法",這是大學資訊學程中,顯而易見的安排(不過課程通常是半年起跳,一星期四小時)。此外,資料結構已經有帶到不少演算法了,對大部份的人來說,學完資料結構已經非常夠用。

      目前國內有些大學有出線上課程,如交大開放式課程,可以在資訊學院裡找到,例如:

      http://ocw.nctu.edu.tw/course_list.php?page=1&bgid=9&gid=0

      初學程式語言:

      資訊科技概論與程式設計(一) Introduction to Computers and Programming I
      資訊科技概論與程式設計(二) Introduction to Computers and Programming II

      資料結構:

      資料結構 (其實裡頭已經有不少演算法)

      若語言能力不錯的話,也可以試試國外課程,如 MIT http://ocw.mit.edu/index.htm 等

      如果時間有限,那不如專精在自己強項,利用自己的背景、知識、領域去關注問題,嘗試去找出解法,碰到無法解決時,把它交給專業人士吧 :D

      刪除