调查一下中文社区“失踪”人口

in HIVE CN 中文社区3 months ago

话说中文社区曾有几个HIVE友的文章我很喜欢看,怎么说呢,有些“文章”的感觉,言之有物、文字驾驭功夫了得、情感也比较细腻。

clouds-1842317_960_720.jpg
(图源 :pixabay)

可惜这些优秀的作者们,在HIVE上已经消失了好长时间,甚至微信群中都极少见到他/她们的精彩发言,甚是遗憾。

我不由想起网络上经常见到的一个梗:

先生当初退出文坛,我是坚决反对的,也曾苦苦挽留过。先生惜字如金,行文如刀,如剑,如号角,如灯盏……都是那么让人振聋发聩,耳目一新。不曾想先生决绝的离去,背影如同流星划过天际,短暂却耀眼,但这却让中国文坛倒退了三十年!

那么这些年,中文社区都流失了哪些人口呢?我突然想到,或许可以用HiveSQL来分析一下,正好这两天刚刚完成一键建立到HiveSQL转发服务的脚本,玩得正上瘾呢。

首先,如何定义中文社区的人口呢?我将其粗略定义为:

最近3年有在'hive-105017'发表文章(即主贴)的用户

根据这个定义我们可以写出如下查询

SELECT author
FROM comments
WHERE category = 'hive-105017'
  AND depth = 0
  AND created > DATEADD(YEAR, -3, GETDATE()) 
GROUP BY author

其中depth = 0,表示我们只查询发表文章(主贴)的用户
DATEADD(YEAR, -3, GETDATE()) ,会得到3年前的当前时间。

查询后我们得到类似如下的结果,原来这三年曾经有750人在中文社区发帖呢(当然也包括之前发现的僵尸网络用户)
image.png

没错,上述查询返回结果中包含了只发一两篇主贴的僵尸网络用户。当然了,发一两篇的不一定一定是僵尸网络用户,但是不活跃用户没跑了。所以我们过滤掉这部分中户(僵尸网络以及不活跃用户)

修正后的查询:

SELECT author, COUNT(*) AS posts
FROM comments
WHERE category = 'hive-105017'
  AND depth = 0
  AND created > DATEADD(YEAR, -3, GETDATE())
GROUP BY author
HAVING COUNT(*) >= 2  
ORDER BY author;

部分返回结果如下(可见这部分用户有334个):
image.png

接下来,我们要从这334个用户中找出来失踪人口,我们暂定为最近一年没有在中文社区发帖的用户。

所以修改过滤条件为下边这个样子:

HAVING COUNT(*) >= 2  
    AND MAX(CASE WHEN created > DATEADD(YEAR, -1, GETDATE()) THEN 1 ELSE 0 END) = 0

部分返回结果如下(可见有177个失踪人口,呜呜呜)
1744859760055.png

我们还知道可以通过如下语句查询和计算用户的有效HP

SELECT Name, (Vesting_shares + Received_vesting_shares - Delegated_vesting_shares) * Hive_per_vest AS E_HP 
FROM Accounts, DynamicGlobalProperties  
WHERE name = 'xxx'

综合之前的查询,我们给查询结果添加上有效HP(E_HP)显示

SELECT c.author, 
       COUNT(*) AS posts,
       (a.Vesting_shares + a.Received_vesting_shares - a.Delegated_vesting_shares) * d.Hive_per_vest AS E_HP
FROM comments c
JOIN Accounts a ON c.author = a.Name
JOIN DynamicGlobalProperties d ON 1 = 1
WHERE c.category = 'hive-105017'
  AND c.depth = 0
  AND c.created > DATEADD(YEAR, -3, GETDATE())
GROUP BY c.author, a.Vesting_shares, a.Received_vesting_shares, a.Delegated_vesting_shares, d.Hive_per_vest
HAVING COUNT(*) >= 2  
    AND MAX(CASE WHEN c.created > DATEADD(YEAR, -1, GETDATE()) THEN 1 ELSE 0 END) = 0
ORDER BY c.author;

嗯,这回结果更丰满了
1744860623388.png

其中需要解释的是GROUP BY c.author, a.Vesting_shares, a.Received_vesting_shares, a.Delegated_vesting_shares, d.Hive_per_vest因为后边的字段要在计算字段在计算 E_HP用到,所以需要加在这里。

再加上排名,以及最后在CN区发帖过去了多少天,再加上一些格式上的调整(对了,把最近三年发帖数改成>3,用以屏蔽掉更多僵尸网络用户等),最终筛选出来如下87个失踪超一年的人口。

1744871376815.png

1744871442819.png

我们还可以通过修改SQL,来查询失踪超过半年,或者2个月,或者30天以上的人口。

比如通过以下语句过滤出失踪超过30天以上的用户,快来看看里边有没有你呀?

HAVING COUNT(*) > 3  
    AND MAX(CASE WHEN c.created > DATEADD(DAY, -30, GETDATE()) THEN 1 ELSE 0 END) = 0

1744871824784.png

需要补充说明的是,以上失踪人口登记表仅仅针对中文社区哦。

有些用户可能还活跃在HIVE上,比如在其它社区(或者没使用社区功能,仅使用标签)发帖,那么也会被列入失踪人口哦。

所以,问题来了,你在“失踪”人口之列嘛?你为啥玩起了失踪?什么时候再回到中文社区大家庭呢?

Sort:  

AT姐現在上班,我過2天見到她,捉她回來

啊啊,用吸星大法把HIVE的失踪人口吸回来哈哈。。

小影快快施法

来了,来了。。。
是时候轮到我释放超级无敌逗比法术的时候了,,,先转两个圈圈,然后在天空画三个爱心形状,再对着南方大声喊出那句:“HIVE中文区失踪的帅哥美女们速速回归,速速回归!!!!”

基本上被我拉来的朋友都消失了🥹

一声叹息,哎!

O哥把SQL玩的真6

瞎玩而已

Hi, O哥

哇,炸出来一个失踪人口

日更很难 但是坚持很酷!加油

今天一个一个私聊了😅

一个一个?😲 那边看都很多人了

我认识的 O(∩_∩)O哈哈~ 不认识的没办法联系啊 哈哈

厉害了,表妹!

中文区的朋友好多啊,可是怎么都没有看到过写文呢,可能他们有更重要的事去做了吧

也是曾经辉煌过!

加油,再创辉煌!

坚持日更,慢慢完善文章质量,oh year!

我仔细地在列出名单找我自己,哈哈,我在三年失踪名单里。从今年开始,希望自己能坚持下去,加油💪💪💪

那不是三年失踪名单
那是三年内发过主贴的名单

第五个1289好像是外文区的 只是写中文时用过咱们社区标签🏷

嗯,所以说程序过滤不如人工过滤精准
3年内她在中文社区发过11篇主贴呢,也算不少了

winniex

以前互动过的,温妮

@travelgirl 還在

O哥喊妳呢!偶爾也發發中文帖回來玩玩吧!

嗯,只是中文社区失踪人口,不是HIVE失踪人口,哈哈

哈哈 我在49 在筛选估计看不到我呢

昨天失踪1 天,今天立马更新😄

你好, 我在“失踪”人口之列,還是在失踪一年人口中HP第二高的人🤣

大佬威武