社會(huì)網(wǎng)絡(luò)分析R語(yǔ)言實(shí)戰(zhàn)之生成鄰接矩陣

有很多朋友表示在社會(huì)網(wǎng)絡(luò)分析的第一步——生成鄰接矩陣遇到了一些困難馍迄。因?yàn)樯鐣?huì)網(wǎng)絡(luò)分析的算法幾乎都是基于矩陣的計(jì)算表牢。所以把關(guān)系數(shù)據(jù)轉(zhuǎn)換為鄰接矩陣是一切分析的基礎(chǔ)剔氏。關(guān)于鄰接矩陣的定義,可以參看我的另一篇文章传蹈。閑話少說(shuō)厚脉,進(jìn)入正題习寸。

獲得關(guān)系數(shù)據(jù)的方式有很多,關(guān)系的內(nèi)涵也是各種各樣傻工。比如文章的引用關(guān)系霞溪,醫(yī)院間病人的轉(zhuǎn)診,股東對(duì)不同公司的持股等等中捆⊙炱ィ可以說(shuō)關(guān)系數(shù)據(jù)無(wú)處不在。本文以最常見(jiàn)的朋友關(guān)系為例來(lái)介紹一種生成鄰接矩陣的方式泄伪。文中會(huì)展示詳細(xì)的代碼殴蓬,保證讀者看完之后都能實(shí)操。

朋友關(guān)系最常用的還是問(wèn)卷法蟋滴,采取提名的方式染厅,如下圖:

圖1


如圖中所示痘绎,除了提名朋友的姓名之外,還可以設(shè)置一些題目對(duì)關(guān)系的屬性進(jìn)行評(píng)估肖粮。這些關(guān)系屬性的數(shù)據(jù)可以在未來(lái)做一些更豐富的分析孤页,為了不偏離主題,本文暫時(shí)不做介紹尿赚。

被試完成問(wèn)卷之后我們就需要把數(shù)據(jù)錄入散庶。這里推薦一個(gè)比較好用的數(shù)據(jù)錄入工具 EpiData,也是可以對(duì)語(yǔ)法進(jìn)行編輯凌净,可以設(shè)置數(shù)據(jù)格式(例如日期設(shè)置為yyyy/mm/dd)悲龟、取值范圍、跳轉(zhuǎn)條件等等冰寻,可以幫助我們規(guī)避很多錄入錯(cuò)誤须教。畢竟數(shù)據(jù)錄入是一個(gè)沒(méi)啥技術(shù)含量容易產(chǎn)生厭煩情緒的工作,而數(shù)據(jù)質(zhì)量是科研工作的基礎(chǔ)斩芭。語(yǔ)法寫好之后轻腺,程序會(huì)自動(dòng)識(shí)別輸入的合法性,大大降低出錯(cuò)的概率划乖。完成之后可以直接導(dǎo)出為excel等文件贬养,非常方便。

扯遠(yuǎn)了琴庵,回到主題误算。一般數(shù)據(jù)格式都是每一個(gè)被試為一行,稱為一個(gè)觀測(cè)(observation)迷殿,每一道題目為一列儿礼,稱為變量(variable)。這里把英文給出來(lái)也是為了跟RStudio的界面對(duì)應(yīng)上庆寺,方便讀者前后聯(lián)系蚊夫。完成數(shù)據(jù)錄入之后,圖1部分的社會(huì)網(wǎng)絡(luò)數(shù)據(jù)長(zhǎng)這個(gè)樣子:

圖2


這里你會(huì)發(fā)現(xiàn)做了一個(gè)降維的處理懦尝。圖1中原始的問(wèn)卷是一個(gè)二維表格的形式知纷,一個(gè)維度是朋友的名字,另一個(gè)維度是各種關(guān)系屬性导披。降維的話一般就是兩種屈扎,一種是按行降維,一種是按列降維撩匕。我們這里就是按行降維鹰晨,D101-D108對(duì)應(yīng)圖1第一行的八個(gè)名字,D201-208對(duì)應(yīng)圖1第二行朋友的性別,以此類推模蜡。按行降維和按列降維都可以漠趁,方法也是一樣的,相信你看懂了按行降維的方法忍疾,按列降維自然就會(huì)了闯传。因?yàn)檫@里的問(wèn)卷設(shè)置,被試并不需要填滿8個(gè)名字卤妒。例如圖2中紅色方框所示甥绿,被試只填寫的前三個(gè)名字,那么相應(yīng)的则披,后面的題目也都是三個(gè)值共缕。這個(gè)也可以用來(lái)判斷錄入是否有誤。

數(shù)據(jù)錄入完成之后就可以開(kāi)始今天的正題了——生成鄰接矩陣

這里為了照顧到更多的讀者我會(huì)把基礎(chǔ)的操作也寫出來(lái)士复,大神請(qǐng)略過(guò)图谷。

STEP 1:讀入數(shù)據(jù)

我們需要把數(shù)據(jù)讀入到R中去,如圖3所示:我的數(shù)據(jù)是csv格式的阱洪,所以就用read.csv()函數(shù)便贵。成功讀入之后,在右上角的環(huán)境(environment)窗口中就會(huì)顯示你所命名的對(duì)象冗荸,并顯示其所包含的觀測(cè)數(shù)和變量數(shù)承璃。由于我這里展示的數(shù)據(jù)是分多個(gè)文件保存的,所以每一個(gè)文件都需要讀取并命名蚌本。同樣格式的數(shù)據(jù)也可以合并绸硕,這個(gè)可以根據(jù)具體的分析需要來(lái)選擇,各有利弊魂毁。讀入文件的時(shí)候要注意以下三點(diǎn)。第一文件名要用引號(hào)引起來(lái)并且?guī)虾缶Y名出嘹。第二RStudio的工作路徑和數(shù)據(jù)文件的存儲(chǔ)路徑一致時(shí)引號(hào)內(nèi)只用寫文件名席楚,查看工作路徑的函數(shù)為getwd(),此函數(shù)不用填寫任何參數(shù)税稼;或者在RStudio界面左下角控制臺(tái)窗口的頂端查看烦秩。第三如果第二點(diǎn)不滿足,有兩種處理方式郎仆,一種是將當(dāng)前工作路徑設(shè)置為數(shù)據(jù)文件的保存路徑只祠,代碼為setwd("D:/社會(huì)網(wǎng)絡(luò)分析R語(yǔ)言實(shí)戰(zhàn)之生成鄰接矩陣"),引號(hào)內(nèi)為數(shù)據(jù)文件實(shí)際的存儲(chǔ)路徑扰肌,這里要注意的是RStudio使用的是右上至左下斜杠抛寝,windows使用的則是左上至右下斜杠,使用時(shí)注意區(qū)分;另一種處理方式是在文件名前面加上路徑盗舰。

圖3


STEP 2:安裝并加載所需程序包

我們需要安裝并加載所需要的包(package)晶府,如圖4所示。安裝是一勞永逸的钻趋,如果你之前安裝過(guò)川陆,則無(wú)需再安裝了÷唬可以通過(guò)右下角package窗口的搜索欄進(jìn)行搜索较沪,所安裝的包都會(huì)羅列在package窗口,如果能搜索到失仁,證明已經(jīng)安裝過(guò)了尸曼。但是加載包則不一樣,每次重新打開(kāi)RStudio都需要重新加載陶因。生成鄰接矩陣需要的包就只有dylyr一個(gè)骡苞。代碼及注釋圖中都有,我就不再贅述楷扬。

圖4


STEP 3:生成鄰接表

接下來(lái)我們需要把社會(huì)網(wǎng)絡(luò)部分按照關(guān)系發(fā)出者(sender)一列關(guān)系接收者(receiver)一列的格式(我把它叫做鄰接表)提取出來(lái)解幽,如圖5所示。第一個(gè)方框內(nèi)的代碼是提取網(wǎng)絡(luò)部分的數(shù)據(jù)烘苹,數(shù)字表示第幾列躲株。被試,也就是關(guān)系發(fā)出者的姓名存在第4列镣衡;76-80對(duì)應(yīng)圖2中的D101-D105霜定,84-88對(duì)應(yīng)圖2中的D201-D205,以此類推廊鸥。這里并沒(méi)有提取全部的八個(gè)好友望浩,而是只提取了班內(nèi)的好友。第二個(gè)方框內(nèi)的代碼是將五個(gè)對(duì)象(提名1-提名5)的列名統(tǒng)一惰说,否則無(wú)法成功運(yùn)行下一個(gè)方框內(nèi)合并的代碼磨德。考慮到不是每個(gè)人都把五個(gè)名字寫滿了吆视,最后一個(gè)方框內(nèi)的代碼刪掉了那些沒(méi)提名的情況典挑。

圖5


STEP 4:生成鄰接矩陣

有了鄰接表我們就可以將其轉(zhuǎn)換為鄰接矩陣了,如圖6所示啦吧。第56和57兩行代碼會(huì)在原來(lái)的對(duì)象“T1CLASS13”上增加一列新的變量您觉,變量名為“Name_order”,內(nèi)容是對(duì)名字排序之后的數(shù)字授滓。對(duì)象“T1CLASS13”中存放被試姓名的那一列列名為“姓名”琳水。因?yàn)楹竺娴挠?jì)算不能用姓名直接計(jì)算肆糕,而需要給每一個(gè)人編一個(gè)號(hào)。比如現(xiàn)在有50個(gè)人炫刷,那么就從1排到50擎宝。第60行做了一個(gè)命名,目的是簡(jiǎn)化63和64兩行代碼里的參數(shù)浑玛。63和64兩行代碼在對(duì)象“提名_all”上新增了兩列變量绍申,分別叫做“from_order”和“to_order”,變量?jī)?nèi)容為名字對(duì)應(yīng)的編號(hào)。第65行增加了一列名為“tie”的變量顾彰,內(nèi)容全為1极阅。第66行則是把對(duì)象“提名_all”的第9到11列賦值給新的對(duì)象“提名_all.copy”。67行是刪掉缺失值的行涨享。68行是做了一個(gè)數(shù)據(jù)格式的轉(zhuǎn)換筋搏,變成矩陣。69行則是創(chuàng)建了一個(gè)新的矩陣厕隧,名為adj奔脐,行數(shù)和列數(shù)都為班級(jí)人數(shù),元素則都為0吁讨。70行是把對(duì)象“提名_all.copy”中第3列的值按照其1髓迎、2列的坐標(biāo)賦值給對(duì)象“adj”。71行是將adj以txt文件輸出建丧,文件名為T1CLASS13friend.txt排龄。

圖6

最后,如果有寫的不清楚的地方翎朱,敬請(qǐng)留言批評(píng)指正橄维。關(guān)于社會(huì)網(wǎng)絡(luò)分析有其他問(wèn)題的也歡迎留言,共性問(wèn)題我會(huì)在下一篇文章中詳細(xì)解答拴曲。

你的支持是我碼字的不竭動(dòng)力争舞,謝謝!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末澈灼,一起剝皮案震驚了整個(gè)濱河市兑障,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蕉汪,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,695評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件逞怨,死亡現(xiàn)場(chǎng)離奇詭異者疤,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)叠赦,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,569評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門驹马,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)革砸,“玉大人,你說(shuō)我怎么就攤上這事糯累∷憷” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 168,130評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵泳姐,是天一觀的道長(zhǎng)效拭。 經(jīng)常有香客問(wèn)我,道長(zhǎng)胖秒,這世上最難降的妖魔是什么缎患? 我笑而不...
    開(kāi)封第一講書人閱讀 59,648評(píng)論 1 297
  • 正文 為了忘掉前任,我火速辦了婚禮阎肝,結(jié)果婚禮上挤渔,老公的妹妹穿的比我還像新娘。我一直安慰自己风题,他們只是感情好判导,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,655評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著沛硅,像睡著了一般眼刃。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上稽鞭,一...
    開(kāi)封第一講書人閱讀 52,268評(píng)論 1 309
  • 那天鸟整,我揣著相機(jī)與錄音,去河邊找鬼朦蕴。 笑死篮条,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的吩抓。 我是一名探鬼主播涉茧,決...
    沈念sama閱讀 40,835評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼疹娶!你這毒婦竟也來(lái)了伴栓?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 39,740評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤雨饺,失蹤者是張志新(化名)和其女友劉穎钳垮,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體额港,經(jīng)...
    沈念sama閱讀 46,286評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡饺窿,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,375評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了移斩。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片肚医。...
    茶點(diǎn)故事閱讀 40,505評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡绢馍,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出肠套,到底是詐尸還是另有隱情舰涌,我是刑警寧澤,帶...
    沈念sama閱讀 36,185評(píng)論 5 350
  • 正文 年R本政府宣布你稚,位于F島的核電站瓷耙,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏入宦。R本人自食惡果不足惜哺徊,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,873評(píng)論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望乾闰。 院中可真熱鬧落追,春花似錦、人聲如沸涯肩。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 32,357評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)病苗。三九已至疗垛,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間硫朦,已是汗流浹背贷腕。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,466評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留咬展,地道東北人泽裳。 一個(gè)月前我還...
    沈念sama閱讀 48,921評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像破婆,于是被迫代替她去往敵國(guó)和親涮总。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,515評(píng)論 2 359