前提介绍:首先感谢 @崔斯特 在抓取数据中对我的协助。
这篇文章介绍的是数据可视化(Data visualization)的一些具体应用。
主要用到的工具 Python (抓取数据和分析数据), Gephi (数据可视化软件)
(另外: 我会介绍到两个在Facebook (Netvizz v1.42) 上抓取数据的app)先上图:
这是以五月天Fan-mily(原May Day Fan-mily) Facebook Group 为收集数据的来源制作的 社交网络关系图。
而这幅图是从《哈利波特与魔法石》中提取制作的 人物关系图。
好!我们正式开始!!
首先,我们看看如何获得数据。
这里主要分两种数据获取的模式:
1, 从网络直接获取的数据
2, 通过数据分析获得的数据
那第一种从网络直接获取的数据的方式有很多啦。像流行的Python爬虫 或者从 网站开放的API获取。
这里介绍的Netvizz 就是Facebook 开放API 提取数据的app.
可以翻墙的同学可以直接在Facebook 的搜索栏直接输入 Netvizz 就可以找到了。
图1
但有一点需要注意,为了保证用户隐私 Facebook 已经关闭了个人用户的API接口数据提取的服务。
所以,我们现在只能获得小组和页面的数据。
图2
选择小组数据(Group data)后,我们会进入一个选项页面 (图3)。在这里我们要填写小组id (group id),那小组ID怎么获得呢? 点击旁边的 find group ids here。进入http://Lookup-id.com,将选择的FB小组的连接填入,就会得到一串数字,那就是小组ID(图5)。
(注意哦,Data to get 的勾勾要去掉)
图3
图4
图5
然后回到Netvizz页面。将ID输入,然后就可以进行抓取了。
下载文件中会有个 .gdf 的文件夹,用Gehpi将其打开就可以见到初始化的画面。
图6
控制面板的左边是:
Node(节点):控制画面中的小点点。
Edges(边):连接点的线。
Layout(布局):依据算法改变这个点与线的分布。
样式大家可以自由发挥啦,难度也不大。想学精细点的同学可以上Gephi官网上看看,那有很多具体的教程。
图7
以我这次讲Node中的Attribute 设置成为 Comment_count,Layout 选择Fruchterman Reingold 算法,关于这些布局算法(force-directed layout algorithm)的详情,其基本思想是通过移动节点和改变它们之间的力,以尽量减少系统的能量。其他几个算法大家可以在wiki上搜索下。于是黑黑的网格就变成富有结构和色彩了。
图8
右边是统计相关的数据,很多意思我也不懂啦,也在学习中,这里就不多介绍了。
关于 哈利波特与魔法石 的那幅图是怎么做出来的问题?
首先要从网上找到 哈利波特与魔法石 的文本并下载下来。
这一部分的爬虫是 @崔斯特 帮助我完成的,在这里再度表示感谢!
把小说弄到手后。
这就需要用到Python 对整本书进行文本分析。
在进行分析前,我们首先要创建一个人物名称的list。
从百度搜索 哈利波特的 人物表 制作成txt 如下:
这里选择用 jieba 进行分词
然后定义3个关系
之后按照字典类型names保存人物,该字典的键为人物名称,值为该人物在全文中出现的次数。字典类型relationships保存人物关系的有向边,该字典的键为有向边的起点,值为一个字典edge,edge的键是有向边的终点,值是有向边的权值,代表两个人物之间联系的紧密程度。lineNames是一个缓存变量,保存对每一段分词得到当前段中出现的人物名称,lineNames[i]是一个列表,列表中存储第i段中出现过的人物。
得到node.txt 和 edge.txt, 之后导入Gephi。选 Import spreadsheet, 分别导入 node.txt (选项中选择节点图) 和 edge.txt (
选项中选择边表图)。
之后的美化和用算法调整布局,大家就可以自由发挥啦。
最后,在介绍几个社交网络分析的概念吧。
第一:网络密度 (Network Density)
一个网络的密度是在一个给定的网络中的关系(边)的数目在网络中的节点之间的可能的关系的总数的比率
这是一个常用的措施,以确定如何连接良好的网络
一个完全连通的网络密度为1
而下面的网络举例显示密度为0.83
公式: 可观测到的实际联系/全部潜在的联系=关系密度
如图,可见关系数为(5),可能关系数(6),所以关系密度 5/6
密度是一个有用的措施互相比较网络
密度测度与跟踪诸如信息扩散(如思想、谣言、疾病传播等)的现象有关。
这是因为它假定,在紧密连接的网络中,信息的传播速度更快,达到更广泛的节点集
网络密度越大,越有可能被认为是一个有凝聚力的社区(即社会支持和有效传播的来源)
第二:层 (Degree)
指特定行动者对网络其他成员持有的关系的数量和类型
主要分: 单方向性关系 (directed relationship)和 对称关系 (symmetric relationship)
In-Degree
特定节点与他人的关系
Out-Degree
表明节点1和2之间的往复运动
基本上是一个衡量领带强度,这是同样相关的分析整个网络 (Weight Degree )
测量权重可以:互动频率、交换项目数、个体对关系强度的感知
3,结构洞 (Structural Holes)
结构空洞的思想描述了网络密度的相反,即缺乏连接。
结构孔归因于节点,否则连接密集的网络部分,是分成重要的连接节点。连接网络部分的这些节点被称为“Brokers”。
例如那几个大点点。
弱联系的概念与结构空洞的概念密切相关
类似于结构孔,弱关系在网络中嵌入较少。
尽管如此,他们承担重要的职能:
他们促进信息流之间的集群(即从遥远的部分网络)
弱联系有助于整合社会系统,否则将支离破碎和语无伦次
4. 集群 (Clustering)
计算和识别网络中的集群,特别是大型网络可能很麻烦
预定义的算法有助于识别集群,因此网络内的社区
Force Atlas 和 Force Altas 2:最常用的一种算法来确定在大型网络社区(在Gephi为例)
使用的算法的优势:没有现有的知识图理论需要可视化和分析集群网络
缺点:他们的准确性是高度依赖于我们正在分析的网络类型。
Reference: