研究ブログ

読んだ論文とか試したライブラリとかを紹介

pythonとnetworkxを使ったHITS解析

networkxにはHITS解析の実装も存在します。そこで同ライブラリを利用してHITSによるグラフ解析手法を紹介します。

利用するライブラリ

前回の記事で紹介した通り、networkxとその依存ライブラリであるnumpy,scipyがインストールされている事が前提です。

今回解析する対象のグラフ

解析するグラフも前回の記事と同じグラフを解析することとします。
f:id:kaita_v:20121207183930p:plain

ソースコード

# -*- coding: utf-8 -*-  
import networkx as nx

#有向グラフ 
g = nx.DiGraph()

#ノードの追加(省略可能)         
g.add_node(1)
g.add_node(2)
g.add_node(3)
g.add_node(4)

#エッジの追加 
g.add_edge(1,2)
g.add_edge(1,3)
g.add_edge(1,4)
g.add_edge(2,3)
g.add_edge(3,4)

#pagerank値の計算 
h,a=nx.hits(g)

#pagerank値の計算(numpyを利用)  
nh,na=nx.hits_numpy(g)

#pagerank値の計算(scipyを利用)   
sh,sa=nx.hits_scipy(g)

#計算結果表示                                                                                                                                                                                    
print("-----HITS-----")
print("--hub--")
print(h)
print("--authorities--")
print(a)
print("-----HITS(numpy)-----")
print("--hub--")
print(nh)
print("--authorities--")
print(na)
print("-----HITS(scipy)-----")
print("--hub--")
print(sh)
print("--authorities--")
print(sa)

結果

-----HITS-----
--hub--
{1: 0.5773502689711713, 2: 0.2113248655144144, 3: 0.2113248655144144, 4: 0.0}
--authorities--
{1: 0.0, 2: 0.26794919177575915, 3: 0.3660254041121205, 4: 0.3660254041121205}
-----HITS(numpy)-----
--hub--
{1: 0.5773502691896258, 2: 0.2113248654051871, 3: 0.2113248654051871, 4: 0.0}
--authorities--
{1: -0.0, 2: 0.26794919243112264, 3: 0.3660254037844386, 4: 0.36602540378443876}
-----HITS(scipy)-----
--hub--
{1: 0.5773502722323048, 2: 0.21132486388384755, 3: 0.21132486388384755, 4: 0.0}
--authorities--
{1: 0.0, 2: 0.2679492015591601, 3: 0.36602539922042, 4: 0.36602539922042}