当前, 微信群名单一共有211人(没有上榜的请火速联系 wexin@justyy.com 好处多多, 你会懂的), 昨天, 我们讲了怎么在R语言里通过RODBC连接STEEMSQL数据库, 今天我们就来温故而知新, 介绍一个实用的例子: STEEMIT中文微信群一共有多少钱?
查询 @justyy 的帐号很简单, STEEMSQL是:
1 | select savings_balance, savings_sbd_balance, balance, sbd_balance from Accounts where name='justyy' |
select savings_balance, savings_sbd_balance, balance, sbd_balance from Accounts where name='justyy'
我们注意到了, 这些字段并不是数值, 因为还有单位, 这就无法直接在STEEMSQL里直接用聚类函数 sum 把它们相加起来.
我们需要先把成员列表读进来, 这个例表在 github 上, 如果你还没在列表里, 你也可以提交一个PR.
https://raw.githubusercontent.com/DoctorLai/steemit-wechat-group/master/members.txt
这是一个文本文件, 每一行就是一个STEEMIT 帐号ID, 我们在R语言里可以用 readLines 把文本数据读成数组.
url = "https://raw.githubusercontent.com/DoctorLai/steemit-wechat-group/master/members.txt" members = readLines(url)
然后, 通过类似 join 之类的方法, 来构造这个SQL.
sqlQuery(conn, str_c("select savings_balance, savings_sbd_balance, balance, sbd_balance from Accounts where name in ('", paste(members, collapse = "','"), "')"))
生成的SQL大概长这样……
1 | select savings_balance, savings_sbd_balance, balance, sbd_balance from Accounts where name in ('justyy', 'tumutanzi' ...) |
select savings_balance, savings_sbd_balance, balance, sbd_balance from Accounts where name in ('justyy', 'tumutanzi' ...)
把获取数据这块写成函数
getsbd = function(members) { conn <- odbcDriverConnect("Driver=SQL Server Native Client 11.0;Server=sql.steemsql.com;Database=DBSteem;Uid=steemit;Pwd=steemit") x <- sqlQuery(conn, str_c("select savings_balance, savings_sbd_balance, balance, sbd_balance from Accounts where name in ('", paste(members, collapse = "','"), "')")) close(conn) return(x) }
然后, arr = getsbd(members) 就会返回一个含有4个字段的数组 dim(arr) [1] 211 4, 接下来就好办了, 遍历每个字段数组, 然后相加.
sum_sbd = 0.0 sum_steem = 0.0 sum_sbd_saving = 0.0 sum_steem_saving = 0.0 for(money in arr[,4]) { x = unlist(str_split(money, " "))[1] sum_sbd = sum_sbd + as.numeric(x) } for(money in arr[,2]) { x = unlist(str_split(money, " "))[1] sum_sbd_saving = sum_sbd_saving + as.numeric(x) } for(money in arr[,3]) { x = unlist(str_split(money, " "))[1] sum_steem = sum_steem + as.numeric(x) } for(money in arr[,1]) { x = unlist(str_split(money, " "))[1] sum_steem_saving = sum_steem_saving + as.numeric(x) }
str_split 函数把数值和单位分开, 方便累计. 不多说了, 直接上结果:
print(paste("Total SBD = ", sum_sbd)) print(paste("Total SBD Savings = ", sum_sbd_saving)) print(paste("Total STEEM = ", sum_steem)) print(paste("Total STEEM Savings = ", sum_steem_saving)) [1] "Total SBD = 31739.145" [1] "Total SBD Savings = 597.972" [1] "Total STEEM = 16067.426" [1] "Total STEEM Savings = 0.01"
类似可以累计 VESTS 然后再计算SP, 不过较麻烦, 这里就不展开细节了.
英文: R Tutorial – How rich is SteemIt Wechat Group?
R语言教程
- R 语言教程 – 蒙特卡罗
- R 语言教程 – Sigmoid
- R 语言教程 – 错位排列
- R 语言教程 – 连接STEEMSQL 数据库
- R 语言教程 – STEEMIT 微信群有多少钱?
- R 语言教程 – STEEMIT 大鲸啥时候点赞的?
- R 语言教程 – 通过 RStudio 来快速连接SteemSQL
强烈推荐
- 英国代购-畅购英伦
- TopCashBack 返现 (英国购物必备, 积少成多, 我2年来一共得了3000多英镑)
- Quidco 返现 (也是很不错的英国返现网站, 返现率高)
- 注册就送10美元, 免费使用2个月的 DigitalOcean 云主机(性价比超高, 每月只需5美元)
- 注册就送10美元, 免费使用4个月的 Vultr 云主机(性价比超高, 每月只需2.5美元)
- 注册就送10美元, 免费使用2个月的 阿里 云主机(性价比超高, 每月只需4.5美元)
- 注册就送20美元, 免费使用4个月的 Linode 云主机(性价比超高, 每月只需5美元) (折扣码: PodCastInit2022)
- PlusNet 英国光纤(超快, 超划算! 用户名 doctorlai)
- 刷了美国运通信用卡一年得到的积分 换了 485英镑
- 注册就送50英镑 – 英国最便宜最划算的电气提供商
- 能把比特币莱特币变现的银行卡! 不需要手续费就可以把虚拟货币法币兑换
微信公众号: 小赖子的英国生活和资讯 JustYYUK