开机时间排名——一个正态分布的应用的案例

觉得很有用,但是用不上。
这个肯定是很多人对《统计学》这一门课程的直观感觉,如果这货一点用处都没有,那是不可能的,大学的老师又不傻,没用的课程不会做为基础课程开设。但是你说它有用在哪里,又没有办法举例出来,所以就用不上了。
坦白来讲,我不想开设一门所谓的《傻瓜都能学懂统计学》的类似课程,因为《统计学》是一门高投入,高回报的课程,也就是我们需要对它投入一定的热情和时间去学习,去思考,它才能对你有所回应,并且,非常强烈地回应的一门科学。打个比喻,统计学就像一个高冷的美人,你想获得美人的青睐,就必须绞尽脑汁,有所付出。
大数据
在这里,我给大家使用一个案例,一个大家在日常生活中经常看到,但是却可能没有深入去思考的案例,来讲解一下统计学的应用场景,这个场景涉及到的一个理论就是正态分布理论。
下面两个图案你们肯定非常熟悉,对,就是360杀毒软件的开机耗时页面。
大家脑洞大开,想象一下,这个功能软件工程师是怎么设计的呢?
你可能会觉得它是这样子实现的:
1、收集所有用户的开机时间的数据,排好序放在一个数据库中;
2、然后根据你的开机时间,找出你的排名,除以总用户数,就是你击败电脑占比。
是的,这样子设计排名算法是非常合理,但是有以下几个问题:
1、你电脑开机的时候,没有连接网络怎么办呢?那就无法请求到所有的用户的数据了对吧。
2、就算所有的用户的数据,已经下载到你本地,根据不完全统计,360的用户数,估计也超过10亿了吧,上10亿行的数据进行比较统计,放在开机这个地方,恐怕不妥,而且做过软件开发的人都知道,这种同步数据的方式,非常蛋疼。
那么我觉得它是怎么设计的呢?
我会这样子设计,首先,收集尽量多的用户的开机时间,然后,查看时间的分布如何。(开机时间数据链接: http://pan.baidu.com/s/1jGu8ZXk 密码: epah)
 data <- read.csv("D:\\data\\20150930\\startTime.csv")
 mean(data[, 1])
 sd(data[, 1])
 hist(
   data[, 1], prob=TRUE,
   main="开机时间频率直方图",
   ylab="频率", xlab="开机时间(秒)"
 )
 lines(density(data[, 1]), col="red")
从这个图中,我们可以看到,开机时间貌似符合正态分布,有戏!对吧,但是我只能用貌似,因为我还没有检测数据的正态性,好,我们使用R来检测一下开机时间是否符合正态分布。
检测正态分布的方法:
一、绘画QQ图,QQ图判断法:查看我们的数据,是否绝大部分落在中间直线的附近。
 qqnorm(
   data[, 1],
   main="QQ图",
   ylab="y", xlab="x"
 );
 qqline(data[, 1]);
可以看到,QQ图中,所有的点都落在了中间的直线上,直观上我们就可以判断这个数据的分布符合正态分布了。
二、夏皮罗–威克尔(Shapiro-Wilk)检验 法
三、K-S检验法
这两种方法我就不在这里演示了,详细请查看《R统计分析实战》(http://www.datastudy.cc/to/36)的课程。
验证了数据是正态分布的之后,事情就变得非常简单了,下面我们来看看如何进行建模。
一、建立正态分布的模型,只需要求出正态分布的均值和标准差即可,也就是:
 data_mean <- mean(data[, 1])
 data_sd <- sd(data[, 1])
 > data_mean
 [1] 50.7848
 > data_sd
 [1] 11.10776
二、然后保存这个数据在软件中,有一个用户开机时间为38秒,那么他的排名是多少呢?
 > 1 - pnorm(38, mean=data_mean, sd=data_sd)
 [1] 0.8751295
也就是说,我们使用pnorm函数,根据正态分布的性质,就可以求出这个用户的排名是87.5%了。
这样子设计这个功能,是否非常地简单,快捷呢?但是很多人可能想不到是这样子设计的,我自己根据自己的学习历程,思考了一下,为什么我们会想不到这个问题可以这样子解决呢?我觉得是大学教育的问题,大学里面,很多时候举例子,都是很传统的例子,大家在学习正态分布的时候,还记得教授给我们举例是用什么例子吗?对就是考试的平均分,以及学生成绩排名的例子,还记得吗?因为教授有很多这种学生的成绩数据嘛,刚好就拿来举例子,这没有什么不妥。
不妥的是,你们还记得这个排名是如何计算的吗?我估计你们已经忘记了,因为是一种非常笨重的方法,就是从一本标准正态分布表里面查的,艾玛,这么挫的方法,怎么可能让你觉得它是一个可以让计算机自动计算的问题呢?pnorm函数,完全可以替代那本所谓的标准正态分布表了,所以,如果大学里面大家都有pnorm这个函数,估计大家就可以想到这个方法了。
好了,本文是否到这里就结束了呢?当然不是,这个是毁大家对统计学三观的文章,还没有震撼到你呢,怎么能够随随便便就结束了呢!
如果我们要开发一个360的竞争产品,比如叫做361安全卫士,哈哈,那么我们一开始没有大量用户的开机数据,不知道用户平均开机时间是多少,我们如何实现这个功能呢?
这个就是一个线性规划的问题了,你不知道什么叫做线性规划?好吧,我装B了,解二元一次方程组你听过了吧,艾玛,就是这货,我们来看看如何进行正态分布模型的窃取。
虽然我们不知道360收集的用户的均值和标准差是多少,但是我们知道一个正态分布的均值和标准差。这个分布叫什么?对了,就是传说中的标准正态分布了。标准正态分布是什么?所谓的标准正态分布,是指一个正态分布,经过z值转换进行标准化后,转换后的z值的分布,就是标准正态分布,它有个很牛B的性质,就是均值为1,标准差为0!
别暗爽,我故意写错的,标准正态分布的均值为0,标准差为1!
 hist(
   scale(data[, 1]), prob=TRUE,
   main="开机时间正态分布直方图",
   ylab="频率", xlab="开机时间z值"
 )
 lines(density(scale(data[, 1])), col="red")
有了z值,有了标准正态分布,我们就可以进行方程组的建立了,刚刚我们知道了pnorm函数,是根据值进行排名的计算的,那么知道排名占比,如何计算原来对应的分数是什么呢?也就是逆运算是啥?那就是qnorm了,我们可以使用qnorm函数,根据33秒,排名5%(比95%的用户快,意思就是从小到大排名5%,对吧,自己想一下),43秒,排名23%,计算出他们对应的标准z值是多少。
计算出它们的标准值后,我们就可以根据z值的计算公式,也就是值减去均值除以标准差,建立二元一次方程,具体计算过程如下:
 #一个是33秒,排名5%,一个是43秒,排名23%
 #从标准正态分布中,求出5%,23%百分位对应的z值是什么
 z05_100 <- qnorm(0.05, mean=0, sd=1)
 z23_100 <- qnorm(0.23, mean=0, sd=1)
 #求解线性方程组
 #z05_100 = (33 - _mean)/_sd   =>  z05_100*_sd + _mean = 33
 #z23_100 = (43 - _mean)/_sd   =>  z23_100*_sd + _mean = 43
 #求解线性方程组
 r <- solve(
   matrix(
 c(z05_100, 1, z23_100, 1),
 nrow = 2, ncol = 2,
 byrow=TRUE
   ),
   matrix(
 c(33, 43),
 nrow = 2
   )
 );
 #进行验证
 pnorm(33, mean=r[2, 1], sd=r[1, 1])
 pnorm(43, mean=r[2, 1], sd=r[1, 1])
 > r
  [,1]
 [1,] 11.03745
 [2,] 51.15498
 > #进行验证
 > pnorm(33, mean=r[2, 1], sd=r[1, 1])
 [1] 0.05
 > pnorm(43, mean=r[2, 1], sd=r[1, 1])
 [1] 0.23
到这里,我们就知道了,在360的所有用户中,他们的开机时间的均值为51.15498秒,方差为11.03745,成功得到copy。
好了,到这里,真的就准备结束了,从我们这两个案例我们可以知道,如果我们可以掌握一门语言,那么,学习起统计学,肯定比我们在大学里面通过查表学习统计学更加有兴趣,毕竟,替代人工,就是我们学习人工智能的目标嘛,咦,我怎么提到了人工智能了?
很开心终于有同学问到正态分布这个问题,也就是统计学的问题,这证明大家开始脑洞大开了,数据分析的基础技能,也就是数据处理、数据分析、数据绘图的小技巧已经满足不了大家了,但是大家的脑洞也只是刚开,未来的路程还很长,而代表着人工智能的数据挖掘技术,正是以统计学为基础,进行综合拓展的一门学科,如果大家想往数据的更深层次发展,继续学习前进吧,数据科学是无止尽的,大家一起学习进步!
注:本文没有使用到奇虎360公司的任何数据,所有数据都是通过模拟出来的,方案也是我个人YY的,如果做对了,纯属巧合,如果不对,你们可以批判我,请不要告我,谢谢周先生不杀之恩。

大数据分析实战 发表于 2016-10-26 10:16:58

原文链接 http://www.datastudy.cc/article/3d870616e0a90bf4f342deb693c0ee30

开机时间排名——一个正态分布的应用的案例相关推荐

  1. 下面介绍一个开源的OCR引擎Tesseract2。值得庆幸的是虽然是开源的但是它的识别率较高,并不比其他引擎差劲。网上介绍Tessnet2也是当时时间排名第三的识别引擎,只是后来慢慢不维护了,目前是G

    下面介绍一个开源的OCR引擎Tesseract2.值得庆幸的是虽然是开源的但是它的识别率较高,并不比其他引擎差劲.网上介绍Tessnet2也是当时时间排名第三的识别引擎,只是后来慢慢不维护了,目前是G ...

  2. 计算开机时间c语言编程,一个计算电脑开机时间长短的程序,还有点小问题,请VC99大哥来指教...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 小弟我花了很长时间写了这个程序,目的是可以计算机电脑一个月的开机时间,比如说第一次开机3个小时,下一次开机还可以在3小时的基础上接着计时,这个程序,现在可 ...

  3. 让您的开机时间和打开网页速度如飞一样

    让您的开机时间和打开网页速度如飞一样   目的:      一:优化你的系统        二:做ramdisk 让你上网如飞一样       全部勾上,清理,可以提高您的系统速度 这里可以教大家一种 ...

  4. idea每次都要配置tomcat_电脑每次开机时间都不对?电脑每次开机都要重新设置时间解决方法...

    近期有网友咨询到装机之家晓龙,称自己一台老电脑最近出现一个问题,每次电脑重新开机都需要设置一下时间,关机再开机之后系统时间又归零了,又需要重新设置系统时间.日期,十分麻烦.那么电脑每次开机时间都不对怎 ...

  5. RK2908开机时间分析及优化

    1    RK2908开机时间分析和优化文档背景概述      目前由于RK2908开机时间比较长(平均35s)可能对一体机项目的整体体验造成影响,所以需要对RK2908开机整个流程进行分析,是否有优 ...

  6. python得到电脑的开机时间

    #先下载psutil库:pip install psutilimport psutil import os,datetime def main():print "电脑的开机时间", ...

  7. win7设置自动开机时间_电脑可以设置自动开机时间,您知道吗?

    基本上每台电脑都可以在主板BIOS里设定固定的开机时间.比如你早上8点上班,可以设定7点50分自动开机.如果是服务器开机时间比较久,你也可以设定在7点开机或更早时间.上班来到座位上电脑已经开好,不用手 ...

  8. Python获取主机信息、开机时间和开机时长、当前登陆用户

    题目描述: 1.获取当前主机信息(操作系统名.主机名.内核版本.硬件架构) 2.获取开机时间和开机时长 3.获取当前登录用户 代码块: import os import psutil from dat ...

  9. 安卓10开机时间优化分析

    本文从以下六点分析开机时间 1.软件环境2.开机时间测试方法3.开机各阶段重要的时间节点4.bootchart工具使用说明5.Android开机时间日志信息6.开机时间优化方案 一.软件环境 平台:a ...

最新文章

  1. Galaxy Project | 一些尝试与思考
  2. python用途与前景-Python 就业方面的选择与应用分析
  3. C语言main函数、return、exit函数
  4. 程序员过关斩将--错误的IOC和DI
  5. 我的世界怎么设置服务器维护中,我的世界服务器
  6. 论文浅尝 | EARL: Joint Entity and Relation Linking for QA over KG
  7. C++常见面试题(2019年校招总结)
  8. 技术实践第四期|解读移动开发者日常-性能监控平台应用
  9. MySQL报错 Packet for query is too large,server向mysql发送的数据包大小超过mysql限制
  10. 电商(电子商务)网站设计技巧|从可临摹素材模板开始
  11. Python之常用函数小结
  12. Cmake使用示例与整理
  13. SQL Server 2008 附加数据库之后显示为 只读 的解决方法
  14. RPM 打包技术与典型 SPEC 文件分析
  15. QT之实现斗鱼直播PC客户端
  16. VS2010 由于应用程序配置不正确,程序未能启动”--原因及解决方法
  17. 谷歌AI版“你画我猜”刷屏朋友圈 背后是这样的原理!
  18. ADNI数据集相关概念整理
  19. 用简单易懂的话语来快速入门windows缓冲区溢出
  20. linux 服务器 安装网卡驱动,Linux系统下安装Intel千兆网卡驱动

热门文章

  1. 用计算机制作微课教学教案,微课教学设计范文
  2. 《英雄本色》幕后故事:徐克和吴宇森两大宗师各导演一部半
  3. 建荣蓝牙芯片型号_建荣CW6685单芯片蓝牙芯片方案设计
  4. 你越撩TA_TA越聪明?谁是最厉害的人工智能机器人?
  5. 信号计算机联锁软件修改的程序,铁路信号计算机联锁控制系统容错技术的探讨...
  6. 2020年的13个优秀企业架构工具
  7. 【cs231n】Batchnorm及其反向传播
  8. excel图表交互联动_不用excel,如何实现图表联动?
  9. 创业公司是否只讲奉献和态度,不需要合理的制度和管理---关于《途牛CEO 于敦德 :创业、密度制胜 》文章读后有感
  10. jass 脚本bug