昨天半夜写的帖子目的是小试 NodeJs 牛刀, @rivalhw 和 @dapeng 给了非常好的建议: 平均值不太适合看大众水平, 因为: 贫富差距在 STEEM的世界里也是非常的明显, 目测10%大鱼们掌握了90%的财富, 所以如果取平均的话, 指标都会偏高, 不能反映实际情况.
是不是有很多歌唱比赛评委给分之后, 选手的最终得分都得先”去掉一个最高分, 去掉一个最低分”? 不过在这里, 你去掉一个最高最低也没有啥卵用, 因为富得流油的远不止一个, 穷得只剩下小裤衩的也有很多.
中位数 Median
数学中的中位数(Median)指的是把所有需要统计的数值排序, 然后取最中间那个(如果有奇数个数值), 如果有偶数个, 则取中间两个数来取平均. 这个相对能反映出大众水平.
标准方差 STD
标准方差 STD 反映了数据波动的情况, 比如如果财富值的标准方差越大, 则表示贫富差距大(离平均水平的波动区别)
NodeJs 程序 + SteemIt Wechat API
有了API, 我们用 Node.Js 来跑跑, 看看什么结果. 首先我们通过 prototype 的方式给 Javascript 中的数组来定义以上几个指标:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | Array.prototype.median = function() { var arr = [...this]; var len = arr.length; if (0 == len) { return NaN; } arr.sort(); var mid = Math.floor(len / 2); if ((len % 2) == 0) { return (arr[mid] + arr[mid - 1]) * 0.5; } return arr[mid]; } Array.prototype.mean = function() { var total = 0; for (var i = this.length - 1; i >= 0; -- i){ total += this[i]; } return total / this.length; } Array.prototype.STD = function() { var mean = this.mean(); var diff = []; for (var j = this.length - 1; j >= 0; -- j){ diff.push(Math.pow((this[j] - mean), 2)); } return (Math.sqrt(diff.reduce((a, b) => a + b) / this.length)); } |
Array.prototype.median = function() { var arr = [...this]; var len = arr.length; if (0 == len) { return NaN; } arr.sort(); var mid = Math.floor(len / 2); if ((len % 2) == 0) { return (arr[mid] + arr[mid - 1]) * 0.5; } return arr[mid]; } Array.prototype.mean = function() { var total = 0; for (var i = this.length - 1; i >= 0; -- i){ total += this[i]; } return total / this.length; } Array.prototype.STD = function() { var mean = this.mean(); var diff = []; for (var j = this.length - 1; j >= 0; -- j){ diff.push(Math.pow((this[j] - mean), 2)); } return (Math.sqrt(diff.reduce((a, b) => a + b) / this.length)); }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | // @justyy var request = require("request") var url = "https://uploadbeta.com/api/steemit/wechat/?cached"; request({ url: url, json: true }, function (error, response, body) { if (!error && response.statusCode === 200) { var total_rep = []; var total_sbd = []; var total_steem = []; var total_value = []; var total_esp = []; var total_vp = []; var total_sp = []; body.forEach(function(member) { total_rep.push(member['rep']); total_sbd.push(member['sbd']); total_steem.push(member['steem']); total_value.push(member['value']); total_esp.push(member['esp']); total_vp.push(member['vp']); total_sp.push(member['sp']); }); console.log("----Median----"); console.log("Total Members = " + total_rep.length); console.log("Median Reputation = " + Math.round(total_rep.median() * 100) / 100); console.log("Median SBD = " + Math.round(total_sbd.median() * 100) / 100); console.log("Median Steem = " + Math.round(total_steem.median() * 100) / 100); console.log("Median Effective SP = " + Math.round(total_esp.median() * 100) / 100); console.log("Median SP = " + Math.round(total_sp.median() * 100) / 100); console.log("Median Voting Power = " + Math.round(total_vp.median() * 100) / 100); console.log("Median Account Value = " + Math.round(total_value.median() * 100) / 100); console.log("----Mean----"); console.log("Mean Reputation = " + Math.round(total_rep.mean() * 100) / 100); console.log("Mean SBD = " + Math.round(total_sbd.mean() * 100) / 100); console.log("Mean Steem = " + Math.round(total_steem.mean() * 100) / 100); console.log("Mean Effective SP = " + Math.round(total_esp.mean() * 100) / 100); console.log("Mean SP = " + Math.round(total_sp.mean() * 100) / 100); console.log("Mean Voting Power = " + Math.round(total_vp.mean() * 100) / 100); console.log("Mean Account Value = " + Math.round(total_value.mean() * 100) / 100); console.log("----STD----"); console.log("STD Reputation = " + Math.round(total_rep.STD() * 100) / 100); console.log("STD SBD = " + Math.round(total_sbd.STD() * 100) / 100); console.log("STD Steem = " + Math.round(total_steem.STD() * 100) / 100); console.log("STD Effective SP = " + Math.round(total_esp.STD() * 100) / 100); console.log("STD SP = " + Math.round(total_sp.STD() * 100) / 100); console.log("STD Voting Power = " + Math.round(total_vp.STD() * 100) / 100); console.log("STD Account Value = " + Math.round(total_value.STD() * 100) / 100); } }) |
// @justyy var request = require("request") var url = "https://uploadbeta.com/api/steemit/wechat/?cached"; request({ url: url, json: true }, function (error, response, body) { if (!error && response.statusCode === 200) { var total_rep = []; var total_sbd = []; var total_steem = []; var total_value = []; var total_esp = []; var total_vp = []; var total_sp = []; body.forEach(function(member) { total_rep.push(member['rep']); total_sbd.push(member['sbd']); total_steem.push(member['steem']); total_value.push(member['value']); total_esp.push(member['esp']); total_vp.push(member['vp']); total_sp.push(member['sp']); }); console.log("----Median----"); console.log("Total Members = " + total_rep.length); console.log("Median Reputation = " + Math.round(total_rep.median() * 100) / 100); console.log("Median SBD = " + Math.round(total_sbd.median() * 100) / 100); console.log("Median Steem = " + Math.round(total_steem.median() * 100) / 100); console.log("Median Effective SP = " + Math.round(total_esp.median() * 100) / 100); console.log("Median SP = " + Math.round(total_sp.median() * 100) / 100); console.log("Median Voting Power = " + Math.round(total_vp.median() * 100) / 100); console.log("Median Account Value = " + Math.round(total_value.median() * 100) / 100); console.log("----Mean----"); console.log("Mean Reputation = " + Math.round(total_rep.mean() * 100) / 100); console.log("Mean SBD = " + Math.round(total_sbd.mean() * 100) / 100); console.log("Mean Steem = " + Math.round(total_steem.mean() * 100) / 100); console.log("Mean Effective SP = " + Math.round(total_esp.mean() * 100) / 100); console.log("Mean SP = " + Math.round(total_sp.mean() * 100) / 100); console.log("Mean Voting Power = " + Math.round(total_vp.mean() * 100) / 100); console.log("Mean Account Value = " + Math.round(total_value.mean() * 100) / 100); console.log("----STD----"); console.log("STD Reputation = " + Math.round(total_rep.STD() * 100) / 100); console.log("STD SBD = " + Math.round(total_sbd.STD() * 100) / 100); console.log("STD Steem = " + Math.round(total_steem.STD() * 100) / 100); console.log("STD Effective SP = " + Math.round(total_esp.STD() * 100) / 100); console.log("STD SP = " + Math.round(total_sp.STD() * 100) / 100); console.log("STD Voting Power = " + Math.round(total_vp.STD() * 100) / 100); console.log("STD Account Value = " + Math.round(total_value.STD() * 100) / 100); } })
然后这是结果:
—-Median—-
Total Members = 173
Median Reputation = 50.83
Median SBD = 154.62
Median Steem = 0
Median Effective SP = 28.15
Median SP = 201.16
Median Voting Power = 93.72
Median Account Value = 2040.61
—-Mean—-
Mean Reputation = 48.56
Mean SBD = 224.75
Mean Steem = 18.99
Mean Effective SP = 18503.56
Mean SP = 1561.65
Mean Voting Power = 83.07
Mean Account Value = 2436.73
—-STD—-
STD Reputation = 13.5
STD SBD = 1093.16
STD Steem = 118.9
STD Effective SP = 99019.55
STD SP = 5977.72
STD Voting Power = 21.61
STD Account Value = 9344.65
简单来说: “大众”等级是 50.83, “大众” SP 是201.16, “大众”帐号估值是 2040.61
通过STD我们可以看到, SP, ESP, 还有帐号估值的贫富差距还是挺大的.
最后, 再广告一下:
- SteemIt 好友微信群排行榜
- SteemIt 好友微信群文章列表 RSS Feed
- SteemIt 编程 Geek 微信群, 请联系 @justyy 让我拉你入群.
需要入群者 请联系 @justyy 谢谢.
英文: The Average, Median, STD of SteemIt Wechat Group
loading...
上一篇: 你给SteemIt中文微信群拖后腿了么?
下一篇: 带孩子参观消防车 Cambridge Fire Station Open Day