基于数据挖掘的校园社交网络用户行为分析
1 绪论
1.1 选题背景
社交网络,简称SNS (social network service ),在Web 2.0浪潮中已发展为社会化媒体中一个主要平台。据最新的中国互联网络信息中心(CNNIC)2013年1月15 日发布的第31次《中国互联网络发展状况统计报告》,截至2012年12月底,我国网民规模达5.64亿,互联网普及率为42.1%,较2011年底提升3.8个百分点。同时报告显示,社交网络应用持续呈现增长趋势,截止2012年12月,国内社交网络用户总数已达2.75亿,占到了全部网民人数的48.8%,增速保持在10%以上。
与此同时在2010年之后社交网络又出现两大新增长点:其一微博用户持续增长,微博用户规模在2012年达到3.09亿,较2011年底增长了5873万。虽然微博急速扩张的阶段已经结束,但年增幅仍能达到23.5%;其二用户逐渐移动化成为了社交网络用户增长的又一亮点,截至2012年12月底,我国手机网民规模为4.2亿,较上年底增加约6440万人,网民中使用手机上网的人群占比由上年底的69.3%提升至74.5%,随着手机智能化,相当一部分用户访问和发送微博的行为发生在手机终端上,为社交网站的进一步发展提供了可能。此外“社交化”已经作为一种重要的功能元素,正在全面融合到各类互联网应用中。一方面,2012年涌现出大批具备社交基因的新应用,包括图片社交、私密社交、购物分享等,尤其在移动互联网领域,由于手机天生的通讯功能,2012年许多热门移动应用都具备社交功能;另一方面,搜索、网购、媒体等互联网应用正在融合社交因素,以丰富自身的功能、提升用户体验,创新服务和盈利模式。在整个互联网都走向社交化的大趋势下,传统的实名制社交网站也不断增加平台功能,在原有网站
基础上融入以上新型的社交功能组件,尤其是将业务发展重点转向移动终端,进而带动了2012年社交网站用户增长,同时也为社交网络的进一步发展提供无限可能。
现行网络中较为成熟和流行的社交网站有国外的Facebook ,twitter ,Google+,Plurk ,Flickr ,Linked —in 等,而国内也不乏人人网、开心网、豆瓣、新浪微博、腾讯微博等社交网络应用或网站。社交网站具有巨大的用户群和访问量,并早已成为网络上极其重要的组成部分。其中Facebook 每月活跃人士已超过7.5亿,根据股价估值也已接近千亿级别,已经成为互联网新巨头之一。而在国内的SNS 中,人人网注册人数也已经超过1.6亿,活跃用户也超过了一半,国内互联网巨头阿里巴巴更是出资5.86亿美元购得新浪微博18%股份,表现了其对社交网络发展的看好[2]。来自市场研究机构eMarketer 的最新数据显示:在2012年,全球超过14亿人使用社交网络,比2011年增加了19%。
图1-1 社交网站发展时间表
1.2 研究意义
社交网络的流行不仅带来了信息传播技术的革命性变革,并且一步步改变着人们的生活方式、思维方式等,对于社交网络的研究也不断深入。但目前对于社交网络的主体——网络用户的行为研究仍然比较冷门,主要研究都偏向于网络用户行为研究,很少有专门对于社交网络用户行为的分析化。目前,社会科学对网络行为的研究,主要集中在以下议题: ● 作为行为场域的网络空间的社会特性
● 网络行为及其影响因素
虽然以上研究都已比较深入,但大多的都从社会学角度切入研究宏观 网络用户行为,内容与社交网络契合较少并偏向理论化,方法也大多采用问卷调查等主观性较强的方式,很少有通过技术手段采集客观数据并通过软件分析等方式进行研究的文献。而本文则通过网络爬虫采集相关数据,并通过数据分析软件Weka 对采集数据进行数据挖掘,通过数据寻找社交网络用户行为及其影响因素,可以说是从一个比较新颖的角度分析了社交网络用户行为。如果能够有效的提取社交网络中的各种数据并对用户行为、群体特征等进行分析,掌握用户的行为模式及其影响因素,不仅能够帮助网站运营商全面掌握用户需求从而提供更好的服务和产品,还能够帮助营销商更好地了解受众群体和信息传播模式进而采取更有效的网络营销和推广手段。
1.3 论文主要研究内容及组织结构
1.3.1主要研究内容
本论文研究内容主要包括一下三个方面:
● 社交网络及社交网络用户行为
该部分主要是为最终通过分析软件对社交网络用户行为进行总结做好
理论基础准备。主要对社交网络概念产生、发展过程进行阐述。并对社交网络更加具有WEB2.0时代的特点进行描述。最后对一般社交网络用户行为动机进行分析。
● 数据挖掘中的聚类分析
这一部分主要对数据挖掘的聚类分析的定义、分析过程以及主要分析 手段进行描述,并分析各聚类方法优缺点,最后通过根据收集所得数据特征选取合适的聚类分析方法
● 数据采集技术——网络爬虫
该部分主要确定所要爬取的网页内容,并根据网站HTTP 协议与网页 行为特征制定定向网页爬虫方案,然后通过python 语言实行具体编码。编码过程主要分为两步,首先通过使用Wireshark 抓包后使用python 中的urlllib 库构造目标网站可识别HTTP 协议,然后通过设计正则表达式进行数据提取。
1.3.2论文组织结构
论文第二章主要讨论了社交网络定义与特点,并对一般社交网络用户行为动机进行分析。同时对数据挖掘中的聚类分析定义、过程以及主要方法进行描述,阐明了本文所涉及的理论基础。
论文第三章对于如何通过网络爬虫技术进行数据采集进行了说明。首先介绍了网络爬虫技术的原理与URL 存在形态,然后分析了如何制定定向网络爬虫,最后说明了本次网络爬虫程序编码所解决的难题与部分具体代码。
论文第四章对所收集数据进行预处理,并通过Weka 数据挖掘软件对数据进行聚类分析,并对所获结果做出解释。
论文最后对整个研究过程进行总结并分析了所存在的不足之处以及对未来进一步研究的展望。
2 关键技术和理论基础综述
2.1 社交网络
2.1.1 社交网络的概念
社交网络一词最早是1954年由J. A. Barnes 首先使用。一个社交网络的大小最大约为150人左右 (Dunbar's number ) [3],平均大小约为124人左右 (Hill and Dunbar, 2002), 它是指社会行动者及其间关系的集合,在上世纪90年代之前这一词语主要在管理学、社会学等领域应用。
但是随着互联网的发展以及六度空间理论和邓巴数字等理论的兴起[4],社交网络逐渐被赋予了新的定义,首先出现的是网络社交。网络社交是伴随着电子邮件的出现产生的,它解决了信息点对点的传送。而BBS 则把网络社交又向前推进了一步:从单纯的点对点交流的成本降低,推进到了点对面交流成本的降低。随后产生的即时通信(IM )和博客(Blog )更像是前面两个社交工具的升级版本,前者提高了即时效果(传输速度)和同时交流能力(并行处理);后者则开始体现社会学和心理学的理论——信息发布节点开始体现越来越强的个体意识,因为在时间维度上的分散信息开始可以被聚合,进而成为信息发布节点的“形象”和“性格”,随着网络社交的悄悄演进,一个人在网络上的形象更加趋于完整,这时候符合我们现在定义的社交网络出现了。
现在社交网络也被称作社交网络服务(Social Network Service ) ,简称SNS ,也就是社交+网络+应用服务的意思[5]。它通过网络这一载体把人们连接起来,从而形成具有某一特点的团体。社交网络含义包括硬件、软件、服务及应用,狭义上讲它是指建立在真实人际关系基础上的网络平台,是作为现实中的社会团体在互联网上交流的辅助工具而存在,是现实活动的
在线拓展,与传统的虚拟网络有很大的不同。从这个定义上讲,符合“真实人际关系及其衍生”的SNS 主要有Facebook ,Linked —In .Google+以及国内的人人网、开心网等。广义上,一般会把微博、空间、社交网站等都称为“社交网络”,如图2—1所示.这其中包括了一些完全虚拟网络,如微博、Flicker 等.它们脱离社会现实,结构相对无序、混乱。而狭义上的社交网络,如Facebook ,是现实人际网络的子集及其衍生,具有现实生活中人际网络特征,同时国内大多数媒体所指的SNS 也一般即为社交网站(Social Network Sites),而并非社会性网络服务(Social Networking Services )。基于如此本文对社交网络的研究是基于狭义上的社交网络.将选取国内的社交网络服务网站人人网为数据来源。
图2-1 基于人际关系的社交网站分类
2.1.2 社交网络特点
与传统网络类型相比,在WEB2.0时代发展起来的社交网络主要呈现出以下特点:
● 人际传播回归和社交网络关系化
正如“电话代替不了握手”一样,网络上具有时并不能带来人们内心的亲切感和信任感。为避免网络这种上具性特征带来的弊端,社交网络正在向人际传播回归,它以现实社会关系为基础,模拟或重建现实社会的人际关系网络。来提高社会交往的质量和效度。
● 以用户为中心
这也是web2.0的特征,那些过去被轻视、被忽略的“微内容”、“微价值”由于新的聚合力量而显得格外强大。社交网络的UGC(用户生成内容) 力量是惊人的,它使得每个人都有一种参与感,让每个人都可以创造自己的媒体。
● 虚拟社交与真实社交的融合
社交网络已经弱化了早期网络社区那种娱乐和游戏功能,每个用户都只有一个身份识别,只有紧贴这个身份才能使用和拓展其他功能,它鼓励用户以真实身份、形象加入网络群体,保持线上线下身份一致性,以此来构建社会化的关系服务网络
● 私人空间与公共空间的有机结合
如果说传统的BBS 是一个公共场所,而博客又是一个相对单纯的私人空间, 社交网络则是两者的有机结合,让用户对社区有归属感、认同感的同时又能够置身于社会公共网络中。
2.1.3 社交网络用户行为动机
● 维持人际关系
和传统网络媒体不同的是用户使用社交网络最主要的原因是为了维持人际关系。而在2000年Papacharissl 和Rubin 做出的关于网络总体使用动机的调查中[6],维持人际关系是最次要的动机。之所以会出现如此大的反差,这也是由于SNS 的真实性造成的。这也意味着更多的人们开始习惯于使用网络来维持和加强现实生活中的一部分人际关系,表明了SNS 在现实生活中的重要性。
● 参与互动,信息分享
网络互动包括了和朋友或者和陌生网友之间的一切互动行为。用户对别人发的帖子,上传的照片或者别的动态发表评论和意见,或者接受别人对自己发表内容的反馈。除此以外,信息分享成为社交网站用户的主要动机也反映了科技给媒体行为带来的变化。以人和的关系为基础而建立的社交网站,使信息的分享变得更加容易和自然,从而便利了用户之间的分享和交流。
● 娱乐消遣
娱乐消遣一直以来都是用户使用媒体的主要动机,而对于社交网站用户来说,也是仅此于人际关系维持的第二大动机。玩SNS 网站上的网页游戏也是不少人每天登陆社交网站的动力。在这一分类中,娱乐消遣既是行为,也是动机。
2.1.4 社交网络主要研究方向
目前社交网络主要有四个研究方向,本文主要关心社交网络挖掘技术的发展
● 基础结构研究
社交网络不同于普通的基础网络,是建立在真实人际关系基础上的,因此对网络的结构特点进行研究对于进一步推动网络的发展具有非常重要
的意义。结构研究既包括简单的基础构造研究,例也包括异常复杂的特殊结构研究,主要包括度数中心性(Degree Centrality),亲近中心性
(Closeness Centrality)和中介中心性(Betweenness Centrality)等等[7]。
● 多层次关系的社区挖掘
研究表明,在多层次社交网络的社区中。对于一种特定的需求下,不同的关系所产生的影响因子往往是不同的。所以应该根据特定的需求,对不同的关系进行线形组合,然后在此基础上计算影响因子并进行社区挖掘。这个研究方向的重要意义在于传统的、单一的网络并不能反映现实中真实的人际关系,而采用多层,立体的网络结构建模使得数学模型更精确,更贴近真实人际网络,能得到更为客观有效的社区挖掘结果[8]。
● 大规模网络的社区识别
随着社交网络的发展,网络节点数已达到千万甚至上亿级别,传统CNM 算法的局限性就越发明显。所以最近几年,有不少学者关注于大规模网络的社区挖掘技术,具有代表性算法如日本学者Ken Wakita和Toshiyuki Tsurumi 所提出的KT 识别技术[9]。
● 网络挖掘技术
在社交网络的理论研究中,另外一个重要的课题是挖掘技术的研究,挖掘技术的研究在语义网的研究中扮演了越来越重要的角色。例如知识管理、 信息抽取、普氏计算等等。这个领域的研究大部分是利用搜索引擎来挖掘人际网络关系,最新的代表性技术是一种叫做POLYPHONET 的社交网络抽取分析算法,该算法引入了一序列关于人际关系的识别,社区的挖掘,以及个人关键词挖掘等先进技术。目前,该领域的研究者主要关注如下两方面的问题,一是如何简化现有信息相关度的算法以使得整个衡量系统更易于整合,二是如何改进节点间的关系衡量算法,来加强对一些特定关系的衡量,例如个人和关键词相关度的计算,不同人际关系的分类等等[10]。
2.2 网络用户行为
2.2.1网络用户行为研究现状
目前对于网络用户行为的研究主要集中于两方面:
一是对网民的网络使用行为,包括网络使用方式、时间、频率、地点等进行实证调查与定量研究。对此国内外都已进行了不少大规模调查,这类调查一般都将重点倾向于网民的网络使用习惯、倾向、网龄、上网频率、上网时间、上网动机等问题上。美国加州大学洛杉矶分校就于2000起启动了世界互联网项目(World Internet Project), 通过对不同国家和地区网民的网络使用状况进行调查,从而对各国互联网的社会影响进行评估,其中子项目“中国互联网项目”由中国社科院进行调查,并连续多年发布相关报告。在国内,中国互联网信息中心自97年起针对我国互联网的宏观状况、网民行为意识等每年发布两次统计报告。
二是对网民的行为模式、行为类型与行为逻辑进行实证调查与理论分析。目前研究还是比较偏向于理论上的梳理与分析。在研究视角上基本延续了社会学的两种传统视角,或者将解释的焦点放在个人行为对社会结构的构建上,或者将解释的焦点放在社会结构对个人行为的制约上, 主要分析的还是网络用户行为与人们在日常社会生活中的行为之间的区别,然后从这种区别中入手分析网络行为的实质与特征[12]。
2.2.2本文对社交网络用户行为的定义
本文对于社交网络用户行为的定义主要是指用户对于社交网站基本功能与用户生成内容(User Generated Content,简称UGC )的使用方式。主
要包括网站访问、用户间互动交流、信息发布与分享、以及APP 娱乐应用等,如图2-2所示:
图2-2 社交网络主要用户行为
2.3 聚类分析
2.3.1聚类定义
特征聚类分析研究有很长的历史,其重要性及与其他研究方向的交叉特性多年来一直受到得到人们的肯定。聚类是数据挖掘、模式识别等研究方向的重要研究内容之一,在识别数据的内在结构方面具有极其重要的作用。聚类主要应用于模式识别中的语音识别、字符识别等,机器学习中的聚类算法应用于图像分割和机器视觉,图像处理中聚类用于数据压缩和信息检索。聚类的另一个主要应用是数据挖掘(多关系数据挖掘) 、时空数据库应用(GIS等) 、序列和异类数据分析等。此外,聚类还应用于统计科学。
值得一提的是, 聚类分析对生物学、心理学、考古学、地质学、地理学以及市场营销等研究也都有重要作用[13]。
从宏观上讲聚类是将物理或抽象对象的集合分成由类似的对象组成的多个类的过程。由聚类所生成的簇是一组数据对象的集合,这些对象与同一个簇中的对象彼此相似,与其他簇中的对象相异。但目前对于聚类并无一个学术上的统一定义,这里使用出Everitt 在1974年关于聚类所下的定义:一个类簇内的实体是相似的,不同类簇的实体是不相似的;一个类簇是测试空间中点的会聚,同一类簇的任意两个点间的距离小于不同类簇的任意两个点间的距离;类簇可以描述为一个包含密度相对较高的点集的多维空间中的连通区域,它们借助包含密度相对较低的点集的区域与其他区域(类簇) 相分离[14]。
2.3.2聚类分析过程
● 数据准备:包括特征标准化和降维
● 特征选择:从最初的特征中选择最有效的特征, 并将其存储于向量中。
● 特征提取:通过对所选择的特征进行转换形成新的突出特征 ● 聚类:首先选择合适特征类型的某种距离函数(或构造新的距离函数)进行接近程度的度量而后执行聚类
● 聚类结果评估:是指对聚类结果进行评估。评估主要分为外部有效。 ● 性评估、内部有效性评估和相关性测试评估
2.3.3主要聚类分析方法
由于多维数据集的复杂性,要求有不同的聚类方法对各种复杂数据类型进行分析。目前主要的聚类分析方法有以下几种:
● 划分式聚类(partitioning methods)
划分式聚类需要预先指定聚类数目或聚类中心,通过反复迭代运算,逐步降低目标函数的误差值,当目标函数值收敛时,得到最终聚类结果。使用这个基本思想的算法有:K-MEANS 算法、K-MEDOIDS 算法、模糊聚类算法以及图论算法[15]
● 层次方法(hierarchical methods)
这种方法对给定的数据集进行层次似的分解,直到某种条件满足为止。具体又可分为“自底向上”和“自顶向下”两种方案。例如在“自底向上”方案中,初始时每 一个数据纪录都组成一个单独的组,在接下来的迭代中,它把那些相互邻近的组合并成一个组,直到所有的记录组成一个分组或者某个条件满足为止。代表算法 有:BIRCH 算法、CURE 算法、CHAMELEON 算法等[16]
● 基于密度的方法(density-based methods)
基于密度的方法与其它方法的一个根本区别是:它不是基于各种各样的距离的,而是基于密度的。这样就能克服基于距离的算法只能发现“类圆形”的聚类的缺点。这个方法的指导思想就是,只要一个区域中的点的密度大过某个阀值,就把它加到与之相近的聚类中去。代表算法有:DBSCAN 算法、OPTICS 算法、DENCLUE 算法等
● 基于网格的方法(grid-based methods)
这种方法首先将数据空间划分成为有限个单元(cell )的网格结构, 所有的处理都是以单个的单元为对象的。这么处理的一个突出的优点就是处
理速度很快,通常这是与目标数据库中记录的个数无关的,它只与把数据空间分为多少个单元有关。代表算法有:STING 算法、CLIQUE 算法、WAVE-CLUSTER 算法
基于模型的方法(model-based methods)
基于模型的方法给每一个聚类假定一个模型,然后去寻找能够很好的满足这个模型的数据集。这样一个模型可能是数据点在空间中的密度分布函数或者其它。它的一个潜在的假定就是:目标数据集是由一系列的概率分布所决定的。通常有两种尝试方向:统计的方案和神经网络的方案[17]。
2.4 技术方法框架
本文以数据挖掘的交叉产业标准过程(CRISP.DM)作为参考[18],结合具体的社交网站数据挖掘需求,构建如下图技术方法框架:
图2-3 社交网络用户行为数据挖掘过程
3 基于网络爬虫技术的数据采集
3.1 网络爬虫工作原理
3.1.1 网络爬虫基本工作原理
网络爬虫,即Spider , 通常是指遵循HTTP 协议、根据其中的超链接以及WEB 页面文档之间的索引关系来遍历万维网信息空间的软件程序。网络爬虫是一个功能强大的自动提取网页的程序,负责收集页面来源。网络爬虫通过访问某一URL 页面,来获得此页面内其他URL ,并且根据这些URL 来遍历这个站点或者跳转到其他站点,从而实现遍历整个互联网空间,进而获得需要的URL 集合。其主要工作原理如下图所示[19]:
图3-1 网络爬虫基本原理
如上所述,常见的搜索引擎类网络爬虫负责收集互联网世界的所有页面并且存储下来。除了以上通用爬虫之外,还有一些定向爬虫负责在一些
细分领域收集特定信息。
3.1.2 URL存在形态分析
从联系的角度来看,互联网上的URL 可分为有联系的和孤立的2类,如下图所示:
图3-2 互联网URL 分类
大部分的URL 都是相互关联的,比如从url-a 出发,通过url-b 、url-d 可到达 url-f,所有关联的URL 最后组成了一个复杂的网络结构。但是也存在一些URL ,比如url-1、url-2等是相对孤立的,试图从url-a 系列以及url-1等页面直接来获得另外url-2、url-3是不可能的。
从URL 的出现位置来可看, 我们可将URL 的出现位置分为如下几类: HTML 静态标签
HTML 静态页面中存在大量URL 入口,比如某页面存在A 标签:
小白无双 , 通过解析A 标签的结构,我们知道这里存在一个新的url 链接http://www.renren.com 类似的标签还有:
......
因为这些链接是静止在页面内,属于比较容易发现的链接类型。在页面下载回来后,我们甚至可简单地通过正则表达式查找出这些链接。
动态生成的链接
这里说的动态生成的链接是指通过javasript/vbscript生成的链接,它们需要通过script 脚本解释引擎来组装生成,如下伪代码:
图3-3 script脚本动态生成链接代码
从这段伪代码中,我们无法直接看出来存在什么链接,分析代码可知,变量URL 由3个部分组成,path 、page 还有用户输入的id
值。明显地,要知
道最后的URL ,需要在输入框里输入数据并且触发这个函数执行。
● 用户交互中产生的新链接
HTTP 协议是请求-响应式的交互型模型,在WEB 2.0时代又在这一模型上深入发展,请求响应的形式更加多样化。云计算所使用的技术也大量使用了WEB 2.0技术,ajax 数据请求方式被广泛使用,json 、xml 等格式的数据传递给爬虫的URL 发现带来了困难。比如:在json 的任意一个位置,都可能是一个URL ,也可能看着像是URL ,实际上只是一个不存在的URL 字符串。为了确认其是否为URL ,需要观察其行为表现,这些数据从服务端返回后,客户端实际去访问的URL 字符串才是爬虫真正需要寻找的目标。
● 存在于第三方组件里的URL
在flash 、silverlight 等其他第三方组件里也存在URL 链接,这些链接的生成需要对应的组件来解释。在flash 应用中,我们点击某些按钮时,会触发一些新的网络请求,这些请求是通过内嵌的ActionScript 来驱动的。silverlight 以及一些其他第三方组件也是类似。
3.2 定向爬虫定制
本文以人人网数据为具体案例进行分析,因而需要对人人网特定数据进行抓取。通过定制人人网定向型爬虫,抓取指定网站上的数据。
3.2.1通过wireshark 抓包法分析HTTP 协议
Wireshark (前称Ethereal )是一个网络封包分析软件。网络封包分析软件的功能是撷取网络封包,并尽可能显示出最为详细的网络封包资料。本文通过Wireshark 抓取人人网HTTP 协议。
先启动wireshark 程序,在capture>options 在弹出界面里选中你的网卡,双击,会弹出如下图所示的设置规则处。简单地,可使用规则Host 加上人人站点域名。确定之后开始等操作下来就可开始抓包。
图3-4 Wireshark规则设置
图3-5 利用Wireshark 抓包过程
3.2.2分析网站行为
本文通过火狐浏览器+firebug来分析网站行为:
Firebug 是火狐浏览器下的一款开发类插件,它可以对HTML 、
javascript 和CSS 等进行查看和编辑。本文主要通过它对网页页面代码进行分析,如下图所示:
图3-6 通过firebug 对网页代码进行查阅
在观察到网页代码后,可制定对应的定向爬虫实现方案,例如从哪个页面开始,需要从这个页面中获得什么关键信息,哪些信息会在下一个页面中作为输入等,将整个流程进行整理,并判断什么情况下应当结束爬虫,最后再通过正则表达式来提取数据并实行定制爬虫。
3.2.3正则表达式设计
正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。
在抓取网页的过程中,人人网页面有许多不相关内容在其中,因此需要通过正则表达式进行数据提取。由于采用Python 语言进行编译,而正则表达式不属于Python 的一部分,这里要通过re 模块来提供对正则表达式的支持。使用re 模块的一般步骤如下:
先将正则表达式的字符串形式编译为Pattern 实例,
然后使用Pattern 实例处理文本并获得匹配结果。
本爬虫的具体正则表达式设计见详细下一节代码设计
3.3代码设计
本爬虫主要通过python 语言实现。Python 是一种面向对象、直译式计算机程序设计语言,由Guido van Rossum于1989年底发明,第一个公开发行版发行于1991年。Python 语法简捷而清晰,具有丰富和强大的类库。它常被昵称为胶水语言,它能够很轻松的把用其他语言制作的各种模块(尤其是C/C++)轻松地联结在一起。常见的一种应用情形是,使用python 快速生成程序的原型(有时甚至是程序的最终界面),然后对其中有特别要求的部分,用更合适的语言改写,比如3D 游戏中的图形渲染模块,速度要求非常高,就可以用C++重写[20]。本爬虫主要通过python 模块urllib2获取URL ,并通过该模块来处理基本的认证以及cookies 等。此外还要通过python 的re 模块来编译正则表达式抓取有效数据,程序使用模块如下图所示:
本次定向爬虫的基本原理则是首先根据学校名字以及入学年份搜索到uid ,然后通过uid 获取此用户的日志数状态数等信息,最后将结果通过CSV 格式输出。
图3-7 主要使用模块
3.3.1 UID获取
首先根据学校名字以及入学年份搜索到uid ,如下图所示
图3-8 输入学校名称并简单判断
图3-9 获取UID 代码
图3-10 获取UID 部分代码
图3-11 最终获取UID
通过UID 获取用户其他信息
图3-12 通过UID 获取信息
3.3.2以CSV 格式对数据进行输出
由于Weka 软件可以对csv 格式数据进行识别,则只需在抓取的每个属性之间加半角逗号(即, )作为分隔符即可:
图3-12 数据输出格式设置
3.3.3 爬虫设计过程中克服的技术难点
在登陆人人网后,默认情况下遇到的第一个界面是用户登陆界面,正常情况下会通过登录网站然后收集数据。但分析发现,在多次登陆后会出现验证码,这对自动化的爬虫来是不合适的,同时登陆后频繁请求页面,可能会被监测到,进而干涉程序的运行。再分析就发现,其搜索入口页面可以在不登陆下的情况也能使用,并且在搜索页面可获取我们需要的部分数据。并且,在此情况下,在浏览器里点击时,有时会出现一个页面会提示这个用户的相关信息,比如日志数等。而如果我们直接指定用户ID 就能
固定出现此用户的相关信息,沿着这个思路就找到了不需要登陆下的数据采集方案,其实现代码如下:
图3-13 不登录网站获取信息
但是,目标是收集1万条以上的记录,分析发现在同一个搜索条件下,最多能看到500多条记录,显然根据一个搜索条件是不够的,这就需要构造多个搜索条件来进行大量数据查询。
图3-14 设置多重搜索条件
在解决以上问题之后,顺利设计出了人人网的爬虫程序。其运行结果
如图3-16和图3-15所示。
图3-15 输入学校名称及确定输出数据表格名称
图3-16 数据爬取界面
4 人人网用户行为数据聚类分析
通过在人人网运行本文所设计的网络爬虫程序,最终采集到13000条关于北京交通大学同学在人人网的数据,每个单项数据具有9条属性:
X ∈(UID ,入学年份,朋友数,访问数,名字,性别,日志数,相册数, 状态数,)
对属性名称进行英文化处理后,所得到的人人网用户行为属性包括: X ∈(UID,Year,Friends,Visitor,SEX,Log,Picture,States )。图4-1显示了所获取的数据集片段:
图4-1 人人网用户行为属性数据集片段示例(CSV 格式)
以此为基础,本文将分别采用WEKA 与SPSS 软件对采集资料进行数据挖掘与分析。
Weka 的全名是怀卡托智能分析环境(Waikato Environment for Knowledge Analysis),是一款免费的,非商业化(的,基于JA V A 环境下开源的机器学习(machine learning )以及数据挖掘(data minining )软件。WEKA 软件的标准应用格式是ARFF ,但它也对DATA 和CSV 等几个常用格式进行支持,如下图所示。WEKA 包含有一些常用的数据挖掘算法,并且可以自主添加新的算法,同时该软件也可以让数据属性以及最终结果可视化,所以得到了广泛应用。
图4-2 通过ARFF-Viewer 查看数据
SPSS (Statistical Product and Service Solutions),中文译作“统计产品与服务解决方案”软件。SPSS 主要包含有完整的数据输入、编辑、统计分析、报表、图形制作等功能。其中自带11种类型136个函数。SPSS 提供了从简单的统计描述到复杂的多因素统计分析方法,比如数据的探索性分析、统计描述、列联表分析、二维相关、秩相关、偏相关、方差分析、非参数检验、多元回归、生存分析、协方差分析、判别分析、因子分析、聚类分析、非线性回归、Logistic 回归等。是一款应用十分广泛的统计分析软件。
4.1 数据预处理
4.1.1数据格式标准化处理
本小节阐述在进行聚类分析以前的数据预处理工作,主要是将数据格式标准化以符合weka 标准数据格式:
● 由于weka 软件不能有效识别中文,因此首先将所有ID 转换为英文 ● 由于CSV 文件缺少属性名。而WEKA 必须从CSV 文件的第一行读取属性名,否则就会把第一行的各属性值读成变量名,因此在数据表头加入属性标示
● 逐一删除Weka 软件不能识别的缺少属性的无效单个数据(数据足够多无需做缺失值处理)
● 删除对最终结果不产生影响的属性UID
● 将SEX 属性数值化,将男性设为数值1,女性设为数值2
● 经过上述操作后,通过Weka 对属性进行可视化操作,可判断哪些数据仍然不符合数据挖掘处理的要求,如图4-2所示:
图4-3 属性图形化处理
通过上图可以很明显的看出ID 与LOG 属性需要进行进一步处理,考虑到用户ID 不会对结果造成影响,属于用户行为的无关属性,所以直接将其忽略。
图4-4 忽略ID 属性
对LOG 属性的处理:对CSV 格式的LOG 属性进行排序,发现LOG 属性最大值与最小值之间数值相差过大,在删除孤立的最大值10417之后发现LOG 属性已能够被使用,如图4-3所示。
图4-5 LOG 属性恢复正常
4.1.2通过SPSS 描述数据特征
在数据挖掘之前最好能够对所获数据的各项属性特征有所了解,则通过SPSS 对数据集进行特征描述,如下图所示:
图4-6 数据集特征
4.1.3通过SPSS 离散化数据
离散化指把连续型数据切分为若干“段”,也称bin ,是数据分析中常用的手段。切分的原则有等距,等频,优化,或根据数据特点而定。离散化数据主要有以下好处[22]:
● 某些算法(例如决策树,NaiveBayes 等)本身不能直接使用连续型变量,连续型数据只有经离散处理后才能进入算法引擎。因此将数据离散化之后可以使用更多算法。
● 离散化可以有效地克服数据中隐藏的缺陷:使模型结果更加稳定。例如,通过离散化消除数据中的极端值与异常值等影响。
● 有利于对非线性关系进行诊断和描述:对连续型数据进行离散处理后,自变量和目标变量之间的关系变得清晰化。如果两者之间是非线性关系,可以重新定义离散后变量每段的取值,从而大大提高模型的灵活度。
SPSS 软件可以对数据进行可视的离散化处理,并有等宽离散以及根据属性的平均或选定标准差离散等选择,如下图所示:
图4-7 离散分割标准选择
图4-8 YEAR 属性离散化处理
图4-9 Friend 属性离散化处理
图4-10 Picture 属性离散化处理
4.2聚类分析
4.2.1聚类算法选取
为了判断哪种聚类算法是最优选择,本文选取少量数据,通过Weka 软件进行了试运算。其中Optics 、Cobweb 、Dbscan 算法不能产生聚类簇,而SimpleKMeans 、XMeans 、FarthestFirst 和MakeDensityBasedClusterer 则会被Sex 或是Years 属性所误导,产生没有意义的聚类簇。图4-4显示了采用SimpleKMeans 算法所得到的聚类结果。
图4-7 K-Means 聚类算法结果
通过对不同算法的分析比较,本文发现,采用EM 算法的聚类结果较为满意。分析原因,有可能是由对于抓取的数据处理不够精细,导致数据可能还存在有噪声等问题。而EM 算法(Expectation-maximization algorithm ,又译期望最大化算法),则是 Dempster ,Laind ,Rubin 于1977年提出的求参数极大似然估计的一种方法,它可以从非完整数据集中对参数进行MLE (Memory Limit Exceeded)估计,是一种非常简单实用的学习算法。这种方法可以广泛地应用于处理缺损数据,截尾数据,带有噪声等所谓的不完全数据(incomplete data)。这可能是该算法表现较好的原因。因此本文最终选取EM 算法对数据进行挖掘[21]。
EM (最大期望算法)主要经过两个步骤交替进行计算:
● 第一步是计算期望(E ),利用对隐藏变量的现有估计值,计算其最大似然估计值;
● 第二步是最大化(M ),最大化在 E 步上求得的最大似然值来计算参数的值。
第二步上找到的参数估计值被用于下一个期望计算步骤中,这个过程不断交替进行,形成一个迭代过程。
总体来说,EM 的算法流程如下:
● 初始化分布参数
● 重复直到收敛:
● E 步骤:估计未知参数的期望值,给出当前的参数估计。
● M 步骤:重新估计分布参数,以使得数据的似然性最大,给出未知变量的期望估计。
4.2.2 EM 算法参数设置
本文选取了EM 算法的缺省参数,如下所示:
● MaxIterations (最大迭代次数)=100
● MinstdDev (最小权重)= 1.0E-6
● NumClusters (集群数)=-1
● Seed(种子数)=100
其中,最大迭代次数表示重复执行E 和M 步骤,若结果不收敛,则反复迭代到100次结束。
算法运行参数界面如图4-8所示。
图4-8 EM算法运行参数设置界面
如图4-8所示,数据集包括了12298条用户行为属性数据记录,采用了年份、好友数、访问数、性别、日志数、相册数和用户状态数作为用户行为聚类属性信息,而用户ID 属性被忽略。
4.3 聚类结果分析
4.3.1EM 算法结果
图4-7显示了采用EM 算法所得到的聚类结果。
图4-9 EM算法的用户行为数据聚类结果
由图4-9可以看出,EM 算法将数据分为三部分聚类簇:
入学年份 好友数 访客数 性别比 日志数 图像数 状态数
α∈(2004.7, 429.8, 6365.7,1.4, 12.2, 15.6, 421.4) β∈(2001.2, 30.8, 107.3 1.3, 20.1, 0.7, 2.34) γ∈(2007.6, 233.5, 1205.3,1.3, 0.9, 5.7, 99.5)
4.3.2结果分析
通过上面数据可以看出,上面三个类在特定属性上存在巨大差异,反映了急剧变化的中国互联网环境所造成的社交网络用户行为差异。
以β类为例,由于人人网前身校内网诞生于2005年,而当时的校内网只邀请大学生进行注册,而β类的平均入学年份在2001.2月,因此大部分β类都没有注册校内网,因此β类好友数量与访客数量远低于α类与γ类。值得一提的,β唯一一项比其他两类都高的属性是日志数,而图像数量则远低于其他两类,这体现了现阶段中年人与青少年在上网习惯上的不同之处——他们更加喜欢用文字而不是多媒体来表达感情,这一点值得网络运营者对此进行思考。
而α类几乎所有属性都高于后两类的原因则在于他们的入学平均时间在2004年7月,这一时期是校内网发展的黄金时间段,几乎没有竞争对手,用户对于校内网的忠诚度都很高,可以说α类的用户是现在人人网的核心用户,如何维护好这部分客户的关系,保持用户黏性是维持人人网稳定发展的关键因素。
对γ类进行分析,校内网改名为人人网之后在平均入学年份在2007.6这一时间段的用户身上并没有获得像3年前一样的高速增长,甚至还有现了倒退的迹象,而人人网在发布的财报也支持了这一推测。这主要是由于07年之后不断涌现出各种新的社交网站以及10年之后出现各种新形式的社交元素对人人网造成了极大的竞争压力。而人人网最近也确实在不断进行创新以寻求突破。另外γ类的日志数数量明显低于另外两类,也进一步佐证了前面所提到的现阶段中年人与青少年在上网习惯上的不同之处——他们更加喜欢用文字而不是多媒体来表达感情。
从总体来看,SEX 属性全部小于1.5说明使用人人网用户的男生多于女生。而基本所有属性值都是α类>γ类>β类, 大致可以推测出目前人人网的用户数量也是α类>γ类>β类,如图所示:
图4-10 3个聚类簇的属性值分布
可以说通过EM 算法得出的聚类都能够得到较好的解释,这也是一次比较成功的聚类分析。
5结束语
5.1 全文总结
在信息大爆炸时代数据已经渗透到当今每一个行业和业务职能领域,成为非常重要的生产因素。然而人们想从海量的、不完全的、有噪声的、模糊随机的数据中获取有效的相关数据却并不容易,因此选择合理的数据采集手段对于获取有效数据十分重要。而本文采用的网络爬虫技术则是在网络上获取相关信息的一种高效手段,网络爬虫技术是搜索引擎的核心技术。本文通过设计定向爬虫来抓取人人网北京交通大学用户的相关属性,并最终获得了大量有效数据。
但仅有这些有效数据还是不够的,因为还有从这些数据中提取隐含在其中的、但却有潜在存在的有用属性相关信息。而数据挖掘则是发现在数据相关属性之间所隐含关系模式的最佳手段,因此接下来就需要通过数据挖掘软件对数据进行进一步分析,挖掘出其中隐含的知识模式。本文采用了Weka 与SPSS 软件工具,主要采用数据挖掘中的聚类分析方法,首先将数据格式标准化,并通过SPSS 对属性进行离散化,然后对比各聚类算法优缺点,最终采用EM 算法获得了有效的聚类分析结果,并对该聚类结果反映的中国校园社交网络发展状况进行了分析。
5.2 进一步研究的问题
研究问题1:获取更多的数据属性
毕业设计的完成只是抓取了8个属性的数据集,使得分析的结果显得比较单薄。希望在未来的研究中能够获取更多的属性,从而进行高维度的分析。另外这次数据挖掘也仅仅使用了Weka 软件中一种分析方法,希望下
次能够不光对数据进行聚类分析,同时也能够进行分类、关联规则等其他方式的数据挖掘。并且能够试用更多数据挖掘软件,并对它们的优缺点进行比较,得到更为丰富的研究结论。
研究问题2:对数据进行更加精细化的处理
限于时间等因素,本文采集到的数据处理总体仍然比较粗糙,、这也可能造成了许多算法都不能对本数据进行分析,这是比较遗憾的地方。在以后处理数据过程中对于存在缺失值的数据将可以采取更为合理有效的处理方法,例如对于数值属性可用平均值代替缺失值;对于nominal 属性,用它的mode(出现最多的值) 来代替缺失值。同时可对数据进行规范化与离散化的处理,如利用缩放和平移参数,将数值属性值规范到任何区间,而通过进行监督和无监督的数值属性的离散化,则可以离散数据集中的一些数值属性到分类属性。这样就使得该数据集可适用于更多数据挖掘算法,从而发现其中隐含的更多有趣的用户行为模式。