之前发过一篇文章,python下的社交网络分析,但如果是只用Python的话,其实是不好用的。今天这篇文章,主要介绍下Neo4j与Python结合,是可以实现网页排名算法与最小社区探测的。
数据:用之前文章的 天龙八部 数据即可
===========================分割线===========================
首先loadcsv导入Neo4j中,
概览下:
图很大,我们先看下网络直径:网络直径的定义是最长的最短路径
好吧,最长是6,还记得6度人脉吗?
回顾下,我们看下 Catelyn与Drogo的最短路径:
也许最短路径不止一条,我们看下这俩人之间所有的最短路径:
看看关键节点的概念:如果节点位于网络中的其它两个节点之间的所有最短路径之中,那么该节点被认为是关键的
这里计算10个网络中的关键节点:
Python中上次告诉了大家怎么计算度中心性,Neo4j也可以:
关系是有权重的,那么在度中心性的基础上,我们计算下加权度中心性:
再计算下中介中心性。什么是中介中心性呢?其实就是识别连接不同集群的节点,中介中心性越高,这个节点越是连接不同集群的。不过计算中介中心性,需要在Neo4j中安装APOC插件。
再计算下接近中心性。类似于中介中心性,这是用来识别集群内部被高度连接的节点。
再看一下网页排名:网页排名算法和下面要说的最小社区探测,以及上面的各项中心性,在Python中都可以实现,但是没有数据库中实现方便、快捷、容易管理。
Neo4j中好像没有直接计算网页排名的插件,我们在Python中计算,添加到Neo4j中。有大神是用Python igraph包:pip install python-igraph,然后
但是我总安装不上,所以用了py2neo和networkx。
先把数据从Neo4j中导入到Python中:
在Python中计算网页排名:
然后把网页排名数据添加到Node节点属性中:
然后导入到Neo4j中
然后我们在Neo4j中看网页排名属性值:
网页排名越大,这个客户坏账的可能性越高。
最后看下社区最小社区探测,选择最小社区节点5,创建了6个社区,Python中计算,导入的Neo4j中。
我们看下社区是1的节点:
创建网页排名、社区后的节点其实可以再可视化一下,但是华而不实,这里就不做了。
这是1个例子,抛砖引玉吧,希望与大家共同交流。
领取专属 10元无门槛券
私享最新 技术干货