오늘의 인기 글
최근 글
최근 댓글
Today
Total
05-09 00:00
관리 메뉴

우노

[Graph] Graphalytics의 Graph data를 Matrix data로 변환하는 방법 본문

Data/Graph & Matrix

[Graph] Graphalytics의 Graph data를 Matrix data로 변환하는 방법

운호(Noah) 2020. 10. 7. 22:45

Graph data

  • Graphalytics에서는 테스트 및 표준 벤치 마크에 사용되는 Graph dataset를 제공한다.
    • https://graphalytics.org/datasets
    • "datagen-*" 로 시작하는 데이터가 임의로 만든 Graph dataset 이다.
    • 원하는 파일을 다운로드 후 압축을 해지하면 다양한 파일들이 존재한다.
      • 입력 데이터 (정점 및 에지 파일)
      • 각 알고리즘 (BFS, WCC, PR, CDLP, LCC, SSSP)에 대한 유효성 검사 데이터 및 메타 데이터 (속성 파일)
    • Matrix data를 사용하고 싶다면 확장자명이 .e로 끝나는 파일을 사용하면 된다.

Matrix data

  • 확장자명이 .e로 끝나는 Matrix data를 활용하기 위해선 몇가지 전처리가 필요하다.

    • 1) vertex를 정렬 후 idx를 0부터 순서대로 재설정

    • 2) 행열에 해당하는 element 할당

    • 예제 코드

        import random
      
        inputfile = "/Users/bdlab/Downloads/datagen-7_5-fb/datagen-7_5-fb.e"
        outputfile = "/Users/bdlab/Desktop/Graph & Matrix data/Square Matrix data/Graphalytics/datagen-7_5-fb vertex 633432 edge 34185747"
      
        # vertex를 중복 없이 저장할 집합
        v_set = set([])
      
        # edge file을 읽어 모든 vertex를 중복 없이 저장
        with open(inputfile,"r") as e_file:
            for e in e_file:
                e_split = e.split(" ")
                v_set.add(int(e_split[0]))
                v_set.add(int(e_split[1]))
      
        # 저장 된 vertex를 오름차순 정렬한 뒤 idx를 0부터 순서대로 재할당
        v_dic = {}
        v_idx = 1
        for v in sorted(v_set):
            v_dic[str(v)] = v_idx
            v_idx += 1    
      
        # 최종 파일
        with open(outputfile,"a+") as wf:
            # Inputfile을 읽어 Outputfile에 쓰기
            with open(inputfile,"r") as e_file:
                for e in e_file:
                    e_split = e.split(" ")
                    wf.write(str(v_dic[e_split[0]])+" "+str(v_dic[e_split[1]])+" "+str(random.random())+"\n")
Comments