- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
利用d3js对大数据资料进行可视化分析-insight-labs
原原文文地地址址:/tips/823
作者: Anthr@X anthrax@
0x00 背背景景
对于前段时间流出的QQ群数据大家想必已经有所了解了, 理后大小将近100G,多达15亿条关系数据 (QQ号,群内昵称,群号,群内权限,群内性别和年龄)和将近9000万条群信息 (群
号,群名,创建时间,群介绍),这些数据都是扁平化的2维表格结构,直接查询不能直接体现出用户和群之间的直接或者间接关系。通过数据可视化,可以把扁平结构的数据作为点和线连
接起来,从而更加直观的显示出来从而进行分析。
d3.js是一个近年来推出的基于javascri t的数据展示库,全称为Data Driven Document, 在浏览器数据展示领域的地位类似于通用js框架里的jQuery。d3.js的官网是,大家可以在上面看到很
多例子和应用。d3.js也是图形数据库neo4j所内置的数据展示工具。
说到图形数据库,其实正确的翻译应该是图数据库,图即所谓的Gra h,来自于数学里的图论,比如四色定理和推销员过桥的问题 (著名的NP 问题之一)。图数据库着重于数据之间的关联和
属性,对于关系错综复杂的关系分析效率很高。例如,我想知道谁是我朋友的朋友,并且他们有哪些朋友也认识我。对于这种问题,普通关系型数据库的计算复杂度是O(N^c)左右或者更
高,N为选择范围的数据集合大小,你好友数量加上好友的好友的数量等,c为关系层数。图数据库的计算复杂度在O(N^2)左右或者更低,但是基本不会超过O(N^2)。图数据库对于复杂关系
数据查询起来效率高的主要原因是在数据输入的时候就已经对关系进行了 理和索引,这样做在查询的时候具有很高的效率,但是在数据导入的时候会很慢。QQ群的15亿个关系在向图数据
库neo4j里导入的时候花了3天都没弄完,也没有进度提示,所以后来我直接放弃了。
0x01 数数据据 理理
在QQ群和群成员关系里面,对于层数我是这么定义的:
第1层:目标QQ加入的所有群
第2层:目标QQ加入的所有群的所有成员
第3层:目标QQ加入的所有群的所有成员加入的所有群
.
.
.
大家可以看出这样的查询是可以递归的,假设每个QQ号所加入的群数量和每个群的成员数量为N ,那么查询3层数据时总计算量为N*N*N=n^3,所以当查询层数为c层的时候,计算复杂度是
N^c。
前面说过,图数据库的计算复杂度一般在N^2 以下,所以当使用普通的关系型数据库的时候,如果查询的层数不多,效率和图数据库比起来差不多,加上关系数据库自带的便于管理和导入导
出的属性,所以我还是选择了mysql数据库。
对于QQ和QQ群之间的关系,每个QQ号都能加入群,一个群里也有很多QQ,基本都在几十到几百人,所以两个QQ号在同一个群里不一定代表他们的关系很紧密,换句话说QQ和QQ群之间
的关系相对于QQ好友而言相对较弱。但是这并不代表我们从中不能分析出有用的资料,俗话说的好,大数据就像一座金矿,只有用力挖才能挖到金子。
d3.js支持多种数据格式,比如JSON,XML,CSV,HTML等,因为PHP的数组可以很简单的转换为JSON格式,所以我选择用PHP写API来获取JSON数据。QQ和QQ群是一种典型的图数据的应
用,QQ和QQ群作为节点(node),QQ加入了哪些群作为关系(link),d3.js内置了一个功能很强大的内建布局,叫做Force-Directed Gra h (受力导向图),后面简称为force。force布局模拟了一些
基本的物理粒子原理,比如引力和斥力 (确切的说是模拟了电磁力和引力,在离的远的时候会互相吸引,在离的近的时候斥力急剧增加),并且可以调节力的大小和受力距离等等,可以说是
自由度相当高。关于d3.js的force布局,在官网有详细的API和不少例子,这里我就不贴代码了。
在force布局里面,数据源的JSON可以有很多种不同的格式和属性,但是基本格式如下:
{nodes:[{num:10001,type:qq},{numtype:qun} ,links:[{source:10001,targetauth:1,nick:pony} }
其中nodes数组对应的是节点列表,links对应的是关系列表。
每个节点可以有很多自定义属性,在d3.js可以针对每个节点存取节点的属性,比如我定义num是QQ号或者群号,ty e代表节点是QQ还是群,另外我在js里设定在ty e==‘qun’的时候显示群的图
标,是qq的时候显示qq的图标。关系里面默认的属性有source和target,分别对应一个关系的两头,默认情况下关系里面
您可能关注的文档
最近下载
- 抗菌药物临床应用分级管理目录(2023年版).doc VIP
- 飞利浦(PHILIPS)BTD2339 93 入门指南.pdf
- 设备管理工作总结汇报课件.pptx VIP
- (2025秋新改)人教版三年级数学上册教学计划(及进度表).docx VIP
- 人教版八年级数学上册 第十三章 三角形 综合与实践 确定匀质薄板的重心位置.pptx VIP
- TCEEIA 593:2022 工业机器人耐久性测试方法.pdf VIP
- 小学音乐《演唱 中华人民共和国国歌》章莉PPT课件新优质课比赛公开课获奖348.pptx VIP
- 2024秋季九年级英语教学计划(4篇).doc VIP
- 墩柱施工操作平台相关计算.docx VIP
- 岛津lc2030c高效液相色谱仪操作指南.doc
文档评论(0)