2017-11-03 3 views
1

と仮定私は、CSVいる( 『matrix.csv』)のエッジの対称行列でファイルグラフの長さ:出力Iとしてエッジを持つグラフビルドの長さは、距離行列を用いて表示

,a,b,c,d 
a,nan,0.3,0.2,nan 
b,0.3,nan,nan,nan 
c,0.2,nan,nan,0.1 
d,nan,nan,0.1,nan 

をaとb、aとc、dとcをその端に書かれた距離で接続する3つのエッジがあるグラフを取得したいとします。

これまでのところ、私はパンダのデータフレームのオブジェクトを使用してnumpyのオブジェクトにcsvファイルを読み込むコード(私が知っている、それは愚かですが、from_pandas_dataframeはnetworkxでは動作しませんでした)

import matplotlib 
import networkx as nx 
matplotlib.use('TkAgg') 
import matplotlib.pyplot as plt 
import pandas as pd 

df = pd.read_csv('matrix.csv', sep=',',index_col=0, decimal=",") 
numpyMatrix = df.as_matrix() 
G1 = nx.from_numpy_matrix(numpyMatrix) 
G = nx.Graph(numpyMatrix) 
nx.draw(G, with_labels=True, pos=nx.spring_layout(G), node_color='salmon') 
plt.draw() 
plt.show() 

しかし、コードもを持っています他のすべてのエッジ(「ナノ」値)をプロットします。 もう1つの質問は、例えば0.1より長い長さのエッジのセットだけをプロットする方法です。

答えて

1

データフレームを行列にキャストする前に、Pandas .fillna()メソッドを使用してnansを0に置き換えることができます。次に、行列に0と文字列バージョンの他の浮動小数点数が含まれていることに注意してください。次に、numpy配列の.astype()メソッドを使用して、行列エントリを浮動させることができます。

numpyMatrix = df.fillna(0).as_matrix() 
numpyMatrix = numpyMatrix.astype(float) 

あなたは、さらにあなたのエッジをフィルタリングする場合は、チェックアウト:質問の後半部分に答える finding edges in networkx that meet a certain criteria

0

を:基本的に

import matplotlib 
import networkx as nx 
matplotlib.use('TkAgg') 
import matplotlib.pyplot as plt 
import pandas as pd 

df = pd.read_csv('mat.csv', sep=';',index_col=0, decimal=",") 
l = list(df) 
G = nx.Graph() 
for item in l: 
    for item0 in l: 
     if l.index(item0) < l.index(item) and df[item][item0] > 0.1: 
      G.add_edge(item, item0, weight=df[item][item0]) 
nx.draw(G, with_labels=True, pos=nx.spring_layout(G), node_color='salmon') 
plt.draw() 
plt.show() 

、ここにあなたがして、csvファイルを読み込みます(df [item] [item0]> 0.1)である場合、2つのノードの間にエッジを描くことを決定する(それ以外の場合は)対角行列を仮定します。エッジが0.1より大きい)。

関連する問題