小白学Python数据分析之五

[编者按] Python是大数据分析的常用技术之一,用Python进行数据分析的众多优势使得越来越多的人开始走上Python数据分析之路。后台也常常有读者来信,希望我们分享关于Python数据分析的知识。从本期开始,我们推出“小白学Python数据分析”专栏,本专栏邀请到一位Python数据分析的初学者小白,记录他学习Python数据分析的历程。大家可以和小白一起学习,并完成每期专栏中的实例,就可以掌握Python数据分析的常用方法和技术。教材方面,我们参考的是王宏志老师编著的《大数据分析原理与实践》。由于小白也在学习过程中,所以文中难免会有认识和理解不当之处,欢迎大家批评指正,更欢迎大家通过后台留言与我们进行讨论交流,大家共同向Python数据分析高手的目标前进!

本期我们将学习如何用NetworkX库进行结构分析,主要将讨论以下内容:

NetworkX库简介

最短路径分析

Pagerank算法

结构计数

聚类系数

社团发现

1. NetworkX库简介

NetworkX是一个用Python语言开发的图论与复杂网络建模工具,内置了常用的图与复杂网络分析算法,可以方便地进行复杂网络数据分析、仿真建模等工作。Networkx支持创建简单无向图、有向图和多重图。内置许多标准的图论算法,节点可为任意数据;支持任意的边值维度,功能丰富,简单易用。本文我们将采用这个库来实现结构分析的若干问题。

2. 最短路径分析

最短路径分析的基本原理是贪心算法,通过输入的起点和终点以及各个线段的长度来计算出任意两点之间的距离。首先我们有如下的数据,第一列代表起点,第二列代表终点,最后一列是长度:

然后我们载入这个文件,对数据进行处理:

在NetworkX中采用G=nx.Graph()来构建一个网络,之后就可以进行计算:

搭好网络以后我们可以画图,采用nx.draw:

可以输出的图像如下:

最后我们计算各个点之间的路径长度的部分是:

得到输出:

其中第一行是起点,第二行是终点,第三行是最短路径长度,最短路径计算完成。

3.Pagerank算法

PageRank起于网页的搜索排序,Google 利用网页的链接结构计算每个网页的等级排名,其基本思路是:如果一个网页被其他多个网页指向,这说明该网页比较重要或者质量较高。除考虑网页的链接数量,还考虑网页本身的权重级别,以及该网页有多少条出链到其它网页。对于用户构成的人际网络,除了用户本身的影响力之外,边的权重也是重要因素之一。例如,新浪微博的某个用户,会更容易影响粉丝中关系比较亲密的家人、同学、同事等,而对陌生的弱关系粉丝影响较小。

在NetworkX中有pagerank算法可以直接导出各个点的PR值(pagerank值),我们可以直接使用,但是要先按照(一)中的方法搭建一个网络结构,然后再交由pagerank计算,在此不赘述搭建过程:

得到输出结果为:

第一行为节点,第二行为pagerank值。

4.结构计数(以三角形为例)

对于三角形计数,在Networkx中有内置的triangles函数来完成三角形结构的计算。函数如下:

triangles函数的标准形式是:triangles(G, nodes=None)。G是提前编好的网络,网络的构建方法与前面一致。后面的nodes是需要参与计算的点,如果只想将某些点加入到计算体系中,就在“nodes=“后写上你想加的点,如果没有加上这个参量,默认为计算所有的点。

加入计算的点如下:

得出的结果为:

输出的数据代表某个点是多少个三角形的公共顶点,例如:1是四个三角形的顶点。

5.聚类系数

结构聚类指的是对图中的结点和边进行聚类。对于结点聚类,输入图G,输出其结点的分类,使得每个分类在结构上关联密切。

我们用Python中的Networkx库的clustering函数来说明点结构聚类的定义和实现。点聚类系数在无向图G中,计算每一个节点周围的稠密度,星状网络稠密度为0,全联通网络稠密度为1。边聚类系数为在无向图G中,计算每一条边周围的稠密度。

以点聚类系数为例,点聚类系数计算数据采用无向图,该无向图如下所示:

对应的列表为:

函数clustering(G,nodes=None, weight=None)的使用和前面的triangle类似,在此不赘述,结果如下:

6.社团发现

一个社区就是一个包含比其他图的节点之间连接更加稠密的子图;一个图是一个社区结构当且仅当任意子图内的连接数量比子图之间的连接数目多得多。一般来说,同一社区内的节点与节点之间的连接很紧密,而社区与社区之间的连接比较稀疏。

Python的Networkx的k_clique_communities函数可以进行社团发现,这里函数引用的是clique渗透算法,具体算法思路复杂,可以查阅下相关资料。

k_clique_communities的输入结构和之前的两个函数一样,它有两个输入参量,一个是我们之前输入的结构G,还有一个是设置的最小社群的节点个数。最后将返回的结果进行list转化就可以打印出我们需要的答案了。

在这期文章中,我们主要介绍了Networkx的安装和一些简单的使用方法及其应用。这个库是Python中能够进行结构分析的一个非常好的库,其中的函数和用法博大精深,有网络结构分析需求的同学可以好好研究一下这个库,它将对你的数据分析起到很大的作用。

“大数据与数据科学家”公众号

主编:王宏志

特邀副主编:朱劼

副主编:丁小欧

责任编辑:齐志鑫,宋扬,王雨茁、魏龑,张荣恩

编辑: 陶颖安

-精彩内容,记得分享到朋友圈-

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180715G1FQG300?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券