Julia 패키지 종속성 그래프의 PageRank

우리는 모두 NASA Webb 망원경의 images에 깜짝 놀랐습니다. 왠지 이 이미지 중 일부는 내가 Julia 패키지 종속성 그래프를 위해 만든 오래된 그래프 시각화를 떠올리게 합니다. 이제 다른 종류의 별인 💫Julia 패키지💫에 대해 이야기해 봅시다.

자료.



여기서 무엇을 만들려고 합니까? 모든 노드가 등록된 Julia 패키지를 나타내고 모든 가장자리가 두 패키지 간의 종속성 존재를 나타내는 그래프를 작성하려고 합니다. 종속성 정보는 일반적으로 모든 패키지와 관련된 .toml 파일에서 찾을 수 있습니다.

이 그래프를 생성하는 데 사용한 전체 코드는 here 입니다.

재미있는 사실: 2020년 10월에 이 작업을 마지막으로 수행했을 때 4446 패키지를 찾았고 전체 목록은 here 입니다. 하지만 어제 같은 작업을 수행했을 때 7949개의 패키지를 찾았습니다. 2년 이내에 3500개 이상의 패키지!! 📈📈📈

그리고 그것으로 우리는 데이터를 가지고 있습니다... 레이블 파일은 다음과 같습니다.

모든 라인은 패키지에 해당하며 라인 ID는 그래프의 노드 ID입니다. 예를 들어 그래프의 노드 ID 1 은 패키지 COSMA_jll 에 해당합니다.

에지 목록 파일은 다음과 같습니다.



첫 번째 줄은 from_nodes 의 수, to_nodes 의 수 및 총 간선 수를 나타냅니다. 나머지 선은 from node_id, to node_id, weight 을 나타냅니다. 이 경우 모든 가중치는 1 이며 이는 비가중 그래프임을 의미합니다.

페이지 랭크.



이제 재미있는 부분입니다! 페이지랭크 🎉.
MatrixNetworks.jl 의 PageRank 구현을 사용했으며 코드는 다음과 같이 간단합니다.

A = MatrixNetworks.readSMAT("Julia-dependency-graph.smat")
A = max.(A, A') # I make sure the graph is undirected.
p = MatrixNetworks.pagerank(A, 0.85) # Run PageRank.


거의 준비가 되었습니다... 모든 노드에 대한 PageRank 값이 있고 수동으로 검사할 수 있습니다... 하지만 그래프를 시각화하는 것도 재미있지 않을까요? 이를 위해 알고리즘 GLANCE(이 paper에서)을 사용합니다.

이제 모든 구성 요소가 있습니다.
노드 및 해당 (x,y) 좌표(GLANCE에서) 및 해당 PageRank 값(MatrixNetworks에서)... 남은 것은 PageRank 값에 해당하는 노드 크기로 그래프를 그리는 것입니다.

그리고... 짜잔... 여기 있습니다: julia 패키지 종속성 그래프의 PageRank!!



이제 호기심 많은 사람들은 PageRank 값이 가장 높은 가장 높은 패키지가 무엇인지 궁금해하고 있습니다. 다음은 상위 15개입니다.


꽤 멋지지 않습니까?! 주목해야 할 또 다른 사항은 일부 관련 패키지가 어떻게 서로 가까이 위치하게 되었는지입니다. 이것은 GLANCE의 힘 덕분입니다. 확대하면 함께 클러스터된 패키지가 있음을 알 수 있습니다. 수동 검사에서 많은 생물학 관련 패키지가 함께 클러스터되어 있고 JuMP 관련 패키지가 함께 클러스터되어 있고 몇 가지 다른 범주가 있음을 알았습니다. 아마도 향후 블로그 게시물의 주제가 될 것입니다 :).

좋은 웹페이지 즐겨찾기