在面对大规模数据时,对数据预处理,获取基本信息是十分必要的。今天分享的就是数据预处理的一些东西。
一、获取重要数据
在导入大规模数据时,我们通常需要知道数据中的关键内容:最值,均值,离差,分位数,原点矩,离差,方差等。在R中常用的函数与作用整理如下:
统计函数 |
作用 |
Max |
返回数据的最大值 |
Min |
返回数据的最小值 |
Which.max |
返回最大值的下标 |
Which.min |
返回最小值的下标 |
Mean |
求均值 |
Median |
求中位数 |
mad |
求离差 |
Var |
求方差(总体方差) |
Sd |
求标准差 |
Range |
返回【最小值,最大值】 |
Quantile |
求分位数 |
Summary |
返回五数概括与均值 |
Finenum |
五数概括(最值,上下四分位数,中位数) |
Sort |
排序(默认升序,decreasing=T时为降序) |
Order |
排序(默认升序,decreasing=T时为降序) |
Sum |
求和 |
length |
求数据个数 |
emm |
Actuar包中求k阶原点矩 |
skewness |
Fbasic包中求偏度 |
kurtosis |
Fbasics包中求峰度 |
注:对象为分组数据,矩阵时返回的不是整体的方差,均值,而是每一列(组)的方差均值其余变量类似。
二、直方图与频数统计
对于数据分布的认识,在大规模时有必要使用直方图。在R语言中,直方图的函数调用为:
hist(x, breaks = "Sturges",
freq = NULL, probability = !freq,
include.lowest = TRUE, right = TRUE,
density = NULL, angle = 45, col = NULL, border = NULL,
main= paste("Histogram of" , xname),
xlim = range(breaks), ylim = NULL,
xlab = xname, ylab,
axes = TRUE, plot = TRUE, labels = FALSE,
nclass = NULL, warn.unused = TRUE, ...)
这里值得一提的是,分组参数breaks默认使用史特吉斯(Sturges)公式,根据测定数n 来计算组距数k,公式为:k=1+3.32 logn。当然也可以自己设定一个数组来决定分组。(举例参见《R语言绘图学习笔记》)
说完频率分布直方图,我们还有频率分布直方表。对于数据的统计,函数table可以统计出数据中完全相同的数据个数。例如对《全宋词》中暴力拆解(两个相邻字算一词)词语使用数目的统计程序如下:
而对于一堆数,我们按区间做的时候,就还需要函数cut.调用格式如下:
cut(x, breaks, labels = NULL,
include.lowest = FALSE, right = TRUE, dig.lab = 3,
ordered_result = FALSE, ...)
举一个具体例子,某一款保险产品,假设保单到达的速率为10张/天,理赔发生的速率为1次/天。假设每张保单价格c=120,理赔额服从参数为v=1/1000 (以c*lambda1=1.2*lambda2/v设定)的指数分布。设定初始u=3000时,计算到第1000天为止发生破产的概率。(案例摘自《复合泊松过程模型的推广和在R语言环境下的随机模拟》 )
破产过程的R代码如下:
用R 语言模拟了1200 次,最终结果 1200 次中破产 628 次,破产率大概 52.3% 。输出各阶段破产时刻 频数和率结果如下:
区间 |
频数 |
|
|
|
|
(0,10] |
389 |
|
|
|
|
(10,20] |
89 |
|
|
|
|
(20,30] |
45 |
|
|
|
|
(30,40] |
28 |
|
|
|
|
(40,50] |
16 |
|
|
|
|
(50,100] |
36 |
|
|
|
|
(100,200] |
17 |
|
|
|
|
(200,300] |
6 |
|
|
|
|
(300,400] |
2 |
|
|
|
|
(400,500] |
0 |
|
|
|
|
(500,1000] |
0 |
|
|
|
|
(1000,1200] |
572 |
|
|
|
对于一些数据我们可能直接录入的是频率分布直方表,那么actuar包中提供了一个有用的数据结构grouped.data。调用格式:
grouped.data(..., right = TRUE, row.names = NULL, check.rows = FALSE,
check.names = TRUE)
运用举例:
对比一下下面的输出结果,我们发现分组数据的均值计算与总体数据计算方法是不一样的。
注:函数elev()可以计算有限期望值,可以避免mean(zz)不存在的尴尬。
当然对于数据的直观分析R提供的函数有许多,我们将常见的函数汇总如下:
三、正态检验与经验分布
对于数据的分布估计经验分布是一个非常好的估计。在actuar包中函数ogive给出的实现:
ogive(x, y = NULL, ...)
## S3 method for class 'ogive'
print(x, digits = getOption("digits") - 2, ...)
## S3 method for class 'ogive'
summary(object, ...)
## S3 method for class 'ogive'
knots(Fn, ...)
## S3 method for class 'ogive'
plot(x, main = NULL, xlab = "x", ylab = "F(x)", ...)
还是以上面的例子数据zz为例:
ogive(zz)
plot(ogive(zz))
输出结果:
Ogive forgrouped data
Call:ogive(zz)
x = -Inf, -3, -2, ..., 3, Inf
F(x) = 0, 0.0011, 0.0229, ...,0.9985, 1
由于大数定律的存在,很多情况下,正态性检验是十分有必要的一个分布检验,在R中提供的正态性检验可以汇总为下面的一个正态检验函数:
对于分布的检验还有卡方检验,柯尔莫哥洛夫检验等,在R中也有实现函数chisq.test()等。我们同样以一个例子来说明:
例子摘自:王兆军《数理统计讲义》习题6.3
解答如下:(结果以注释形式标明)
data <- readRDS("filename.rds")
共享栈共享站可以让两个顺序栈共享一个一维数组空间基本操作判断栈为空:当top0==-1时,0号栈为空,top1==MaxSize时1号栈为空判断栈满:(top1-top0=1)时栈满添加元素:0号栈进栈时,top0先自增1,在赋值1号栈,先自减,在赋值出栈:与入栈相反实现代码#include <stdio.h>#include <stdlib.h>#include<stdbool.h>#define MaxSize 50 //
iOS 二维码扫描以前就写过二维码扫描的文章,今天难得抽出来时间重新整理了一下,把所有用都的关于二维码的都写在这了,二维码问题,看了这一篇文章就什么都解决了原生二维码扫描个人是比较支持用原生二维码扫描的,这里也就仅仅以原生二维码扫面为范例。另也有二维码扫描库ZBarSDK(点这里)和 ZXingObjC(点这里) 。1.原生扫描用到的几个类@pr
有时候,通过httplicent发送url的时候,你会遇到懊恼的java.lang.IllegalArgumentException: Illegal character in scheme at index 0。你会看到 空格被转成了+号了。 When to encode space to plus (+) or %20 ...google 上有解释: URLEn
为现有的redis创建密码或修改密码的方法:1.查看redis容器id docker ps -a 2. 进入redis的容器 docker exec -it 容器ID bash 3.运行命令:redis-cli4.查看现有的redis密码:config get requirepass5.设置redis密码config set requirepass ****(****为你要设置的密码)6.若出现(error) NOAUTH Authenticati...
linux使用yum安装mongodb出现GPG key retrieval failed: [Errno 14] problem making ssl connection问题在配置yum安装文件的时候[mongodb-org-3.2]name=MongoDB Repositorybaseurl=https://repo.mongodb.org/yum/redhat/$releasev...
JavaScript执行上下文与执行上下文栈变量提升与函数提升1、变量声明提升通过var定义(声明)的变量,在定义语句之前就可以访问到 值为:undefined2、函数声明提升通过function声明的函数,在之前就可以直接调用 值为:函数定义(对象) 代码说明:var a = 4 function fn () { console.log(a) ...
使用ssh公钥实现免密码登录 ssh 无密码登录要使用公钥与私钥。Linux下可以用用ssh-keygen生成公钥/私钥对,下面我以CentOS为例。有机器A(192.168.1.155),B(192.168.1.181)。现想A通过ssh免密码登录到B。首先以root账户登陆为例。1.在A机下生成公钥/私钥对。[[email protected] ~]# ssh-keygen -t ...
摘要: 今天提交idea上的代码到GitHub,提交过程已经完成, 在版本控制的Log中可以看到,已经将这一部分都提交更新了 在版本控制的Local Changes中已经看不到提交过的代码了 但是GitHub上并没有找到提交的代码 怎么办呢? 是因为刚刚走的过程中,其实还是没有走完,只是将I...今天提交idea上的代码到GitHub,提交过程已经完成,在版本控制的Log中可以看...
cxcore100.dll官方版cxcore100.dll官方版是款电脑中系统文件夹中的重要文件。cxcore100.dll缺少,会出现软件或者游戏运行不起来,可能会提示文件加载失败信息,从而导致windows系统无法正常工作。cxcore100.dll的存在对维护计算机系统的稳定具有重要作用。华军软件园提供cxcore100.dll软件的下载服务,下载cxcore100.dll软件其他版本,请到...
Android 7.0正式版在近期开始进行了推送,该版本中最大的一个特色就是支持在设备上展示多窗口供用户查看各个应用。如何切换到多窗口模式 多窗口模式有两种:分屏模式和自由形状模式。分屏模式分屏模式 进入分屏模式的操作:在overview屏幕下,长按Activity标题,然后可以拖动该 Activity 至屏幕突出显示的区域。进入分屏模式 在分屏模式下,手指可以拖动分界线,放大其...
C#控件编写的第一课,最容易的入门方式,从一个空白控件开始,逐步掌握自定义控件的编写过程。