Dune Analytics를 여행하는 Wizard를 위한 안내서

이전 포스팅에서는 온체인 데이터를 볼 수 있는 듄 애널리틱스를 소개했습니다. 이번에는 듄을 사용하기 위해 몇 가지 기본적인 가이드라인를 정리해보았습니다.

💡
듄에서 활동하는 데이터 분석가를 Wizard라고 합니다. 

듄을 사용하여 온체인 데이터 분석을 하기 위해 어떤 지식을 가지고 있어야 할까요? 저는 크게 핵심역량을 4가지라고 생각합니다.

  1. 온체인 데이터에 대한 이해(생성과 구조)
  2. 아이디어와 가설
  3. SQL 문법
  4. 시각화 방법론

하나씩 살펴보도록 하겠습니다.

⛓️온체인 데이터에 대한 이해

첫 번째로 온체인 데이터가 생성되고 기록되는 방식과 듄 등 데이터 제공 업체가 저장하는 방식을 알아야 합니다.

온체인 데이터 기본

온체인 데이터의 생성과정에 대해 깊이 알면 가장 좋겠지만 일반적인 사용자는 데이터를 직접 파싱할 일은 없으니 간단하게 어떤 데이터가 들었는지만 알아도 됩니다. 기본적으로 온체인 데이터에서 중점적으로 살피게 될 정보는 다음과 같습니다.

📚
블록체인의 데이터 저장 방식에 대해 모르시는 분이라면 오버랩스 김재윤님의 블록체인 설명 영상을 한 번 보시는 것을 추천합니다.
💡
해당 데이터는 이더리움 데이터를 기반으로 설명한 내용이며 체인에 따라 다른 내용이 있을 수 있지만, 큰 틀은 같습니다.
  1. block 정보: nonce, blockhash, block height 등에 블록 정보
  2. timestamp/age: 트랜잭션 관련 시간 정보
  3. from/to: 트랜잭션 발생의 주체, 발신자/수신자의 주소 정보
  4. contract: 트랜잭션에 참여한 컨트랙트 주소
  5. value/tokens transfered: 수신자에게 보내는 이더 또는 토큰량
  6. gas: 거래에 사용된 가스, 가스 한도, 채굴자 획득 가스

해당 데이터는 이더스캔에서 Txn Hash를 클릭하여 각 트랜잭션 정보를 정리된 형식으로 볼 수 있습니다. 하지만 해당 내용은 모두 16진수의 해시값으로 되어 있어 확인이 쉽지 않습니다.

듄의 데이터 추상화

듄은 전처리를 통해 레이블링과 데이터 재구성을 통해 사용자가 편하게 데이터베이스(Database, DB)를 사용할 수 있게 돕습니다. 이런 과정을 개발 분야에서는 데이터 추상화(Data abstraction)이라고 합니다. 해당 추상화 내용은 다음 링크를 통해 살펴볼 수 있습니다.

Dune Spellbook
Dune Spellbook documentation for dbt
설명이 부족하긴 합니다.

예시로 다음과 같은 형태로 DB를 제공합니다. DB는 엑셀/스프레드 시트와 같이 행과 열로 구성된 테이블 형태 데이터로 이해하시면 편합니다.

  • dex.trades: DeFi 중 dex의 거래 데이터를 모아둔 DB. 체인, dex 프로젝트 명,  프로젝트 버전, 시간, 토큰 쌍, 각 토큰 량, USD 가격, 관련 컨트랙트 주소 등을 컬럼으로 가짐
  • erc721_ethereum.evt_Transfer: 이더리움에서 발생한 NFT 트랜잭션을 모아둔 DB. 컨트랙트 주소, 발신/수신 주소, 토큰 번호(tokenId) 등을 컬럼으로 가짐

듄의 전처리 작업을 바탕으로 일반 사용자는 비교적 편하게 정리된 데이터를 가져올 수 있습니다. 예시만 봐도 알 수 있듯이 데이터를 알기 위해 각 프로젝트에서 사용되는 기능과 구조에 대한 이해는 필수입니다. 그렇기에 온체인으로 바로 진입하기 보다는 각 프로젝트에 대한 공부를 먼저하시는 것을 추천합니다.

그렇다면 이런 데이터를 통해 우리는 어떤 인사이트를 얻을 수 있을까요?

물론 데이터 제공 업체의 추상화를 맹신해서는 안됩니다. 새로운 컨트랙트가 반영이 안되어 있을 수 있으며, 데이터 업데이트가 실시간이 아닌 경우도 존재합니다.

💡아이디어와 가설

가장 중요한 것은 분석가의 가설과 아이디어입니다. 온체인 데이터와 일부 오프체인 데이터(코인 또는 토큰 가격 데이터 등)를 통해 어떤 가설을 세울 수 있을까요? 이미 이전 글에서 몇 가지 확인할 수 있는 내용을 소개드렸으나 가장 기본적인 아이디어는 다음과 같습니다.

사용자의 구매 이력을 모두 알고 있다면 무엇을 살펴볼 수 있을까?
  1. Dapp의 성장을 확인하고 싶다면 재구매/재사용 등을 확인하여 유저 리텐션을 확인할 수 있습니다.
  2. ERC-20, ERC-721 등 토큰 생태계의 건전성을 확인하고 싶다면 가격 변동성/손바뀜/점유율을 통해 탈중앙화 등을 관찰할 수 있습니다. 이상 거래 발생 시, 해당 주소를 추적하여 경로를 트래킹할 수도 있습니다.
  3. 투자자라면 고래의 토큰 거래의 흐름을 살펴 유사하게 투자할 수 있습니다. 난센 등 여러 온체인 데이터 서비스는 고래의 흐름을 추적하여 제공하고 있습니다.
  4. 최근 가장 거래가 많은 토큰을 살피며 투자 기회를 찾아볼 수도 있습니다.
  5. 새로운 컨트랙트 사용에 앞서 온체인 데이터를 통해 실사용자 수를 확인할 수 있습니다.
  6. 유사 컨트랙트(예. Dex: uniswap, sushiswap, etc)의 비교를 통해 사용형태나 체인 내 점유율을 살펴볼 수 있습니다. 특히 DeFi/NFT 마켓플레이스는 듄 내에서 자주 사용되는 데이터입니다.

가설 검정은 통계에서 사용되는 t-test 등 다양한 방식이 있습니다. 다만 듄 등 이런 데이터 커뮤니티에서는 이런 검정을 하는 케이스는 많지 않습니다. 통계에 대한 지식의 부재도 존재하며, 통계 검정보다 단순 시각화를 통한 인사이트 획득이 더 많은 건 아닐까 생각합니다.

💻SQL 문법

죄송합니다. 저는 아직 이런 게 재미있는 너드입니다. 출처: https://devhumor.com/tags/sql

듄은 PostgreSQL을 사용하여 데이터를 접근합니다. 즉, DB에 접근하고 싶다면 해당 SQL을 사용하여 프로그래밍 해야합니다. SQL을 자세히 다루기 위해서는 많은 시간이 필요하지만 기본적인 코드만 알고 있어도 듄을 이해하는 데 도움이 됩니다.

조금 높은 수준에서 기능을 살펴보겠습니다. 데이터를 살피기 위해서는 크게 다음과 같은 기능이 필요합니다. 엑셀/스프레드시트를 잘 다루시는 분들이라면 공감하실 수 있을거라 생각합니다.

각 기능과 사용하는 명령어를 매칭시키면 다음과 같습니다. (참고로 SQL은 대소문자를 구분하지 않습니다.)

  1. 데이터베이스 선택: FROM
  2. 컬럼 선택과 컬럼 생성: SELECT, * 는 모든 데이터 선택 의미
  3. 필터링: WHERE, 만약 더 많은 필터링을 하고 싶다면 AND 로 연결
  4. 그룹화: GROUP BY
  5. 정렬: ORDER BY
  6. 데이터 결합: LEFT JOIN, 결합 조건으로 ON 또는 공통 컬럼 USING(컬럼명) 을 사용할 수 있음
  7. 데이터 변환: ::FLOAT 실수(소수점) 변환, ::INTERVAL 기간 단위로 변환
  8. 수식과 함수: DATA_TRUNC 특정 시간 단위로 끊기, SUM 합, AVG 평균, MEDIAN 중앙값, MAX 최대, MIN 최소, 그 외 사칙연산도 가능.
  9. 컬럼명 설정(aliasing): AS, 종종 생략하고 공백으로만 구분하는 경우도 존재
  10. 넘버링: ROW_NUMBER() OVER()
  11. 개수 한정: LIMIT

대략 20개 정도의 명령어만 알고 있다면 데이터 분석은 방법론이 더 중요해집니다. 모두 외울 필요는 없습니다. 구글과 스택오버플로에는 여러분이 원하는 대다수의 방법을 알려주니까요.

조금 더 세부적인 사용법을 위해 간단한 튜토리얼을 준비하고 있습니다. 만약 나는 당장 코딩을 해야만 한다!!이신 분들은 듄에서 제공하는 영상을 살펴보시기 바랍니다.

강의력이 좋지는 않지만 듄에서 공식으로 제공하는 간단한 대시보드 생성 프로세스 튜토리얼입니다. 1편과 2편, 그리고 SQL을 공부할 수 있는 사이트도 Dune에서는 제공하고 있습니다. 링크를 첨부하니 궁금한 분들은 살펴보시기 바랍니다. 

📊시각화와 대시보드

제 대학원 전공이라 시각화라 할 말이 많지만...

듄은 테이블, 개별 값, 시각화 차트를 구성하여 대시보드를 만듭니다.

듄에서 제공하는 시각화

시각화 차트는 5가지를 제공하며 각각의 포인트는 다음과 같습니다.

  • 막대 차트(Bar Chart): 양적 비교에 가장 적합한 시각화입니다. 대소 비교 및 비율 비교에 적합합니다.
  • 선 그래프(Line Chart): 연속적인 데이터에 따른 비교에 적합하니다.
  • 산점도(Scatter Chart): 데이터 간의 관계 비교에 적합합니다.
  • 면적 차트(Area Chart): 연속 기간의 양적 비교에 적합합니다. 다만 기울기에 따른 오해가 발생할 수 있어 주의해야 합니다.
  • 파이 차트(Pie Chart): 양적 비교에 적합하지는 않지만 전체를 1로 보고 비교할 수 있어 점유율 등에 적합합니다.

시각화에서 행이 지나치게 많으면 시각화 과정에서 컴퓨터 리소스를 많이 먹습니다. 양이 많은 데이터에서 개별 데이터가 중요한 것이 아니라면 "상위 데이터" 7~8개와 "그 외"로 구분하여 시각화하는 것을 추천합니다.

대시보드 레이아웃

대시보드에도 여러 포인트가 있습니다. 기본적인 내용은 아래와 같습니다.

  • 기본적으로 시야는 좌측 상단에서 우측 하단으로 향한다.
  • 강조할 내용은 상단 또는 중앙에 위치해야 한다.
  • 웹 기반 시각화는 스크롤을 통해 움직이니 큰 흐름은 위에서 아래로 배치한다.
  • 유사 데이터는 비슷한 위치에 모아둔다.
  • 유사 데이터 비교 시에는 상하보다 좌우 배치에서 비교가 용이하다.
  • 선 그래프는 가로/세로 비율에 따라 기울기가 변경되니 주의해야 한다.
  • 막대 그래프는 될 수 있으면 크기 정렬을 통해 비교를 돕는다.
  • 색상은 포인트 색상과 일반 색상으로 구분하는 것이 좋으며 5~7개만 사용한다.
  • 독자는 제작자와 다른 의도를 가질 수 있으므로 텍스트를 통해 추가 설명을 넣는 것이 중요하다.

마치며

듄은 초기 허들이 높고 플랫폼 내 온보딩도 불친절하지만 진입하면 재미있는 요소가 상당히 많습니다. 많은 분들이 온체인 데이터 분석에서 재미를 느끼면 좋겠네요.

Kaggle에서 해온 것처럼 Dune Analytics에서도 한 번 끝을 찍어보겠습니다😎
다들 화이팅!


추가로 소소한 데이터 분석은 제 트위터와 텔레그램에 공유 예정이니 많은 팔로우 부탁드립니다!