从0到1构建你的Dune Analytics看板(实战篇)
写在前边 本篇内容主要是一步一步地说明构建一个看板的过程,做一个整理钱包行为与以太坊币价关系的分析看板,以孙哥钱包(0x3ddfa8ec3052539b6c9549f12cea2c295cff5296)为例 有任何问题或者建议欢迎DM Twitter@Pro_0xBi一、我想看哪些数据?我们观察整理钱包的行为其实就是看钱包跟交易所之前的充提行为。但是有的时候整理钱包并不会直接整理到交易所,有可能中转一下再进入交易所。所以理论用一个钱包以及他的所有关联钱包作为一个集合来观察这个行为会比较合适。这里我们做1个简化:以孙哥为例,做一个钱包转入、转出ETH的行为与ETH价格之间的关系的分析。 另外 如果你想按照相对严谨的计算口径做分析,我这里提供两个可能有用的东西 1.这个Query可以用来取某一个钱包的疑似关联钱包,里边的逻辑可以跟自己需要做调整 (查找跟这个钱包有ETH转入转出关系的所有钱包,累积转入或者转出需要超过100ETH) https://dune.com/queries/666266 2.如果你要看充提交易所的行为,那需要首先有交易所的地址。我自己整理了一批交易所标签,可以...
【持续更新】链上数据分析内容汇总
Twitter: @Pro_0xBi目录一、从0到1构建你的Dune Analytics看板从0到1构建你的Dune Analytics看板(基础篇):https://mirror.xyz/0xbi.eth/6cbedGOx0GwZdvuxHeyTAgn333jaT34y-2qryvh8Fio 从0到1构建你的Dune Analytics看板(实战篇):https://mirror.xyz/0xbi.eth/603BIaKXn7s2_7A84oayY_Fn5XUPh6zDsv2OlQTdzCg 从0到1构建你的Dune Analytics看板(常用表结构):https://mirror.xyz/0xbi.eth/uSr336PzXtqMuE_LPBewbJ1CHN2oUs40-TDET2rnkqU二、BTC的周期顶部以及底部判断方法研究1.基于MVRV以及CDD的大周期的抄底方法 2.基于永续合约持仓的衍生品偏离度风险指标三、基于以太坊链上数据的分析以及看板工具1.著名巨鲸在以太坊上持仓情况跟踪 2.追踪以太坊上某个钱包的某个Token持仓变化(小时级别) 3.Ethereum ...
从0到1构建你的Dune Analytics看板(常用表结构)
写在前边 我自己相对熟悉Ethereum的表,这里只包含Ethereum相关的表结构 其他网络的表后续有机会再补充吧。另外本篇的内容之前写过一个Notion版本,如果看过那个这篇就不用看了,基本跟那个一致 有任何问题或者建议欢迎DM Twitter@Pro_0xBi一、通用说明1.合约地址或者钱包地址用0x.....中的 ’ 0 ’ 在表里都默认替换成了 ’ \ ’如地址 0x9b22a80d5c7b3374a05b446081f97d0a34079e7f 实际存的数据是:\x9b22a80d5c7b3374a05b446081f97d0a34079e7f a.如果想在SQL中引入变量可以用如下处理,可以避免输入带 ’ \ ’这种奇怪的格式:wallet_address= CONCAT('\x', substring('{{wallet_address}}' from 3))::bytea b.对外展示某个字段的时候可以用转成字符串然后用replace(这个方法有点笨,可能有更好的方法)replace(cast(wallet_address as varchar),'\','0'...
Data Analytics

写在前边
本篇内容主要是目的是介绍一些略微偏技术层面的基础知识,这些是学习使用Dune Analytics的前置条件。不要对这些稍微稍微偏技术内容有抵触心理。实际使用中经常用到的SQL语法其实就那几种,你可以认为其实就是学了几个单词的用法,花时间认真看完基本都能看懂
有任何问题或者建议欢迎DM Twitter@Pro_0xBi
首先搞明白3个基础的问题?
简单来说是:
1.Dune Analytics团队把区块链上的数据清洗后形成结构化的数据存入数据仓库,然后做了一个工具让有一些SQL基础的人能够按照自己的需求灵活地查询数据。
2.平台还的提供了数据可视化的能力,查出来的数据可以方便地做成做成图以及看板
说人话就是说就是出于数据统计的需要,把一些数据分门别类地存储起来,存储的载体是【数据表】。针对某一个或者一些主题的一系列【数据表】合在一起就是数据仓库。
注意:
这里的数据可以是结果数据(比如Uniswap上线以来某个交易对每天的交易量统计)
也可以是过程数据(Uniswap上线以来某个交易对发生的每一条交易记录明细:谁发起的,用A换B,交易时间,tx_hash,交易数量….)
假设你想吃脆香米巧克力,但是你这会儿出不了门,你就叫个跑腿说:我需要一盒巧克力,他的牌子是脆香米。跑腿去了趟超市把巧克力买来送到你家。
类比过来SQL就是你说的那句话,Dune Analytics就是个跑腿儿,他可以让你可以跟数据仓库对话,并且将数据仓库里的数据给你搬出来给你。
你可以认为表就是一个一个的Excel 表,每一个Excel 表里存的不同的数据。以我最常用的表为例erc20."ERC20_evt_Transfer"(ERC20代币的转账日志)

表的字段如下
from:从哪个钱包转的币
to:币转到了哪个钱包
value:转了多少币
contract_address:转的哪个币(ERC20代币的合约地址,一般可以在CMC查某一个代币的合约地址)
evt_tx_hash:这笔转账的tx hash是什么
evt_index:这条数据是这个交易的第几笔,1个交易可能存在多笔数据,比如你在uniswap交易你用APE兑换AAVE,可能就会被拆成2笔数据APE→ETH,ETH→AAVE
evt_block_time:交易被打包的时间
evt_block_number:交易被打包的区块高度
SQL最基本的结构或者语法就是
select : 取哪个字段?
from :从哪个表里取?
where :限制条件是什么?
select
"from"
,"to"
,"value"
from erc20."ERC20_evt_Transfer"
where "from" = '\xb1a2b43a7433dd150bb82227ed519cd6b142d382'
and "contract_address" = '\xe6ee69495b571e1042f760d7f34009164aff87a2'

额外说明一下
关于钱包/合约地址或者是tx hash,实际存到数据库里都做了一层处理:所有的【0x】中的【0】都替换成了【\】
select多个字段用【英文】逗号隔开,SQL中涉及的逗号引号都必须是英文格式,否则会报错
【where】后边如果有多个条件,想多个条件取交集的时候用 【and】连接这些条件,取并集用【or】连接
带引号的from是表里的一个字段名,表名前的from是SQL的语法词

常见的聚合函数
count()
计数,计算符合要求的数据一共有多少行,如果需要按照某个字段去重,比如按照【to】去重,就是count(distinct “to“ )
sum()
求和,比如算孙哥今年以来一共向币安转了多少ETH,就需要用sum()加一下
max()
取最大,比如算孙哥今年以来一共向币安最多一次转了多少ETH,就需要用max()算一下
min()
取最小
avg()
取平均
聚合函数就是在你where限制条件下取出来所有的数据,然后再对他们用函数聚合
-- 换成 '\x5ca9a71b1d01849c0a95490cc00559717fcf0d1d'
select
"from"
,"to"
,"value"
from erc20."ERC20_evt_Transfer"
where "from" = '\xb1a2b43a7433dd150bb82227ed519cd6b142d382'
and "contract_address" = '\x5ca9a71b1d01849c0a95490cc00559717fcf0d1d'
结果如下图:

聚合函数就是在你上边where限制条件下取出来所有的数据,然后再对他们用函数聚合,我们用上聚合函数
select
count("to") as data_count
,count(distinct "to") as data_count_v2
,sum("value") as data_sum
,max("value") as data_max
,min("value") as data_min
,avg("value") as data_avg
from erc20."ERC20_evt_Transfer"
where "from" = '\xb1a2b43a7433dd150bb82227ed519cd6b142d382'
and "contract_address" = '\x5ca9a71b1d01849c0a95490cc00559717fcf0d1d'

算出来的结果:一共出来8条转账记录,转给了4个不同的钱包,总计转了5.45e+23,其中最大一笔2.5e+23….
可以自己对照前一个SQL里的数据看一下是不是能对得上(必然可以对得上🐶)
分组聚合的语法group by。分组聚合顾名思义就是先分组后聚合。

假设上边表格是一个家庭(3个人)2020年前2个月的生活开销明细,如果你只用简单的sum,那你只能得到总计的12900;如果你想的到右边2种统计数据,那就需要用到分组聚合group by(按照【人员】分组聚合或者按照【月份】分组聚合)
我们还是按照之前的脚本取明细数据,不过多加一个字段‘evt_block_time’

如果我们想看这8笔交易一共给每个人(to)转了多少币就可以
1.【value】用sum()聚合,
2.把【to】放在select 后
3.最下方加group by,以及group by跟着分组字段【to】
select
"to"
,sum("value") as value_amount
from erc20."ERC20_evt_Transfer"
where "from" = '\xb1a2b43a7433dd150bb82227ed519cd6b142d382'
and "contract_address" = '\x5ca9a71b1d01849c0a95490cc00559717fcf0d1d'
group by "to"

基础的其实就上边那些,还有一些其他语法就不在这里挨个说了,我把关键词列出来,感兴趣自己去搜索引擎搜索(目前dune上以太坊的表用的PostgreSQL,solana的表用的SparkSQL ,其实差不多,只不过函数使用上有细微差异)
分组排序:row_number()
字符串处理:substr() , concat() , replace()
联表查询:join , left outer join , right join
多条件判断:case when , if
转换数据类型:cast()
保留小数点位数:round()
子查询:with as
以上所有灵活组合使用,基本能解决日常95%以上的查询数据的需求

写在前边
本篇内容主要是目的是介绍一些略微偏技术层面的基础知识,这些是学习使用Dune Analytics的前置条件。不要对这些稍微稍微偏技术内容有抵触心理。实际使用中经常用到的SQL语法其实就那几种,你可以认为其实就是学了几个单词的用法,花时间认真看完基本都能看懂
有任何问题或者建议欢迎DM Twitter@Pro_0xBi
首先搞明白3个基础的问题?
简单来说是:
1.Dune Analytics团队把区块链上的数据清洗后形成结构化的数据存入数据仓库,然后做了一个工具让有一些SQL基础的人能够按照自己的需求灵活地查询数据。
2.平台还的提供了数据可视化的能力,查出来的数据可以方便地做成做成图以及看板
说人话就是说就是出于数据统计的需要,把一些数据分门别类地存储起来,存储的载体是【数据表】。针对某一个或者一些主题的一系列【数据表】合在一起就是数据仓库。
注意:
这里的数据可以是结果数据(比如Uniswap上线以来某个交易对每天的交易量统计)
也可以是过程数据(Uniswap上线以来某个交易对发生的每一条交易记录明细:谁发起的,用A换B,交易时间,tx_hash,交易数量….)
假设你想吃脆香米巧克力,但是你这会儿出不了门,你就叫个跑腿说:我需要一盒巧克力,他的牌子是脆香米。跑腿去了趟超市把巧克力买来送到你家。
类比过来SQL就是你说的那句话,Dune Analytics就是个跑腿儿,他可以让你可以跟数据仓库对话,并且将数据仓库里的数据给你搬出来给你。
你可以认为表就是一个一个的Excel 表,每一个Excel 表里存的不同的数据。以我最常用的表为例erc20."ERC20_evt_Transfer"(ERC20代币的转账日志)

表的字段如下
from:从哪个钱包转的币
to:币转到了哪个钱包
value:转了多少币
contract_address:转的哪个币(ERC20代币的合约地址,一般可以在CMC查某一个代币的合约地址)
evt_tx_hash:这笔转账的tx hash是什么
evt_index:这条数据是这个交易的第几笔,1个交易可能存在多笔数据,比如你在uniswap交易你用APE兑换AAVE,可能就会被拆成2笔数据APE→ETH,ETH→AAVE
evt_block_time:交易被打包的时间
evt_block_number:交易被打包的区块高度
SQL最基本的结构或者语法就是
select : 取哪个字段?
from :从哪个表里取?
where :限制条件是什么?
select
"from"
,"to"
,"value"
from erc20."ERC20_evt_Transfer"
where "from" = '\xb1a2b43a7433dd150bb82227ed519cd6b142d382'
and "contract_address" = '\xe6ee69495b571e1042f760d7f34009164aff87a2'

额外说明一下
关于钱包/合约地址或者是tx hash,实际存到数据库里都做了一层处理:所有的【0x】中的【0】都替换成了【\】
select多个字段用【英文】逗号隔开,SQL中涉及的逗号引号都必须是英文格式,否则会报错
【where】后边如果有多个条件,想多个条件取交集的时候用 【and】连接这些条件,取并集用【or】连接
带引号的from是表里的一个字段名,表名前的from是SQL的语法词

常见的聚合函数
count()
计数,计算符合要求的数据一共有多少行,如果需要按照某个字段去重,比如按照【to】去重,就是count(distinct “to“ )
sum()
求和,比如算孙哥今年以来一共向币安转了多少ETH,就需要用sum()加一下
max()
取最大,比如算孙哥今年以来一共向币安最多一次转了多少ETH,就需要用max()算一下
min()
取最小
avg()
取平均
聚合函数就是在你where限制条件下取出来所有的数据,然后再对他们用函数聚合
-- 换成 '\x5ca9a71b1d01849c0a95490cc00559717fcf0d1d'
select
"from"
,"to"
,"value"
from erc20."ERC20_evt_Transfer"
where "from" = '\xb1a2b43a7433dd150bb82227ed519cd6b142d382'
and "contract_address" = '\x5ca9a71b1d01849c0a95490cc00559717fcf0d1d'
结果如下图:

聚合函数就是在你上边where限制条件下取出来所有的数据,然后再对他们用函数聚合,我们用上聚合函数
select
count("to") as data_count
,count(distinct "to") as data_count_v2
,sum("value") as data_sum
,max("value") as data_max
,min("value") as data_min
,avg("value") as data_avg
from erc20."ERC20_evt_Transfer"
where "from" = '\xb1a2b43a7433dd150bb82227ed519cd6b142d382'
and "contract_address" = '\x5ca9a71b1d01849c0a95490cc00559717fcf0d1d'

算出来的结果:一共出来8条转账记录,转给了4个不同的钱包,总计转了5.45e+23,其中最大一笔2.5e+23….
可以自己对照前一个SQL里的数据看一下是不是能对得上(必然可以对得上🐶)
分组聚合的语法group by。分组聚合顾名思义就是先分组后聚合。

假设上边表格是一个家庭(3个人)2020年前2个月的生活开销明细,如果你只用简单的sum,那你只能得到总计的12900;如果你想的到右边2种统计数据,那就需要用到分组聚合group by(按照【人员】分组聚合或者按照【月份】分组聚合)
我们还是按照之前的脚本取明细数据,不过多加一个字段‘evt_block_time’

如果我们想看这8笔交易一共给每个人(to)转了多少币就可以
1.【value】用sum()聚合,
2.把【to】放在select 后
3.最下方加group by,以及group by跟着分组字段【to】
select
"to"
,sum("value") as value_amount
from erc20."ERC20_evt_Transfer"
where "from" = '\xb1a2b43a7433dd150bb82227ed519cd6b142d382'
and "contract_address" = '\x5ca9a71b1d01849c0a95490cc00559717fcf0d1d'
group by "to"

基础的其实就上边那些,还有一些其他语法就不在这里挨个说了,我把关键词列出来,感兴趣自己去搜索引擎搜索(目前dune上以太坊的表用的PostgreSQL,solana的表用的SparkSQL ,其实差不多,只不过函数使用上有细微差异)
分组排序:row_number()
字符串处理:substr() , concat() , replace()
联表查询:join , left outer join , right join
多条件判断:case when , if
转换数据类型:cast()
保留小数点位数:round()
子查询:with as
以上所有灵活组合使用,基本能解决日常95%以上的查询数据的需求
从0到1构建你的Dune Analytics看板(实战篇)
写在前边 本篇内容主要是一步一步地说明构建一个看板的过程,做一个整理钱包行为与以太坊币价关系的分析看板,以孙哥钱包(0x3ddfa8ec3052539b6c9549f12cea2c295cff5296)为例 有任何问题或者建议欢迎DM Twitter@Pro_0xBi一、我想看哪些数据?我们观察整理钱包的行为其实就是看钱包跟交易所之前的充提行为。但是有的时候整理钱包并不会直接整理到交易所,有可能中转一下再进入交易所。所以理论用一个钱包以及他的所有关联钱包作为一个集合来观察这个行为会比较合适。这里我们做1个简化:以孙哥为例,做一个钱包转入、转出ETH的行为与ETH价格之间的关系的分析。 另外 如果你想按照相对严谨的计算口径做分析,我这里提供两个可能有用的东西 1.这个Query可以用来取某一个钱包的疑似关联钱包,里边的逻辑可以跟自己需要做调整 (查找跟这个钱包有ETH转入转出关系的所有钱包,累积转入或者转出需要超过100ETH) https://dune.com/queries/666266 2.如果你要看充提交易所的行为,那需要首先有交易所的地址。我自己整理了一批交易所标签,可以...
【持续更新】链上数据分析内容汇总
Twitter: @Pro_0xBi目录一、从0到1构建你的Dune Analytics看板从0到1构建你的Dune Analytics看板(基础篇):https://mirror.xyz/0xbi.eth/6cbedGOx0GwZdvuxHeyTAgn333jaT34y-2qryvh8Fio 从0到1构建你的Dune Analytics看板(实战篇):https://mirror.xyz/0xbi.eth/603BIaKXn7s2_7A84oayY_Fn5XUPh6zDsv2OlQTdzCg 从0到1构建你的Dune Analytics看板(常用表结构):https://mirror.xyz/0xbi.eth/uSr336PzXtqMuE_LPBewbJ1CHN2oUs40-TDET2rnkqU二、BTC的周期顶部以及底部判断方法研究1.基于MVRV以及CDD的大周期的抄底方法 2.基于永续合约持仓的衍生品偏离度风险指标三、基于以太坊链上数据的分析以及看板工具1.著名巨鲸在以太坊上持仓情况跟踪 2.追踪以太坊上某个钱包的某个Token持仓变化(小时级别) 3.Ethereum ...
从0到1构建你的Dune Analytics看板(常用表结构)
写在前边 我自己相对熟悉Ethereum的表,这里只包含Ethereum相关的表结构 其他网络的表后续有机会再补充吧。另外本篇的内容之前写过一个Notion版本,如果看过那个这篇就不用看了,基本跟那个一致 有任何问题或者建议欢迎DM Twitter@Pro_0xBi一、通用说明1.合约地址或者钱包地址用0x.....中的 ’ 0 ’ 在表里都默认替换成了 ’ \ ’如地址 0x9b22a80d5c7b3374a05b446081f97d0a34079e7f 实际存的数据是:\x9b22a80d5c7b3374a05b446081f97d0a34079e7f a.如果想在SQL中引入变量可以用如下处理,可以避免输入带 ’ \ ’这种奇怪的格式:wallet_address= CONCAT('\x', substring('{{wallet_address}}' from 3))::bytea b.对外展示某个字段的时候可以用转成字符串然后用replace(这个方法有点笨,可能有更好的方法)replace(cast(wallet_address as varchar),'\','0'...
Share Dialog
Share Dialog
Data Analytics

Subscribe to 0xBi

Subscribe to 0xBi
<100 subscribers
<100 subscribers
No activity yet