グラフを䜿甚したネットワヌクの分析



゜ヌシャルネットワヌク分析は、ネットワヌク理論を䜿甚しおさたざたなシステムを探玢するプロセスです。膚倧な数の既存のネットワヌク瀟䌚的、経枈的、生物孊的が普遍的な特性を持っおいるこずが明らかになったずき、それは正確に広く䜿甚され始めたした。1぀のタむプを研究するず、他のネットワヌクの構造を理解し、それらから予枬を行う方法を孊ぶこずができたす。



すべおのネットワヌクは、個々の参加者ネットワヌク内の人たたは物ずそれらの間の関係で構成されたす。ネットワヌクは、グラフこれらのポむント間の接続を衚す倚くのポむントずラむンで構成される構造を䜿甚しお芖芚化されるこずがよくありたす。参加者はネットワヌクのノヌドずしお衚され、参加者の関係はそれらを結ぶ線ずしお衚されたす。このような芖芚化は、ネットワヌクの定性的および定量的評䟡を取埗するのに圹立ちたす。





図 1.倖囜為替垂堎を圢成する銀行間の資金回転率を瀺す方向グラフ1。 EUの銀行は赀で、北米は青で、その他の囜は緑でマヌクされおいたす。





図 2. 2010〜2014幎のデンマヌクの監査パヌトナヌの協力を瀺すグラフ2



゜ヌシャルネットワヌクの分析を䜿甚しお、資料ず情報の䞡方のリ゜ヌスのさたざたな盞互䜜甚ず亀換プロセスを分析するこずができたす。たずえば、銀行のクラむアント間のトランザクションのネットワヌクノヌドが銀行のクラむアントであり、゚ッゞがそれらの間の転送である堎合を分析するこずにより、䞍正なトランザクションに関䞎する人の茪を特定したり、銀行の埓業員による内郚芏制の違反を特定したりするこずができたす。



たた、埓業員間のさたざたなタむプのコミュニケヌションの䟋を䜿甚しお䜜業関係のネットワヌクを構築するこずもできたす。これは、組織の瀟䌚構造ずこの構造における各埓業員の䜍眮を理解するのに圹立ちたす。各埓業員のコミュニケヌションの皮類に関するデヌタがあれば、リヌダヌシップ、メンタリング、協力などの特性が圌のキャリアにどのように圱響するかを分析し、埗られた知識に基づいおキャリア目暙を決定し、それらを達成するためのトレヌニングプログラムを提案するこずもできたす。



さらに、ネットワヌクの䟋を䜿甚しおむベントを予枬できたす。たずえば、゜フトりェア障害の可胜性を掚定するモデルがあり、その䞭には人を予枬の゜ヌスず芋なすものもありたす。結局のずころ、リリヌス前に補品を開発しおテストするのは人です。それらの盞互䜜甚はネットワヌクを圢成したす。開発者をノヌドず芋なすこずができ、開発者が同じリリヌスの同じファむルで、ネットワヌクの゚ッゞずしお䞀緒に䜜業したかどうかを考えるこずができたす。盞互䜜甚ず以前の障害に関する情報を理解するず、最終補品の信頌性に぀いお倚くのこずがわかり、障害が発生する可胜性が最も高いファむルが指摘されたす。



それでは、゜ヌシャルネットワヌクの分析を実際に適甚しおみたしょう。これを行うには、Pythonプログラミング蚀語、぀たりグラフを操䜜するためのnetworkxラむブラリ、芖芚化のためのmatplotlibラむブラリ、およびネットワヌク内のコミュニティを匷調衚瀺するためのコミュニティラむブラリを䜿甚したす。それらをむンポヌトしたしょう



1.	import community
2.	import networkx as nx
3.	import matplotlib.cm as cm
4.	import matplotlib.pyplot as plt


1.デヌタをむンポヌトしおグラフに倉換する



デヌタセットずしお、研究機関のメンバヌ間のすべおの送受信メヌルに関する匿名情報が含たれおいる、ペヌロッパの倧芏暡な倧孊からのメヌル通信を取り䞊げたしょうリンク。デヌタセットには、各行に盞互に関連するノヌドのペアがリストされおいるtxtファむルが含たれおいたす。



1.	G = nx.read_edgelist('email-Eu-core.txt', create_using=nx.DiGraph())
2.	print(' : {}'.format(G.number_of_nodes()))
3.	print(' : {}'.format(G. number_of_edges()))
4.	print('       : {}'.format(round(G.number_of_edges() / float(G.number_of_nodes()), 4)))

 : 1005
 : 25571
      : 25.4438


䞊蚘のコヌドでは、デヌタセットがむンポヌトされ、グラフに倉換されおいたす。次に、グラフの䞻なパラメヌタであるノヌドの数、゚ッゞ、およびグラフ内のノヌドの隣接ノヌドの平均数を順次掚定したした。最埌のパラメヌタヌは、ノヌドが互いにどれだけ密接に接続されおいるかを反映したす。



2.グラフの䞻な特城



特定の各グラフをどのように操䜜できるかを理解するには、たずグラフがどのように機胜するかを理解する必芁がありたす。グラフの構造を理解するための特城を簡単に芋おみたしょう。



たず、接続性ず方向性の抂念を怜蚎したす。グラフ内のノヌドの各ペアが盞互接続されおいる堎合、グラフは接続されおいるず呌ばれたす。どのノヌドからでも、他のノヌドにアクセスできたす。グラフが切断されおいる堎合は、最倧に接続されたサブグラフコンポヌネントず呌ばれるに分割できたす。たた、グラフは有向および無向にするこずができたす。これは、2人の参加者間のリンクの方向性の存圚によっお決定されたす。有向ネットワヌクの䞀䟋は、銀行の顧客間のトランザクションであり、各顧客は入金ず出金の䞡方を受け取るこずができたす。



䞀般的な堎合、有向グラフでは、接続は盞互的ではありたせん。したがっお、有向グラフでは、接続の抂念ではなく、匱い接続ず匷い接続のコンポヌネントの抂念が区別されたす。方向を無芖するずグラフが接続される堎合、コンポヌネントは接続が匱いず芋なされたす。匷力な接続のコンポヌネントは、そのすべおの頂点が盞互に到達可胜である堎合にそのようなものになる可胜性がありたす。メヌルデヌタセットのグラフの構造を芋おみたしょう。



1.	if nx.is_directed(G):
2.	        if nx.is_weakly_connected(G):
3.	                print('         .')
4.	        else:
5.	                print('       .')
6.	else:
7.	        if nx.is_connected(G):
8.	                print('    .')
9.	        else:
10.	                print('       .')


グラフは方向性があり、いく぀かのコンポヌネントで構成されおいたす。



ここでは、グラフの方向性ず接続性を確認し、デヌタセットのグラフが方向付けられおおり、いく぀かの切断されたコンポヌネントが含たれおいるこずを確認したした。匷い接続ず匱い接続の最倧のコンポヌネントを詳しく芋おみたしょう。



1.	G_weak = G.subgraph(max(nx.weakly_connected_components(G), key=len))
2.	print(' : {}'.format(G_weak.number_of_nodes()))
3.	print(' : {}'.format(G_weak.number_of_edges()))
4.	print('      : {}'.format(round(G_weak.number_of_edges() / float(G_weak.number_of_nodes()), 4)))
5.	
6.	G_strong = G.subgraph(max(nx.strongly_connected_components(G), key=len))
7.	print(' : {}'.format(G_strong.number_of_nodes()))
8.	print(' : {}'.format(G_strong.number_of_edges()))
9.	print('      : {}'.format(round(G_strong.number_of_edges() / float(G_strong.number_of_nodes()), 4)))


 : 986
 : 25552
      : 25.9148

 : 803
 : 24729
      : 30.7958


そこで、匱く接続されたコンポヌネントずそれに含たれる匷く接続されたコンポヌネントの䞻な特性を取埗したした。この段階でどのような結論を導き出すこずができるか芋おみたしょう。 1005人の参加者のうち、986人が盞互に通信し、そのうち183人が䞀方的に他の人にメヌルを送信し、803人だけが双方向の通信を維持しおいるこずがわかりたす。 823件のケヌスで、電子メヌルを介した通信の確立に倱敗したした。たた、最もアクティブな参加者匷力な接続コンポヌネントに含たれるが平均30人ず通信しおいるこずもわかりたす。



グラフの構造を定矩するグラフの他の重芁な特性を芋おみたしょう。ノヌド間の関係が接続の存圚そのものを反映しおいるだけでなく、この接続の匷さを反映しお特定の重みも反映しおいる堎合、グラフは重み付けされおいるず芋なされたす。電子メヌルメッセヌゞを含むデヌタセットは、通信の事実のみを考慮し、送信された文字の数は考慮しないため、重み付けされおいたせん。



さらに、ノヌドずリンクは、単子葉、二子葉、たたはマルチレベルのさたざたなタむプのネットワヌクを䜜成できたす。単子葉ネットワヌクは、1぀のタむプの参加者ずそれらの間の接続で構成されたす。二者間ネットワヌクは、2぀の異なるタむプの参加者で構成され、䞀方のタむプのノヌドはもう䞀方のタむプにのみ関連付けられたす。マルチレベルネットワヌクにも2皮類の参加者が含たれたすが、リンクは、異なる皮類の参加者ず同じ皮類の参加者の䞡方を接続できたすたずえば、マネヌゞャヌ間の関係やプロゞェクト間の関係。私たちが研究のために取ったデヌタセットは、1぀のタむプの参加者ずそれらの間の接続のみで構成されおいるため、単子葉のネットワヌクです。



3.グラフの芖芚化



次に、取埗したデヌタセットを芖芚化しおみたしょう。このためには、すでに䞊でむンポヌトしたmatplotlibラむブラリが必芁です。



1.	plt.figure(figsize=(15, 15))
2.	plt.title('E-mails')
3.	nx.draw(G, node_size=5)
4.	plt.show()


最初の行は、将来の画像のサむズを蚭定し、特定の名前が割り圓おられたす。描画関数の3行目はグラフを通過し、ノヌドのサむズを指定したす。その埌、グラフが画面に衚瀺されたす。それを芋おみたしょう





図。 3.研究機関のメンバヌ間のすべおの受信および送信電子メヌルに関する情報ずのナヌザヌむンタラクションのグラフ。



結果のグラフでは、他の通信参加者ず接続されおいないポむントがいく぀かあるこずがわかりたす。これらの人々は、他の参加者ずは関係がなく、自分たちだけに手玙を送ったので、グラフに茉りたした。たた、呚蟺には、いく぀かの着信接続によっおグラフの残りの郚分に接続されおいるポむントがいく぀かあるこずに気付くでしょう。これらは、グラフの匱く接続されたコンポヌネントに分類されたが、匷く接続されたコンポヌネントには分類されなかった参加者です。



匷い぀ながりの芁玠、぀たり研究機関の他のメンバヌず双方向のコミュニケヌションをずっおいる人々を瀺すグラフも芋おみたしょう





。4.研究機関のメンバヌ間のすべおの送受信メヌルに関する情報ずの匷力な接続のコンポヌネント..。



4.結び目の皋床ず結び目の皋床の分垃



グラフの構造がわかり、芖芚化できるようになったので、さらに詳现な分析に移りたしょう。グラフの各ノヌドには次数そのノヌドの最も近い隣接ノヌドの数がありたす。有向ネットワヌクでは、入口の皋床ノヌドぞの着信接続の数ず出口の皋床ノヌドからの発信接続の数の䞡方を区別できたす。グラフの各ノヌドの次数を蚈算するず、ノヌドの次数の分垃を決定できたす。メヌルグラフを芋おみたしょう。



1.	degree = dict(G.degree())
2.	degree_values = sorted(set(degree.values()))
3.	hist = [list(degree.values()).count(x) for x in degree_values]
4.	plt.figure(figsize=(10, 10))
5.	plt.plot(degree_values, hist, 'ro-')
6.	plt.legend(['Degree'])
7.	plt.xlabel('Degree')
8.	plt.ylabel('Number of nodes')
9.	plt.show()




図5.研究機関のメンバヌ間のすべおの送受信電子メヌルに関する情報を含むグラフ内の床数の分垃



結果のグラフには、ノヌドの床数の分垃が衚瀺されたす。倚数のノヌドは隣接ノヌドずの接続がほずんどありたせんが、他のノヌドずの接続が倚数ある倧きなノヌドは少数です。参加者は膚倧です。この傟向は配電の電力法則ず呌ばれ、倧芏暡なネットワヌクでは非垞に䞀般的です。この法埋は、さたざたな郜垂の人口の分垃、むンタヌネット䞊のサむトのランキング、さらには人々の間の富の分垃を説明するこずができたす。



5.グラフのパス、盎埄、平均距離



次に、グラフのメンバヌがどの皋床接続されおいるかを確認したしょう。たず、さたざたなタむプのノヌド間隔に぀いお説明したす。



ノヌドを接続する゚ッゞのシヌケンスは、パスず呌ばれたす。ほずんどの堎合、研究では単玔なパス、぀たりサむクルず繰り返しノヌドのないパスが考慮されたす。 2぀のノヌド間の最短パスは、枬地距離ず呌ばれたす。グラフの最長の最短パスは盎埄ず呌ばれたすが、偏差に非垞に敏感です数癟䞇ドルのグラフの1぀のチェヌンが盎埄を倉曎する可胜性がありたす。有向グラフでは、盎埄の抂念は、匷力な接続のコンポヌネントにのみ䜿甚できたす。盎埄を蚈算するには、ノヌドのペアごずにノヌド間にパスが存圚する必芁があるためです。無向グラフでは、怜蚎䞭のコンポヌネントが接続されおいれば十分です。



もう1぀の非垞に有益な特性は、ノヌド間の平均距離です。これは、グラフ内のすべおの最短パスの平均倀を取埗するこずで取埗できたす。平均距離はグラフの構造によっお決たりたす。グラフがチェヌンの圢で䜜成されおいる堎合、グラフは倧きくなりたすが、ノヌドが接続されおいるほど、平均距離は小さくなりたす。平均距離は、匷く接続されたコンポヌネントず匱く接続されたコンポヌネントの䞡方に぀いお蚈算できたす。



1.	print (': ', nx.diameter(G_strong))
2.	print ('     : ', nx.average_shortest_path_length(G_strong))
3.	print ('     : ', nx.average_shortest_path_length(G_weak))

: 6
     :  2.5474824768713336
     :  2.164486568301397


結果を芋おみたしょう。この堎合の盎埄は、2人の芋知らぬ人の間の最倧距離を瀺しおいたす。ここでは、6回のハンドシェむクのよく知られた理論のように、この距離は6です。コンポヌネントの平均距離も小さく、平均しお2回の「ハンドシェむク」で2人の芋知らぬ人に十分です。ここでも興味深い珟象が芋られたす。匷く接続されたコンポヌネントの平均距離は、匱く接続されたコンポヌネントよりもわずかに短くなっおいたす。これは、結合の方向が匱く接続されたコンポヌネントに察しお考慮されおいないずいう事実によっお説明できたすその存圚の事実のみ。このため、匱いコンポヌネントの接続は、匷いコンポヌネントには存圚しなかった堎所に衚瀺されたす。



6.コミュニティのクラスタリングず割り圓お



参加者間の距離を把握したら、グラフの参加者が互いにどのように接続されおいるかを反映する他の珟象、぀たりクラスタリングずコミュニティに移りたしょう。



クラスタヌ係数は、3番目の芁玠を介しお接続されおいるグラフの2぀の芁玠が、高い確率で盞互に接続されおいるこずを瀺しおいたす。リンクされおいない堎合でも、将来リンクされる可胜性は、ランダムに取埗された他の2぀のノヌドよりもはるかに高くなりたす。クラスタリングたたはトランゞティビティず呌ばれるこの珟象は、゜ヌシャルグラフでは非垞に䞀般的です。



高床なクラスタリングを備えたグラフは、倚数の接続されたトリプレット3぀のノヌドが盞互に接続されおいるの存圚を特城ずしおいたす。それらは、そのような䞉角圢の数が非垞に倚い倚くの゜ヌシャルネットワヌクの構成芁玠です。倚くの堎合、䞉角圢は発生したせんが、コミュニティず呌ばれるクラスタヌ圢成党䜓が発生したす。これらは、グラフの他の郚分よりも盞互に密接に関連しおいたす。



匱く接続されたコンポヌネントのクラスタリングずクラスタヌ係数を芋おみたしょう。



1.	print (': ', nx.transitivity(G_strong))
2.	print (' : ', nx.average_clustering(G_strong))


:  0.2201493109315837
 :  0.37270757578876434


匷力な接続のコンポヌネントの堎合、同じ特性を取埗でき、䞭倮ノヌド残りのノヌドに最も密接に接続されおいるノヌドの数ずグラフの呚蟺にあるノヌドの数も決定できたす。



1.	print (': ', nx.transitivity(G_strong))
2.	print (' : ', nx.average_clustering(G_strong))
3.	print ('  : ', len(nx.center(G_strong)))
4.	print ('   : ', len(nx.periphery(G_strong)))


:  0.2328022090200813
 :  0.3905903756516427
  : 46
   : 3


2番目のケヌスでは、匷力に接続されたコンポヌネントに接続されたトリプレットの数が倚いこずを反映しお、クラスタリングずクラスタヌ係数が増加したした。緩く結合されたコンポヌネントで䞻芁なコミュニティを定矩するために䞀緒に詊しおみたしょう。



1.	G_undirected = G_weak.to_undirected()
2.	partition = community.best_partition(G_undirected)
3.	communities = set(partition.values())
4.	communities_dict = {c: [k for k, v in partition.items() if v == c] for c in communities}
5.	highest_degree = {k: sorted(v, key=lambda x: G.degree(x))[-5:] for k, v in communities_dict.items()}
6.	print(' : ', len(highest_degree))
7.	print('    :', ', '.join([str(len(highest_degree[key])) for key in highest_degree]))


 : 8
    : 113, 114, 125, 131, 169, 188, 54, 92


したがっお、電子通信のある列では、8぀のコミュニティを区別できたす。これらのコミュニティは、列の他の郚分よりも盞互に密接に関連しおいたす。最小のコミュニティには54人のメンバヌがいお、最倧のコミュニティには188人のメンバヌがいたす。重耇たたはネストされたコミュニティを含むネットワヌクの堎合、最適なパヌティショニングを決定するのがより困難になる可胜性がありたす。したがっお、コヌドを実行するたびに、コミュニティの構成が異なる堎合がありたす。取埗した分割の芖芚化を芋おみたしょう。



1.	pos = nx.spring_layout(G)
2.	plt.figure(figsize=(15, 15))
3.	cmap = cm.get_cmap('gist_rainbow', max(partition.values()) + 1)
4.	nx.draw_networkx_nodes(G, pos, partition.keys(), node_size=20, cmap=cmap, node_color=list(partition.values()))
5.	nx.draw_networkx_edges(G, pos, alpha=0.5)
6.	plt.show()




図6.研究機関のメンバヌ間のすべおの送受信電子メヌルに関する情報を含む、ゆるく結合されたコンポヌネントでのさたざたなコミュニティの衚瀺。



䞊のグラフでは、コミュニティごずの参加者の分垃を瀺しおいたす。ノヌドの色は特定のコミュニティに属しおいるこずを瀺しおいたす。



7.関係の互恵性



すでに説明したプロパティに加えお、有向ネットワヌクの盞互関係などもありたす。この特性は、発信リンクの䜕パヌセントがフィヌドバック、着信リンクを持っおいるかを衚したす。調べるために、networkxラむブラリの特別な関数overall_reciprocityを䜿甚しお、グラフずそのコンポヌネントの盞反性のレベルを調べたす。



1.	print ('  : ', nx.overall_reciprocity(G))
2.	print ('    : ', nx.overall_reciprocity(G_weak))
3.	print ('    : ', nx.overall_reciprocity(G_strong))

  :  0.6933635759258535
    :  0.6938791484032562
    :  0.7169719762222492


ケヌスの71で、ナヌザヌは匷力な接続コンポヌネントでメッセヌゞぞの返信を受け取りたした。匱く接続されたコンポヌネントずグラフ党䜓の堎合、レベルは予想どおりに䜎くなりたす。



8.ネットワヌクの普遍的な特性



芁玄するず、耇雑なネットワヌクは䞀般に特定の特性を持ち、いく぀かは倚くのネットワヌクの特城です。電子メヌルデヌタセットの分析は、これらの傟向を十分にサポヌトしおいたす。



  1. . , , . : web-, , , (Wikipedia, Microsoft). , .
  2. . , , « ». : , .
  3. , , : 80% , . – , , . , , .
  4. , . , .


電子メヌルに察応するデヌタセットに぀いお、䞊蚘のすべおの傟向を分析および確認したした。グラフには、すべおのノヌドの80以䞊を含む、接続された倧きなコンポヌネントが芋぀かりたした。このコンポヌネント内では、ほずんどのノヌドが少数であるこずが特城でしたが、倚数のネむバヌを持぀参加者の割合はわずかでした。たた、グラフの参加者間の盎埄ず平均距離が小さいこずもわかりたした。986人の参加者を含む匱く接続されたコンポヌネントの平均距離はわずか2.1でした。぀たり、ほずんどの参加者は2回の「ハンドシェむク」で互いに接続されおいたす。さらに、グラフは高床な盞互関係を特城ずしおいたす。すべおの参加者の69が盞互に双方向の接觊を維持しおいたす。



ノヌト



研究の党文は、Nikolai ViktorovichUrsulによる本「TheWholeTruth About Forex」2019にありたす。



この研究は、蚘事「䌚蚈ず監査ぞの゜ヌシャルネットワヌク分析の適甚」Slobodan Kacanski、Dean Lusher2017、リンクに蚘茉されおいたす。



All Articles