이 글에서는 왕좌의 게임의 주요 캐릭터로 구성된 가문간 유대관계를 네트워크 분석으로 연구해 보고자 합니다. 당연히 우리는 스타크 가문 (특히 Ned와 Sansa)와 라니스터 가문 (특히 Tyrion)이 왕좌의 게임에서 가장 중요한 가족 관계라는 것을 알 수 있습니다. 그들은 또한 스토리 라인의 많은 부분을 연결하고 서사의 중심 부분입니다.

네트워크란 무엇?

네트워크는 상호 연결된 노드 / 정점의 그래프입니다. 노드는 예를 들어 소셜 네트워크에있는 사람들이며 ties/edges를 통해 연결됩니다.

네트워크 분석은 무엇을 말해 줄 수 있을까?

네트워크 분석은 예를 들어. 사회적 또는 전문적 네트워크에서 관계를 탐색하는 데 사용됩니다. 그러한 경우, 우리는 일반적으로 다음과 같은 질문을 할 것입니다.

  • 한 사람당 몇 명의 연결이 있을까?
  • 가장 관련이있는 (즉 영향력있거나 중요한) 사람은 누구일까?
  • 밀접하게 연결된 사람들의 집단이 있을까?
  • 사람들의 집단을 연결하는 핵심 인물이 몇 명 있을까?
  • 기타 등등

이 답변을 통해 사람들이 상호 작용하는 패턴에 대한 많은 정보를 얻을 수 있습니다.

 

왕좌의 게임 캐릭터 네트워크

이 네트워크의 기본은 Kaggle ‘s Game of Throne 데이터 세트 (character-deaths.csv)입니다. 대부분의 가족 관계가 그 데이터 세트에서 빠져 있었기 때문에 나는A Wiki of Ice and Fire에 기반하여 일부 정보를 추가하고 왕좌의 게임 위키에서 정보를 긁어 모았습니다. 관련 Github 페이지에서 네트워크를 생성 한 방법에 대한 전체 코드를 찾을 수 있습니다.

초기 네트워크를 그리기 위해 igraph를 사용하고 있습니다. 그렇게하기 위해, 나는 먼저 에지와 노드 테이블로부터 그래프를 생성합니다. 에지 테이블은 처음 두 컬럼에 소스 및 대상 노드를 포함하고 선택적으로 에지 속성을 갖는 추가 컬럼을 포함합니다. 여기에는 상호 작용 (어머니, 아버지 또는 배우자) 유형, 각 모서리에 지정하려는 색상 및 선 유형이 있습니다. 책과 TV 시리즈가 약간 씩 다르므로 지원되거나 암시되는 모서리만 소개했습니다.

TV 시리즈는 책의 원래 서사의 일부가 아닙니다. 이러한 에지는 단색 대신 점선으로 표시됩니다. 불특정 부모의 출처가있는 에지의 추가 색상도 소개됩니다. 원래 문자 이름에서 추출한 상호 작용 (예 : ‘… 아들 / 딸의 …으로 끝나는 문자)은 어머니 또는 아버지를 의미 할 수 있습니다. 이제 그들은 Jon Snow의 경우처럼 생물학적이고 사실상의 아버지가있는 불분명 한 친자 관계 또는 사례를 보여줍니다.

nodetable은 edgetable의 소스 또는 대상인 각 문자에 대해 하나의 행을 포함합니다. 노드 속성의 수와 유형을 지정할 수 있습니다. 여기에서는 성 / 남성 (남성 = 1, 여성 = 0), 집 (각 캐릭터가 태어난 집) 및 인기도와 같은 원래 Kaggle 데이터 세트의 하위 항목을 선택했습니다. House2는 주요 주택에만 색을 지정하기위한 것이 었습니다. 모양은 성을 나타냅니다.

기본적으로 우리는 유향 그래프를 가지고 있습니다.

범례를 그릴 때 가장자리와 노드 색상을 요약합니다.

 

이제 그래프 객체를 플로팅 할 수 있습니다 (여기에서는 Fruchterman-Reingold 레이아웃을 사용합니다).

고해상도 pdf를 보려면 이미지를 클릭하십시오 :

family_ties_1

 

노드 색은 주요 주택을 표시하고 노드 크기는 문자의 인기도 및 노드 모양을 성별로 나타냅니다 (남성의 경우 사각형, 여성의 경우 원형). 가장자리 색상은 상호 작용 유형을 표시합니다.

우리가 볼 수 있듯이 왕좌의 게임 세계의 일부 캐릭터 만으로도 네트워크는 이미 상당히 커졌습니다. 이미지를 클릭하면 pdf 를 열고 플롯의 특정 부분을 확대하고 노드 레이블 / 문자 이름을 읽을 수 있습니다.

우리가 바로 볼 수있는 것은 단지 집들 사이의 연결이 제한되어 있고 Greyjoys가 다른 어떤 것과도 관계가없는 유일한 집이라는 것입니다.

 

네트워크 분석

이 네트워크에서 가장 중요한 캐릭터가 누구인지 어떻게 알 수 있을까요?

캐릭터가 다른 많은 캐릭터와 연결되어 있다면 캐릭터는 “중요”하다고 생각합니다. 네트워크 속성이 몇 가지 있습니다. 이를 위해, 부모 / 자식 관계를 상호간에 설명하는 방향이 없는 것으로 간주하고 있습니다.

중심성 (Centrality)

중심성(Centrality) 은 노드로 들어오고 나가는 에지 수를 나타냅니다. 높은 중심성 네트워크는 연결이 많은 노드가 거의 없으며 낮은 중심성 네트워크는 비슷한 수의 에지를 가진 많은 노드를 가지고 있습니다.

“중앙 집중화는 정점의 중심점에서 그래프 레벨 중앙 집중화 측정을 생성하는 방법입니다.” centralize() 도움말

전체 네트워크의 경우, 정점의도 (centr_degree ()), 근접 (centr_clo ()) 또는 고유 벡터 중심 (centr_eigen ())으로 중심을 계산할 수 있습니다.

노드 차수 (Node degree)

노드 차수 또는 차수 중심성은 노드가 네트워크에서 얼마나 중앙에 있는지 (즉, 자신이 가지고있는 입출력 에지 수 또는 하나의 에지를 통해 직접 연결된 다른 노드 수)를 나타냅니다.

“정점의 차수는 가장 기본적인 구조적 속성 인 인접한 모서리의 수입니다.” degree() 도움말

따라서 각 노드의 아웃 엣지 또는 인 엣지의 수를 계산할 수 있습니다.

이 경우 노드 수는 캐릭터가 가진 얼마나 많은 자손 및 배우자를 반영합니다. 3 명의 아내들과 몇 명의 아이들과 함께, Theon과 Asha / Yara의 할아버지 인 Quellon Greyjoy가 Walder Frey ‘s의 자손과 모든 것을 포함 시켰을 때, 그는 쉽게 정상에 올랐지만 네트워크는 무한히 더 혼란 스럽습니다.

근접성 (Closeness)

노드의 근접성은 다른 모든 노드와의 거리를 나타냅니다. 가장 가까운 친밀도를 가진 노드가 더 중앙에 위치하므로 많은 다른 노드에 정보를 분산시킬 수 있습니다.

가장 가까운 친밀감을 지닌 캐릭터는 왕자의 게임 에서 다양한 스토리 라인과 가문을 연결하는 중심 캐릭터를 둘러싸고 있습니다.

 

사이 중심성(Betweenness centrality)

Betweenness는 노드 간의 최단 경로 수를 나타냅니다. 중개 성 중심성을 갖는 노드는 다른 많은 노드들 사이의 경로 상에 있으며, 이는 서로 다른 노드 그룹 간의 키 연결 또는 브리지인 사람들입니다. 소셜 네트워크에서 이러한 노드는 정보를 광범위하게 전달할 가능성이 높기 때문에 매우 중요합니다.

igraph 함수 betweenness ()는 꼭지점의 중간을 계산합니다. edge_betweenness ()는 가장자리 사이를 계산합니다.

“꼭지점과 가장자리의 간격은 정점이나 가장자리를 통과하는 측지학 (최단 경로)의 수에 의해 (대략) 정의됩니다.” estimate_betweenness ()를 위한 igraph 도움말

이제 vertex.size와 edgeness betweenness를 이 plot 함수의 edge.width로 전달하여 플롯 할 수 있습니다.

family_ties_1

네드 스타크 (Ned Stark)는 가장 높은 타성을 지닌 캐릭터입니다. 그와 그의 자녀들 (특히 Sansa와 Tyrion과의 결혼 준비)이 다른 집들과 연결되어 그 이야기가 펼쳐지는 중심점이기 때문에 이것은 의미가 있습니다. 그러나 네트워크에서 (예 : Stark가문의 조상) 누가 포함시키지 않고 누가 (예 : Targaryen과 Frey 패밀리 트리 전체의 복잡한 난장판) 이 결과를 만들 수 있는지에 대한 내 선택이 중요하다는 것을 명심해야합니다.

 

직경(Diameter)

두 노드 간의 최단 경로와 달리 가장 긴 경로 또는 직경을 계산할 수도 있습니다.

네트워크에서 가장 긴 경로는 21 개의 노드를 연결합니다.

“get_diameter는 실제 지름의 경로를 반환합니다. 직경 길이의 최단 경로가 여러 개있는 경우 발견 된 첫 번째 경로를 반환합니다. ” diameter () 도움말

이를 플롯팅 해보면,

 

family_ties_1

Transitivity

“Transitivity는 꼭지점의 인접한 꼭지점이 연결될 확률을 측정합니다. 이것은 때때로 클러스터링 계수라고도합니다. “t ransitivity () 도움말

전체 네트워크에 대한 연결된 트리플에 대한 삼각형의 전환율 또는 비율을 계산할 수 있습니다.

또는 각 노드에 대해 :

우리의 가족 네트워크이기 때문에, 하나의 전이 성을 가진 캐릭터는 부모 또는 자손과 삼각형을 이룹니다.

PageRank 중심성(PageRank centrality)

PageRank (원래 Google에서 검색 결과의 중요도를 평가하는 데 사용됨)는 고유 벡터 중심성과 유사합니다. 고유 벡터 중심성은 그들이 가지고있는 고차 노드에 대한 연결 수에 따라 네트워크의 노드 점수를 계산합니다. 따라서 노드의 중요도를 측정합니다. PageRank는 들어오는 가장자리 (또는 링크)가 많은 경우 노드를 더 중요하게 간주합니다.

Oberyn Martell, Quellon Greyjoy 및 Walder Frey는 모두 배우자 수가 가장 높으므로 자녀와 손주는 PageRank에서 가장 높은 점수를 받았습니다.

 

네트워크의 매트릭스 표현(Matrix representation of a network)

노드 간의 연결은 인접성 매트릭스로 표현 될 수도 있습니다. igraph의 as_adjacency_matrix () 함수를 사용하여 그래프 객체를 인접성 행렬로 변환 할 수 있습니다. 두 노드 사이에 모서리가있을 때마다 행렬의이 필드에 1이 할당되고 그렇지 않으면 0입니다.

고유 벡터 중심(Eigenvector centrality)

이제 우리는 인접 행렬의 고유 값과 고유 벡터를 계산할 수 있습니다.

가장 높은 고유치를 갖는 고유 벡터는 그 꼭짓점을 높게 평가하고, 다수의 예를 갖거나 많은 에지를 갖는 꼭지점에 연결됩니다.

가족 관계가 매우 높기 때문에 (즉, 소수의 연결 만 있지만 거의 모든 삼각형) Greyjoys는 가장 높은 고유 값으로 채점되었습니다.

우리는 고유 벡터 중심성 점수를 다음과 같이 찾을 수 있습니다.

고유 벡터 중심성을 고려할 때, Tywin과 핵심 Lannister 가족 점수가 가장 높습니다.

가장 중요한 인물은 누구일까요?

이제 모든 노드 레벨 정보를 비교하여 왕좌의 게임에서 가장 중요한 문자를 결정할 수 있습니다. 이러한 노드 레벨 특성은 기계 학습 알고리즘의 입력으로 사용될 수도 있습니다.

주요 주택의 모든 캐릭터를 살펴 보겠습니다.

 

family_ties_1

우리는 Stark 가문 (특히 Ned와 Sansa)와 Lannister 가문 (특히 Tyrion)이 왕좌의 게임에서 가장 중요한 가족 관계라고 말할 수 있습니다.

 

노드 그룹(Groups of nodes)

우리는 또한 우리의 네트워크에서 쌍둥이 (두 노드의 쌍),triads (세 노드의 그룹) 및 더 큰 그룹을 분석 할 수 있습니다. dyad의 경우 sna의 igraph 또는 dyad.census ()에서 dyad_census () 함수를 사용할 수 있습니다. 둘 다 동일하며 네덜란드와 Leinhardt dyad 인구 조사를 계산합니다.

  • mut: 상호 연결이있는 쌍의 수 (우리의 경우, 배우자)
  • asym: 비 상호 연결 (원래 네트워크에서 : 어머니 – 자식 관계와 아버지 – 자식 관계가 있지만 쌍방향 네트워크에서는 없음)이있는 쌍의 수
  • null: 그들 사이의 연결이없는 쌍의 수

The same can be calculated for triads (see

?triad_census

for details on what each output means).

triads에 대해서도 같은 것을 계산할 수 있습니다 (각 출력의 의미에 대한 자세한 내용은

?triad_census

참조).

우리가 지정한 길이의 경로와 사이클 수를 계산할 수도 있습니다. 에지의 경우, 주어진 최대 길이까지의 모든 경로 또는 사이클에 대한 카운트의 합을 얻습니다. 정점 / 노드의 경우 각 노드가 속한 경로 또는 사이클 수를 얻습니다.

이것은 우리가 함께 플롯팅을 할 수 있습니다

family_ties_1

“(최대) 파벌은 상호 인접한 꼭지점의 최대 집합입니다.” clique.census () 도움말

 

family_ties_1

이 네트워크에서 가장 큰 노드 그룹은 3 개입니다. 즉 모든 부모 / 자식 관계입니다. 그러므로, 그것들을 모두 그려내는 것은 실제로 의미가 없지만, 우리는 이것을 플롯팅하고 색을 입힐  수 있었습니다.

 

클러스터링(Clustering)

노드 그룹을 에지 간의 관계에 따라 클러스터링하여 네트워크 내의 그룹을 찾을 수도 있습니다.

 

family_ties_1

또는 전파 라벨을 기반으로  하실 수 있습니다.

 

family_ties_1

네트워크 속성 (Network properties)

NetIndices 패키지의 GenInd()와 같은 다른 함수에 인접성 행렬을 공급할 수도 있습니다. 이 함수는 구획 수 (N), 총 시스템 처리량 (T ..), 전체 시스템 통과 (TST), 내부 링크 수 (Lint), 총 링크 수 (Ltot) 등과 같은 네트워크 특성 수를 계산합니다. 밀도 (LD), 연결 (C), 평균 링크 무게 (Tijbar), 평균 구획 통과 (TSTbar) 및 네트워크의 서브 시스템의 구획화 또는 연결 정도 (Cbar)도 계산 합니다.

대안으로, 네트워크 패키지는 네트워크 속성을 얻기위한 추가 기능을 제공합니다. 여기에서 우리는 우리 네트워크의 인접 매트릭스를 다시 적용하여 네트워크 객체로 변환 할 수 있습니다.

이 네트워크 개체에서 예를 들어 네트워크 내의 쌍들과 가장자리 수와 네트워크 크기를 구하면 다음과 같습니다.

“equiv.clust는 대략적인 등가성 (equiv.fun)의 정의를 사용하여 네트워크 위치의 계층 적 클러스터링을 형성합니다. dat가 여러 릴레이션으로 구성되어있는 경우, 지정된 모든 릴레이션은 동등한 클러스터링을 형성 할 때 함께 고려됩니다. ” equiv.clust() 도움말

 

family_ties_1

 

sna 패키지에서 예를 들어 그래프의 밀도와 꼭짓점이나 모서리의 이원적 상호성을 알려주는 함수를 사용해 봅시다.


 

 

참조[1]: Network analysis of Game of Thrones family ties | R-bloggers

참조[2]: Game of Thrones Explore deaths and battles from this fantasy world