标签

PostgreSQL , 独立事件分析 , 舆情分析 , 舆情事件 , 相关事件 , 行为轨迹 , 独立事件的流水相关性分析 , PostgreSQL服务端编程实践


背景

潘金莲改变了历史吗?

网上的段子

潘金莲撑开窗户,撑窗户滴棍子掉下去了,于是西门庆看到了,于是他们相遇了。如果潘金莲同学当时没有开窗,那么她就不会遇到西门庆。   如果没有遇到西门庆,那么她就不会被迫出轨,那样武松哥哥就不会怒发冲冠为红颜,这样他就不会奔上梁山。   武松就不会奔上梁上,不会奔上梁山之后,哪怕水泊梁山107将依旧轰轰烈烈,但是宋江和方腊的战役,方腊也不会被武松单臂擒住。   只要武松治不了方腊,枭雄方腊就能取得大宋的江山。   只要方腊取得了大宋的江山,就不会有靖康耻,不会有偏安一隅,不会有金兵入关。   金兵不入关,就不会有后来的大清朝。   没有大清朝,当然也不会有后来的闭关锁国,没有慈禧太后。   没有慈禧太后,没有闭关锁国,自然也不会有八国联军侵略中国啊,不会有神马鸦片战争啊。   没有这些杀千刀的战争和不平等条约,中国说不定凭借五千年的文化首先就发展资本主义了。   发展了资本主义,发展到今天,说不定中国早就超过了美国、小日本神马的,赶超了几百年了。已经是最发达的最强悍的国家了。   所以,谁穿越一下告诉潘金莲,你有事没事开神马窗户啊!!!

类似蝴蝶效应,历史是很有趣的事情。

实际上在我们的生活中也有这样的现象或者需求,比如某些业务系统,会记录事件,流水账那样。

然后业务可能想知道某类事件发生后,接下来发生了什么,比如说房价调控措施出台后的事件,是不是有大量资金涌入股票市场?

说道这里,我要把PostgreSQL数据库搬出来,到底怎么实现上述需求呢?

模拟现实

1. 构建事件输入的表结构

create table event(
id serial8 primary key,   -- 自增序列,用于区分事件的先后顺序
class text,   -- 事件类型
info text,    -- 事件描述
crt_time timestamp        -- 事件发生的时间
);

2. 插入1000万事件记录,其中5000个事件的种类。

insert into event (class, info , crt_time) select (5000*random())::int::text, 'test', clock_timestamp() from generate_series(1,10000000);

3. 针对事件种类,创建索引

create index idx_event_class on event (class);

需求

查询某个事件发生后,若干个接下来发生的事件

使用函数可以轻松实现这个需求

create or replace function f(
sql text,   -- 查询要分析的目标事件对应的ID
v_class text,   -- 目标事件的类别
v_n int8,   -- 要查看多少个接下来发生的事件
v_limit int  -- 分析几次事件,如果要输出所有的,那么可以输入一个较大值。
) returns setof event as $$
declare  v_id int8;
begin  for v_id in execute sql loop  return query select * from event where id>=v_id order by id limit v_n+1;  v_limit := v_limit - 1;  if v_limit<=0 then  return;  end if;  end loop;
end;
$$ language plpgsql strict;

查询举例

查询事件类别为1的事件,它后面发生的2个事件,输出10次分析结果。

postgres=# select * from f('select id from event where class=$$1$$', '1', 2, 10);  id   | class | info |          crt_time
-------+-------+------+----------------------------  1592 | 1     | test | 2017-03-31 15:07:23.77348  1593 | 3032  | test | 2017-03-31 15:07:23.773483  1594 | 3409  | test | 2017-03-31 15:07:23.773486  2784 | 1     | test | 2017-03-31 15:07:23.777265  2785 | 2819  | test | 2017-03-31 15:07:23.777268  2786 | 87    | test | 2017-03-31 15:07:23.777271  12176 | 1     | test | 2017-03-31 15:07:23.807489  12177 | 2586  | test | 2017-03-31 15:07:23.807491  12178 | 4101  | test | 2017-03-31 15:07:23.807494  19398 | 1     | test | 2017-03-31 15:07:23.83072  19399 | 1179  | test | 2017-03-31 15:07:23.830723  19400 | 4237  | test | 2017-03-31 15:07:23.830726  19571 | 1     | test | 2017-03-31 15:07:23.831296  19572 | 4368  | test | 2017-03-31 15:07:23.831299  19573 | 2313  | test | 2017-03-31 15:07:23.831302  24708 | 1     | test | 2017-03-31 15:07:23.847794  24709 | 1327  | test | 2017-03-31 15:07:23.847797  24710 | 4584  | test | 2017-03-31 15:07:23.847799  29756 | 1     | test | 2017-03-31 15:07:23.864234  29757 | 4386  | test | 2017-03-31 15:07:23.864237  29758 | 3044  | test | 2017-03-31 15:07:23.864239  30224 | 1     | test | 2017-03-31 15:07:23.865765  30225 | 4704  | test | 2017-03-31 15:07:23.865768  30226 | 332   | test | 2017-03-31 15:07:23.865771  32004 | 1     | test | 2017-03-31 15:07:23.871554  32005 | 219   | test | 2017-03-31 15:07:23.871557  32006 | 3548  | test | 2017-03-31 15:07:23.871559  36472 | 1     | test | 2017-03-31 15:07:23.886097  36473 | 640   | test | 2017-03-31 15:07:23.8861  36474 | 1139  | test | 2017-03-31 15:07:23.886103
(30 rows)

利用以上结果,我们就可以知道发生了事件1之后,都发生了其他什么事件。

至于你要拿这些结果进行接下来的分析,可以使用类似关键词的热点分析方法,或者使用PostgreSQL提供的MADlib机器学习库,又或者使用plR进行分析。

总之你肯定有方法找出事件之间的关联关系。

非独立事件的相关性分析

因为前面分析的都是独立事件,即本身就没有相关性的,所以需要通过函数的方法来输出结果。

对于非独立事件,比如说用户逛淘宝的点鼠标的行为,在点了某个商品后,又点了哪些其他商品。

对于非独立事件,在结构设计上,就有关联字段,比如USERID,所以我们可以很方便的进行关联。

使用PostgreSQL递归调用,就可以对非独立事件进行轨迹分析。

例子

《PostgreSQL 递归查询CASE - 树型路径分组输出》

《用PostgreSQL找回618秒逝去的青春 - 递归收敛优化》

《distinct xx和count(distinct xx)的变态递归优化方法 - 索引收敛(skip scan)扫描》

《PostgreSQL 使用递归SQL 找出数据库对象之间的依赖关系》

《PostgreSQL 递归死循环案例及解法》

《PostgreSQL 递归查询一例 - 资金累加链》

《PostgreSQL Oracle 兼容性之 - WITH 递归 ( connect by )》

《递归优化CASE - group by & distinct tuning case : use WITH RECURSIVE and min() function》

《递归优化CASE - performance tuning case :use cursor\trigger\recursive replace (group by and order by) REDUCE needed blockes scan》

小结

PostgreSQL的递归语法、plpgsql编程,可以很好的满足舆情分析中事件前后事件的分析需求。

再利用PostgreSQL的热点词分析,聚类分析或者使用PostgreSQL提供的MADlib机器学习库,又或者使用plR进行分析。找出事件之间的关联关系。

潘金莲改变了历史吗 - PostgreSQL舆情事件分析应用相关推荐

  1. 2022年四月新闻舆情事件分析集锦

    在刚刚结束的四月,又有哪些新闻热点.舆情事件成为了重点关注对象?下面小编从企业角度出发,选取了部分具有代表性的舆情信息事件,进行了介绍和分析,并整理了一份2022年4月舆情研判总结分析报告,可供大家参 ...

  2. 造芯片这事情,到底要不要找潘金莲算账?

    来源| 老斯基财经 ID| laosijicj 作者| 魔鬼斯基 潘金莲,是不是历史罪人?! 近日某君,慷慨陈词. 说大宋灭亡,潘金莲有不可推卸的责任! 当年,如果潘金莲不开窗户,那根竹竿就掉不下来. ...

  3. 某一个社会舆情事件发展走势和动态要如何分析的方法

    社会舆情事件信息的传播转载来源广,如可能在某一主流媒体平台.也可能在某一互动社区平台或在新闻媒体客户端等.所以,社会舆情事件所需要分析的面非常广,如果单靠人工一个个平台进行舆情数据收集分析,行不通.那 ...

  4. 网络舆情事件发展趋势变化监测分析的方法

    网络舆情事件的产生往往紧扣着社会热点,牵扯着大众的切身利益,所以极易在短时间内大范围的扩散和传播,急速发展,起伏波动.所以,为了在网络舆情事件产生时,能够及时采取恰当的应对措施,就需做好网络舆情事件的 ...

  5. 潘金莲写给比尔盖茨的情书

    亲爱的比尔: 你好,出于礼仪我礼貌的问候你,但不要因为规矩隔阂我们的距离,相信你对我也有所闻,或者对我像我对你一样心仪已久. 根据星象学的规律,通过大量历史佐证,结合永恒定律的法则.我发觉我们之间可以 ...

  6. 03_我不是潘金莲,聊相似性推荐

    前几天聊的"协同过滤(Collaborative Filtering)"和"基于内容的推荐(Content-based Recommendation)",都必须 ...

  7. 《拯救人类》:很有可能改变人类历史进程的书

           科学技术造福人类的能力越强,毁灭人类的威力也就越大,这种威力终将有可能灭绝人类.因此,没有什么问题比避免人类的被灭绝更重要的了.不仅如此,人们生活在一个竞争压力极大.贫富差距极大.安全系 ...

  8. 用A-Spice思路解读“西门庆和潘金莲的不可描述之事”,不信你看不懂

    四大名著之一<水浒传>,我想很多人都看过吧,你是不是对"西门庆和潘金莲的桥段"反复琢磨呢?哈哈,我想你是个好学的人,施耐庵也不惜重墨描绘这一章节. 王婆的"十 ...

  9. 武大郎后悔爱上潘金莲爱上了三剑客

    文章目录 武大郎后悔爱上潘金莲爱上了三剑客 一.什么是awk 二.基本格式 三.工作原理 四.常见的内建变量(可直接用) 五.按行输出文本 六.按字段输出文本 七.通过管道.双引号调用shell命令 ...

最新文章

  1. Data - 数据思维 - 下篇
  2. oracle三种分区的方式,Oracle 分区表 总结大全(3)
  3. 如何获取html页面上的按钮列表,如何从一个html页面获取单选按钮的值到另一个?...
  4. python中不属于整数类型_哪个选项不是Python语言的整数类型?
  5. CCF NOI1035 数根
  6. C语言结构体练习-互动粒子仿真
  7. el-table使用图片实例代码
  8. windows03系统安装08sql数据库
  9. php简单选择题,念做个简易php选择题答题系统
  10. oracle设置临时表空间,oracle操作临时表空间
  11. 数据结构_树与二叉树总结
  12. Emily Morehouse的Python社区访谈
  13. 索爱SA-K37拉杆音箱,随时随地帮你撑起一个大舞台
  14. 中国IM企业的新机会?揭秘融云全球通信云网络背后的技术 | 对话 WICC
  15. Redis学习12之jedis的set时间测试
  16. 写给程序员的数理科普:混沌与三体
  17. String类中的trim()方法实现
  18. 黑皮西瓜文案:黑皮西瓜水果的促销文案,黑皮西瓜水果店的文案怎么写
  19. SMBIOS信息概述 -- DMI
  20. java处理TXT文件

热门文章

  1. 思维转换--等价换位思考
  2. android 过滤英文字符,Android编程之TextView的字符过滤功能分析
  3. 女神异闻录5(p5)系统拆解
  4. 电商战决胜在物流 聚美优品破瓶颈发展
  5. IOS应用分发的三种方式
  6. Excel图表—超级好用的Bullet图(KPI考核图)
  7. 地理位置坐标标准以及转换
  8. surface pro 写php,surface pro7尺寸
  9. 人类高质量程序员电脑配置(持续更新)
  10. 遮天、斗破苍穹、凡人修仙传、雪中悍刀行争第四届橙瓜网络文学奖