当前位置:文档之家› 基于R语言的社会网络分析

基于R语言的社会网络分析

基于R语言的社交网络分析胡志健 ( 东华大学信息科学与技术学院, 上海201620)摘要:随着互联网技术的快速发展,以及智能移动设备的普及,我们生活在了一个数据快速增长的年代。

每天都有来自商业、科学、社交、工业生产等各个不同领域数据存储于计算机网络中。

存储技术的不断改进,加上批量化设备生产,使得数据的存储成本大大降低,海量数据的挖掘与应用的大数据时代正逐步向我们走来。

在互联网上,用户量最大的无疑是社交网络。

网民可以在如新浪、腾讯、人人网等国内社交网络上快速发布、分享、评论信息。

海量的信息存在于网络中,为数据挖掘提供了前提条件。

本文借助R语言与Python脚本从人人网获取好友列表,借助igraph工具包对作者的好友分布做可视化分析,绘制了好友关系拓扑图,找到了中介度最高人。

关键字:数据挖掘,社交网络,R,Python,可视化分析A social network’s analysis based on R languageAbstract:With the rapid development of Internet technology, and the wide spread of smart mobile devices, we are living in an era of large amounts of data increases rapidly. Every day, from business, science, social, industrial production and other data of various fields stored in computer network. With the continuous improvement of storage technology, and the production of batch equipment, the storage cost of data is greatly reduced, and the data mining and application of large data era is gradually coming to us.On the Internet, the biggest user is undoubtedly social networks. Internet users can quickly publish, share and comment on social networks such as Sina, Tencent, and Renren. The vast amount of information exists in the network, which provides the premise for data mining. With the help of R language and python scripts, I get buddy list from Renren. Using igraph kit to do the visual analysis of author's friends distribution, render the friend relationship with topological graph, and find the intermediary of the supreme.Keywords: data mining,social network,R,Python,visual analysis近年来,随着网络的普及,我国互联网行业有了很大的发展,尤其是移动互联网,出现了爆发式的发展。

网络世界里发生着巨大的变化,不管是网民的规模、上网的方式,还是上网目的等方面。

尤其是最近四五年,互联网行业似乎总是绕不开社交网络这个概念。

无论是国外或是国内,Facebook、Twitter、微博、QQ、人人网等,还是如雨后春笋般冒出来的各大在线购物网站,或多或少地体现着SNS(社交网络服务)的特色。

在丰富人们日常生活的同时,也为广大的科研人员提供了海量的数据。

以往只能通过有限的调研如问卷或模拟才能进行的社会网络分析(SNA),现在却具备了大规模开展和实施的条件。

本文基于国内典型SNS网站“人人网”的好友数据,借助统计分析语言R语言做了社交网络分析的一些尝试。

一、获取数据1.Python脚本数据分析与挖掘的第一步,便是获取数据。

得益于人人网的开放平台,借助Python脚本实现自动读取人人网好友信息(ID、姓名)并保存。

人人开放平台使用OAuth 2.0作为验证与授权协议。

OAuth是一个开放标准,允许第三方应用在用户授权的情况下访问其在网站上存储的信息资源(如照片、视频、好友列表),而这一过程中网站无需将用户的账号密码告诉给第三方应用。

为了获取人人好友列表,需要借助脚本模拟登陆读取网页数据。

# Python 读取好友列表代码:def get_list(uid):pagenum = 0print u"开始解析好友列表"os.remove(str(uid)+".txt")ffi = open(str(uid)+".txt",'a')s = str("id"+""+"name"+'\n')ffi.write(s)while True:page = "/GetFriendList.do?curpage=" + str(pagenum) + "&id=" + str(uid) res = urllib2.urlopen(page)html = res.read()pattern = '<a href="http://www\.renren\.com/profile\.do\?id=(\d+)"><img src="[\S]*" alt="[\S]*[\s]\((.*)\)" />'m = re.findall(pattern, html)#查找目标if len(m) == 0:break#不存在for i in range(0, len(m)):userid = m[i][0]uname = m[i][1]try:s = str(userid+""+ uname.replace("","")+'\n')except:s = str(userid+"" + uname.replace("","")+'\n')ffi.write(s)pagenum += 1ffi.close()print u"好友列表分析完毕."2. 数据预处理得到数据后需进行预处理去除ID与姓名以外的其他记录,数据格式如下表1所示:二、数据分析本文分析的焦点在于作者的好友之间形成的网络,因此考虑做网络图来直观展示网络的结构。

借助脚本读取我的好友,以及每一位好友的好友列表。

首先,从文件中读取数据,在数据集中筛选出希望分析的子集。

这个子集包括两个条件:(1)网络中没有作者自己;(2)网络中的用户都是作者自己的好友。

#筛选数据部分R代码:mfrd <-read.table("myfriends.txt",head=T)#依次读取各个好友列表,求出好友关系图mfid <-mfrd[,1]file.remove("reldat.txt")for(i in (1:length(mfid))){mffrd = read.table(paste(as.character(mfid[i]),".txt",sep=""),head=T)ffidx = mffrd[,1] #Bcrel = intersect(mfid,ffidx) #Ccidx = rep(mfid[i],length(crel))# 写入好友关系数据信息到reldat.txt文件x = cbind(cidx,crel)m=x[,1]>x[,2];z=x[,1];x[m,1]=x[m,2];x[m,2]=z[m];unique(x)write.table(x,file="reldat.txt",append=T,quote = F,sep="\t",s=F,s=F) }三、图像生成社交网络分析时,对象之间的关系错综复杂。

社交网络分析时涉及图论知识,本文借助igraph包实现。

igraoh是一个建立和操纵无向图、有向图的开源C程序库,它既包括经典图论中的各种算法(例如最小支撑数、网络流等),也包括了最近出现的一些诸如社团结构搜索等网络分析方法。

考虑用igraph 软件包绘制网络图时,需要两大元素点与联系。

首先是网络中点数据,也就是社交网络中人物,其次是人与人之间的关系。

如何提取作者的好友之间的关系呢?首先,每个好友都有自己的好友信息,包括ID与姓名,而作者也有好友信息。

只需要筛选出作者的好友A与好友的好友B之间的交集,即为共同好友:C=AB需要注意的是人人网中不可避免地出现同名用户的情况,因此ID才是用户的唯一标识。

提取后好友关系可以用如下表2格式保存:不过这样会带来一个问题,假设ID为id1与id2为好友,则数据表示为:1idid→2在查找id2好友关系时,必然会出现如下记录:id→2id1所以需要借助如下R命令去重:m=x[,1]>x[,2];z=x[,1];x[m,1]=x[m,2];x[m,2]=z[m];unique(x) 然后就可以直接利用igraph包得作图功能绘制作者好友关系拓扑图,如下图1所示:图(1)好友关系拓扑图四、数据挖掘与信息提取信息的分类和过滤是社交网络服务的一项重要特征。

例如人人网对好友关系有一套自己的分类方式,用户可以自行对好友进行分组,从而对信息的收发做分组管理。

但是作为用户却未必能够养成并保持这种分组的习惯。

与此同时我们揣测,作为真实关系的线上反映,人人网的好友网络是能够自动呈现出一定的人群分割的,而在社会网络分析中,对网络成分的分析也确实是一项重点。

相关主题