免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 5513 | 回复: 15
打印 上一主题 下一主题

[文本处理] 动动脑:数据统计 [复制链接]

论坛徽章:
60
20周年集字徽章-20	
日期:2020-10-28 14:04:3015-16赛季CBA联赛之北京
日期:2016-07-06 15:42:0715-16赛季CBA联赛之同曦
日期:2016-06-12 10:38:0915-16赛季CBA联赛之佛山
日期:2016-05-27 11:54:56黄金圣斗士
日期:2015-12-02 11:44:35白银圣斗士
日期:2015-11-25 14:32:43白银圣斗士
日期:2015-11-23 12:53:352015亚冠之布里斯班狮吼
日期:2015-10-21 16:55:482015亚冠之首尔
日期:2015-09-01 16:46:052015亚冠之德黑兰石油
日期:2015-08-31 11:39:192015亚冠之萨济拖拉机
日期:2015-08-28 21:06:5315-16赛季CBA联赛之广东
日期:2016-07-12 14:58:53
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-11-13 20:39 |只看该作者 |倒序浏览
本帖最后由 reyleon 于 2013-11-13 22:02 编辑

原始文本(部分):
  1. 5911043230400514        1       2013-11-08 10:20:41
  2. 5911043230400531        20      2013-11-09 12:16:07
  3. 5911043230400595        10      2013-11-09 12:23:16
  4. 5911043230400595        30      2013-11-09 12:43:16
  5. 5911043230400564        5       2013-11-09 13:17:47
  6. 5911043230400528        10      2013-11-09 13:32:46
  7. 5911043230400595        30      2013-11-09 13:43:16
  8. 5911043230402162        10      2013-11-09 14:00:59
  9. 5911043230400531        20      2013-11-10 12:16:07
  10. 5911043230400595        10      2013-11-10 12:23:16
  11. 5911043230400595        30      2013-11-10 12:43:16
  12. 5911043230400564        5       2013-11-10 13:17:47
  13. 5911043230400528        10      2013-11-10 13:32:46
  14. 5911043230400595        30      2013-11-10 13:43:16
复制代码
文本说明:第一列是id,一个id对应一个人,第二列是充值金额,第三四列是时间戳
需求:统计每一天每小时的时间段总共有多少人充值(第一列id去重,计算这个时间段去掉重复的id剩下的id的个数,即人数),这个时间段的充值总额是多少(第二列相加),另外还有两个特殊情况:

1. 假如有个id在12点这个时间段充值了,但是在13点这个时间段的时候这个id又充值了,这个id则不能算做是13点这个时间段充值的人数,只能计为12点的。
比如2013-11-09 12点这个段 id为5911043230400595的充值了,而这个id也在13点这个段充值的,所以这个不能算13点的充值人数,所以13点去掉这个id,只剩下2个id,也就是说总数只计2人充值。后面的时间段也一样这样计算。

2. 是以每一天的每小时计算的,比如5911043230400595这个id在2013-11-10的12点时段又充值了,需要计为这天的这个时段的人数个数。

希望得到的结果:
  1. 2013-11-08 10 1 1
  2. 2013-11-09 12 60 2 //这天的12点总充值金额为60,总id个数为2
  3. 2013-11-09 13 45 2 //这天的13点总充值金额为45,总id个数为3个,但其中有一个id(5911043230400595)在12点已经充值过,不计为13点这个时段的人数
  4. 2013-11-09 14 10 1
  5. 2013-11-10 12 60 2
  6. 2013-11-10 13 45 2
复制代码
各位大神,出来动动脑,个人感觉有点儿难度,一时半会儿整不出来

论坛徽章:
39
辰龙
日期:2013-08-21 15:45:192015亚冠之广州富力
日期:2015-05-12 16:34:52亥猪
日期:2015-03-03 17:22:00申猴
日期:2015-03-03 17:21:37未羊
日期:2014-10-10 13:45:41戌狗
日期:2014-06-17 09:53:29巨蟹座
日期:2014-06-12 23:17:17双鱼座
日期:2014-06-10 12:42:44寅虎
日期:2014-06-09 12:52:172015亚冠之卡尔希纳萨夫
日期:2015-05-24 15:24:35黄金圣斗士
日期:2015-12-02 17:25:0815-16赛季CBA联赛之吉林
日期:2017-06-24 16:43:52
2 [报告]
发表于 2013-11-13 20:55 |只看该作者
本帖最后由 关阴月飞 于 2013-11-13 21:04 编辑

回复 1# reyleon


    1. 假如有个id在12点这个时间段充值了,但是在13点这个时间段的时候这个id又充值了,这个id则不能算做是13点这个时间段充值的人数,只能计为12点的。


只是12-13这个时间段搞一下特殊么?  还是说只要是二个小时之内连续出现过的都只算一次?  
例如:  同一个ID: 10 点 一次, 11点 一次, 12点 一次, 13点 一次 14点 一次, 这个怎么算?

论坛徽章:
60
20周年集字徽章-20	
日期:2020-10-28 14:04:3015-16赛季CBA联赛之北京
日期:2016-07-06 15:42:0715-16赛季CBA联赛之同曦
日期:2016-06-12 10:38:0915-16赛季CBA联赛之佛山
日期:2016-05-27 11:54:56黄金圣斗士
日期:2015-12-02 11:44:35白银圣斗士
日期:2015-11-25 14:32:43白银圣斗士
日期:2015-11-23 12:53:352015亚冠之布里斯班狮吼
日期:2015-10-21 16:55:482015亚冠之首尔
日期:2015-09-01 16:46:052015亚冠之德黑兰石油
日期:2015-08-31 11:39:192015亚冠之萨济拖拉机
日期:2015-08-28 21:06:5315-16赛季CBA联赛之广东
日期:2016-07-12 14:58:53
3 [报告]
发表于 2013-11-13 21:27 |只看该作者
本帖最后由 reyleon 于 2013-11-13 21:34 编辑

回复 2# 关阴月飞


一天内,同一个id出现多次的话,只有第一次出现的计入那个时间段的总id数,其他任意时间段出现的均不进行统计。

文本中只是截取了一部分数据,原始数据中也会有14点,15点,16点,17点等时间段,总之,一天的时间段分为 0点段,1点段,2点段....23点段

论坛徽章:
32
处女座
日期:2013-11-20 23:41:20双子座
日期:2014-06-11 17:20:43戌狗
日期:2014-06-16 11:05:00处女座
日期:2014-07-22 17:30:47狮子座
日期:2014-07-28 15:38:17金牛座
日期:2014-08-05 16:34:01亥猪
日期:2014-08-18 13:34:25白羊座
日期:2014-09-02 15:03:55金牛座
日期:2014-11-10 10:23:58处女座
日期:2014-12-02 09:17:52程序设计版块每日发帖之星
日期:2015-06-16 22:20:002015亚冠之塔什干火车头
日期:2015-06-20 23:28:22
4 [报告]
发表于 2013-11-13 21:54 |只看该作者
  1. [root@localhost ~]# cat i
  2. 5911043230400514        1       2013-11-08 10:20:41

  3. 5911043230400531        20      2013-11-09 12:16:07
  4. 5911043230400595        10      2013-11-09 12:23:16
  5. 5911043230400595        30      2013-11-09 12:43:16

  6. 5911043230400564        5       2013-11-09 13:17:47
  7. 5911043230400528        10      2013-11-09 13:32:46
  8. 5911043230400595        30      2013-11-09 13:43:16

  9. 5911043230402162        10      2013-11-09 14:00:59

  10. 5911043230400531        20      2013-11-10 12:16:07
  11. 5911043230400595        10      2013-11-10 12:23:16
  12. 5911043230400595        30      2013-11-10 12:43:16

  13. 5911043230400564        5       2013-11-10 13:17:47
  14. 5911043230400528        10      2013-11-10 13:32:46
  15. 5911043230400595        30      2013-11-10 13:43:16
  16. [root@localhost ~]# awk '/^$/{print t,s,n;s=n=0;next}{sub(/:.*/,"",$4);if(!a[$1,$3]++)++n;s+=$2;t=$3" "$4}END{print t,s,n}' i
  17. 2013-11-08 10 1 1
  18. 2013-11-09 12 60 2
  19. 2013-11-09 13 45 2
  20. 2013-11-09 14 10 1
  21. 2013-11-10 12 60 2
  22. 2013-11-10 13 45 2
  23. [root@localhost ~]#
复制代码

论坛徽章:
60
20周年集字徽章-20	
日期:2020-10-28 14:04:3015-16赛季CBA联赛之北京
日期:2016-07-06 15:42:0715-16赛季CBA联赛之同曦
日期:2016-06-12 10:38:0915-16赛季CBA联赛之佛山
日期:2016-05-27 11:54:56黄金圣斗士
日期:2015-12-02 11:44:35白银圣斗士
日期:2015-11-25 14:32:43白银圣斗士
日期:2015-11-23 12:53:352015亚冠之布里斯班狮吼
日期:2015-10-21 16:55:482015亚冠之首尔
日期:2015-09-01 16:46:052015亚冠之德黑兰石油
日期:2015-08-31 11:39:192015亚冠之萨济拖拉机
日期:2015-08-28 21:06:5315-16赛季CBA联赛之广东
日期:2016-07-12 14:58:53
5 [报告]
发表于 2013-11-13 22:00 |只看该作者
回复 4# yestreenstars


      实际是没有空行的,我是为了说明一个时间段一个时间段这样子才用空行区分开。

论坛徽章:
32
处女座
日期:2013-11-20 23:41:20双子座
日期:2014-06-11 17:20:43戌狗
日期:2014-06-16 11:05:00处女座
日期:2014-07-22 17:30:47狮子座
日期:2014-07-28 15:38:17金牛座
日期:2014-08-05 16:34:01亥猪
日期:2014-08-18 13:34:25白羊座
日期:2014-09-02 15:03:55金牛座
日期:2014-11-10 10:23:58处女座
日期:2014-12-02 09:17:52程序设计版块每日发帖之星
日期:2015-06-16 22:20:002015亚冠之塔什干火车头
日期:2015-06-20 23:28:22
6 [报告]
发表于 2013-11-13 22:06 |只看该作者
无空行版:
  1. [root@localhost ~]# cat i
  2. 5911043230400514        1       2013-11-08 10:20:41
  3. 5911043230400531        20      2013-11-09 12:16:07
  4. 5911043230400595        10      2013-11-09 12:23:16
  5. 5911043230400595        30      2013-11-09 12:43:16
  6. 5911043230400564        5       2013-11-09 13:17:47
  7. 5911043230400528        10      2013-11-09 13:32:46
  8. 5911043230400595        30      2013-11-09 13:43:16
  9. 5911043230402162        10      2013-11-09 14:00:59
  10. 5911043230400531        20      2013-11-10 12:16:07
  11. 5911043230400595        10      2013-11-10 12:23:16
  12. 5911043230400595        30      2013-11-10 12:43:16
  13. 5911043230400564        5       2013-11-10 13:17:47
  14. 5911043230400528        10      2013-11-10 13:32:46
  15. 5911043230400595        30      2013-11-10 13:43:16
  16. [root@localhost ~]# awk '{sub(/:.*/,"",$4);t=$3" "$4;if(!a[$1,$3]++)++n[t];s[t]+=$2}END{for(i in n)print i,s[i],n[i] | "sort -k1,1 -k2n"}' i
  17. 2013-11-08 10 1 1
  18. 2013-11-09 12 60 2
  19. 2013-11-09 13 45 2
  20. 2013-11-09 14 10 1
  21. 2013-11-10 12 60 2
  22. 2013-11-10 13 45 2
  23. [root@localhost ~]#
复制代码

论坛徽章:
32
处女座
日期:2013-11-20 23:41:20双子座
日期:2014-06-11 17:20:43戌狗
日期:2014-06-16 11:05:00处女座
日期:2014-07-22 17:30:47狮子座
日期:2014-07-28 15:38:17金牛座
日期:2014-08-05 16:34:01亥猪
日期:2014-08-18 13:34:25白羊座
日期:2014-09-02 15:03:55金牛座
日期:2014-11-10 10:23:58处女座
日期:2014-12-02 09:17:52程序设计版块每日发帖之星
日期:2015-06-16 22:20:002015亚冠之塔什干火车头
日期:2015-06-20 23:28:22
7 [报告]
发表于 2013-11-13 22:08 |只看该作者
本帖最后由 yestreenstars 于 2013-11-13 22:08 编辑

回复 5# reyleon
在你回帖之前我已经在想了~

   

论坛徽章:
32
处女座
日期:2013-11-20 23:41:20双子座
日期:2014-06-11 17:20:43戌狗
日期:2014-06-16 11:05:00处女座
日期:2014-07-22 17:30:47狮子座
日期:2014-07-28 15:38:17金牛座
日期:2014-08-05 16:34:01亥猪
日期:2014-08-18 13:34:25白羊座
日期:2014-09-02 15:03:55金牛座
日期:2014-11-10 10:23:58处女座
日期:2014-12-02 09:17:52程序设计版块每日发帖之星
日期:2015-06-16 22:20:002015亚冠之塔什干火车头
日期:2015-06-20 23:28:22
8 [报告]
发表于 2013-11-13 22:14 |只看该作者
本帖最后由 yestreenstars 于 2013-11-13 22:17 编辑

基于空行版修改:
  1. [root@localhost ~]# cat i
  2. 5911043230400514        1       2013-11-08 10:20:41
  3. 5911043230400531        20      2013-11-09 12:16:07
  4. 5911043230400595        10      2013-11-09 12:23:16
  5. 5911043230400595        30      2013-11-09 12:43:16
  6. 5911043230400564        5       2013-11-09 13:17:47
  7. 5911043230400528        10      2013-11-09 13:32:46
  8. 5911043230400595        30      2013-11-09 13:43:16
  9. 5911043230402162        10      2013-11-09 14:00:59
  10. 5911043230400531        20      2013-11-10 12:16:07
  11. 5911043230400595        10      2013-11-10 12:23:16
  12. 5911043230400595        30      2013-11-10 12:43:16
  13. 5911043230400564        5       2013-11-10 13:17:47
  14. 5911043230400528        10      2013-11-10 13:32:46
  15. 5911043230400595        30      2013-11-10 13:43:16
  16. [root@localhost ~]# awk '{sub(/:.*/,"",$4)}t&&t!=$3" "$4{print t,s,n;s=n=0}{if(!a[$1,$3]++)++n;s+=$2;t=$3" "$4}END{print t,s,n}' i
  17. 2013-11-08 10 1 1
  18. 2013-11-09 12 60 2
  19. 2013-11-09 13 45 2
  20. 2013-11-09 14 10 1
  21. 2013-11-10 12 60 2
  22. 2013-11-10 13 45 2
  23. [root@localhost ~]#
复制代码

论坛徽章:
60
20周年集字徽章-20	
日期:2020-10-28 14:04:3015-16赛季CBA联赛之北京
日期:2016-07-06 15:42:0715-16赛季CBA联赛之同曦
日期:2016-06-12 10:38:0915-16赛季CBA联赛之佛山
日期:2016-05-27 11:54:56黄金圣斗士
日期:2015-12-02 11:44:35白银圣斗士
日期:2015-11-25 14:32:43白银圣斗士
日期:2015-11-23 12:53:352015亚冠之布里斯班狮吼
日期:2015-10-21 16:55:482015亚冠之首尔
日期:2015-09-01 16:46:052015亚冠之德黑兰石油
日期:2015-08-31 11:39:192015亚冠之萨济拖拉机
日期:2015-08-28 21:06:5315-16赛季CBA联赛之广东
日期:2016-07-12 14:58:53
9 [报告]
发表于 2013-11-13 22:25 |只看该作者
回复 6# yestreenstars


    膜拜,牛逼,搞定了,大赞

论坛徽章:
60
20周年集字徽章-20	
日期:2020-10-28 14:04:3015-16赛季CBA联赛之北京
日期:2016-07-06 15:42:0715-16赛季CBA联赛之同曦
日期:2016-06-12 10:38:0915-16赛季CBA联赛之佛山
日期:2016-05-27 11:54:56黄金圣斗士
日期:2015-12-02 11:44:35白银圣斗士
日期:2015-11-25 14:32:43白银圣斗士
日期:2015-11-23 12:53:352015亚冠之布里斯班狮吼
日期:2015-10-21 16:55:482015亚冠之首尔
日期:2015-09-01 16:46:052015亚冠之德黑兰石油
日期:2015-08-31 11:39:192015亚冠之萨济拖拉机
日期:2015-08-28 21:06:5315-16赛季CBA联赛之广东
日期:2016-07-12 14:58:53
10 [报告]
发表于 2013-11-13 22:27 |只看该作者
回复 8# yestreenstars


    这思路太神奇了,我以为会很复杂,看来真的是只有想不到,没有做不到啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP