渋谷で引きこもってる社長です

株式会社Chotchy代表取締役 / エンジニア

Python Networkxを使ってページランクを計算する

PythonのライブラリにNetworkxというものがありますが、これが優秀なのです。基本的なネットワーク指標は簡単に出すことができます。Rを使っている人も多いと思いますが、これを機にPythonに浮気することもオススメします。

 

ページランクは有向グラフにおいてあるノードの訪問者がリン
クを経て別のノードへと訪問する状況が繰り返されていると想定した場合に,どの程度訪問者が訪れているかを示す指標。

んまぁ、そのノードがどんだけすげーかっていう指標だねw

 

必要なライブラリ

必要なのは、

①Numpy

②matplotlib

③Networkx

です。

Windowsの方はこちらを参考にしてください。


windows7 - Python, SciPy, matplotlibのインストール(Windows) - Qiita

 

Macの方は、

・Numpy

$ pip install numpy

・matplotlib

$ brew install freetype
$ pip install matplotlib

で完了です!

ソースコード

データはここのサイトから拝借するといいと思います!

Stanford Large Network Dataset Collection

import networkx as nx 
import csv #csvモジュールをインポートする 
import matplotlib.pylab as plt 


G=nx.Graph()#無向グラフ 
DG=nx.DiGraph()#有向グラフ 


f = open('data.csv', 'rb') 
dataReader = csv.reader(f) 
for row in dataReader:
  count = 0 
  for data in row:
    if count == 0: 
      var1 = data 
    else: 
      var2 = data 
    count += 1 
  DG.add_edges_from([(var1,var2)])#エッジを生成
    
    
#描画 
nx.draw(G)   
plt.show()      


#ページランク計算   
pagerank = nx.pagerank(DG)   
for k,v in pagerank.items(): 
  print "ノード:"+str(k)    
  print "ページランク"+str(v)
      
  

僕は先ほどのサイトのノード数のわりかし少ないwikipediaのデータを使いましたが、Macがあっつあつになるので気をつけてくださいww

描画したグラフはもはや意味わからん状態です…

 

f:id:chotchy-inc:20141104193819p:plain

エッジ数を減らしてみると、

f:id:chotchy-inc:20141104194158p:plain

エッジ数を200だけにしぼりました。結構入るだけ、出すだけのノードが多そう。全体を描画した訳ではないので何とも言えませんが…