質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

最適化

最適化とはメソッドやデザインの最適な処理方法を選択することです。パフォーマンスの向上を目指す為に行われます。プログラミングにおける最適化は、アルゴリズムのスピードアップや、要求されるリソースを減らすことなどを指します。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

2942閲覧

networkxで任意のノードだけを表示する方法

退会済みユーザー

退会済みユーザー

総合スコア0

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

最適化

最適化とはメソッドやデザインの最適な処理方法を選択することです。パフォーマンスの向上を目指す為に行われます。プログラミングにおける最適化は、アルゴリズムのスピードアップや、要求されるリソースを減らすことなどを指します。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/02/04 13:07

複数のイベントで行なわれた会社のつながりをnetworkxで可視化しました。
下記のコードで重要性の高い会社はノードが大きく、色が濃くなるようにしてありますが、重要性の低い会社(下記の画像でいうとpagerankが0.05以下の会社)を非表示にする方法はありますでしょうか?
どなたかご教授よろしくお願いいたしますm(__)m

python

1g = Graph() 2g = nx.read_edgelist('company.txt', nodetype=str) 3pos = nx.spring_layout(g, k=0.7) 4 5plt.figure(figsize=(15,15)) 6pr = nx.pagerank(g) 7nx.draw_networkx_edges(g, pos, edge_color='goldenrod', alpha=0.5) 8#node_sizeにPageRankの値を組み込む 9nx.draw_networkx_nodes(g, pos, node_color=list(pr.values()), cmap=plt.cm.Oranges,alpha=1, node_size=[10000*v for v in pr.values()], font_family='IPAexGothic') 10nx.draw_networkx_labels(g, pos, font_size=30, font_family='IPAexGothic', dpi=2000) 11plt.axis('off') 12plt.title('関連会社', fontsize=20) 13plt.savefig("company.png")

イメージ説明

【pagerank一覧】

{'A社': 0.13339570847783982, 'D社': 0.08065902722055224, 'E社': 0.09550754940611829, 'J社': 0.032935844790803914, 'C社': 0.10823464774126176, 'K社': 0.044458657843357, 'I社': 0.044265431891963115, 'F社': 0.08514064038527677, 'L社': 0.04681899300775012, 'B社': 0.09569284792241822, 'G社': 0.06193254473679713, 'Q社': 0.033120008178905855, 'M社': 0.05815764267220127, 'R社': 0.044458657843357, 'O社': 0.03522179788139736}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

一例ですが、ネットワークにする前に元のデータをマスクするやり方があります。見たところ無向グラフのようですので、もしもテキストファイルが隣接行列を表しているならば、ファイルを開いてデータフレーム(df)に変換した後に

python

1tmp_df = df.mask(np.triu(np.ones(df.shape)).astype(bool) | (df < 閾値)) 2edge_lists = tmp_df.stack().reset_index().apply(tuple, axis=1).values 3 4G = nx.Graph() 5G.add_weighted_edges_from(edge_lists)

の操作で解決できると思います。

参考資料
https://teratail.com/questions/129715

質問コメントに対する追記
すみません、元々が0or1の隣接行列の場合には、解析する前にページランク解析で取得した辞書でフィルタして、対象に引っかかったノードを削除すれば大丈夫だと思います。

python

1pr = nx.pagerank(G) 2pos1 = nx.spring_layout(G) 3 4# 0.05より低いノードを取り出すフィルタ 5filters = {k: v for k, v in pr.items() if v < 0.05} 6# 0.05より高いノード(表示させるノード)を取り出すフィルタ 7ok = {k: v for k, v in pr.items() if v > 0.05} 8# ネットワークから0.05より低いノードを取り除く 9G.remove_nodes_from(filters.keys()) 10 11# 描画 12plt.figure(figsize=(30, 30)) 13nx.draw_networkx_edges(G, pos1) 14# pr.values()ではなくok.values() 15nx.draw_networkx_nodes(G, pos=pos1, node_color=list(ok.values()), cmap=plt.cm.Reds, font_family='IPAexGothic', node_size=[100000*v for v in ok.values()]) 16nx.draw_networkx_labels(G,pos1,font_size=10, font_family='IPAexGothic') 17 18plt.axis('off') 19plt.show()

投稿2020/02/04 13:19

編集2020/02/05 14:38
bamboo-nova

総合スコア1408

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/02/05 02:23

ご回答ありがとうございます! company.txtをdfに変換し上記コードで作成したところ、下記エラーが発生してしまいました。。 TypeError: '<' not supported between instances of 'str' and 'float'
bamboo-nova

2020/02/05 05:02

(df < 閾値) おそらくこの部分の処理を行う際にstrやfloat型があるせいで、<の演算子が適用できないことを意味しているので、一度データフレームのデータの型を(df.dtypeとかで)確認していただいて、文字列(str)やfloatが含まれていたら、 df.astype(int) のように型を変換していただければと思います。
退会済みユーザー

退会済みユーザー

2020/02/05 05:56

company.txtをdfに変換したdf_companyが以下のような内容なのですが、これではダメということでしょうか? one two 0 A社 D社 1 A社 C社 2 A社 B社 3 A社 C社 4 A社 D社 5 A社 B社 6 B社 D社 7 B社 C社 8 A社 B社 9 B社 C社 10 B社 D社
bamboo-nova

2020/02/05 07:30

テキストファイルの中身はエッジの組み合わせ何ですね。 nx.to_pandas_adjacency(g)という便利なのがあるので、無理やりデータフレームにせずとも g = nx.Graph() g = nx.read_edgelist(''company.txt", nodetype=str) df = nx.to_pandas_adjacency(g) でデータフレームの形式で隣接行列に変換できます。あとは、質問で回答したプログラムを使えば閾値でマスキングができると思います。
退会済みユーザー

退会済みユーザー

2020/02/05 12:11

ありがとうございます! 上記の方法で試したところ、抽出した画像に変化が見られませんでした。 おかしいと思い、print(edge_lists)してみたところ、すべての要素の閾値が1.0でした。。
退会済みユーザー

退会済みユーザー

2020/02/05 15:29

おおおおおおおおおお! ありがとうございます! 無事解決できました。助かりましたm(__)m
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問