Julia 패키지 종속성 그래프의 PageRank
자료.
여기서 무엇을 만들려고 합니까? 모든 노드가 등록된 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 관련 패키지가 함께 클러스터되어 있고 몇 가지 다른 범주가 있음을 알았습니다. 아마도 향후 블로그 게시물의 주제가 될 것입니다 :).
Reference
이 문제에 관하여(Julia 패키지 종속성 그래프의 PageRank), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/nassarhuda/pagerank-on-the-julia-package-dependency-graph-59d8텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)