GVKun编程网logo

使用Python和Rpy2进行统计测试(Kolmogorov和T检验)(python 统计检验)

14

如果您想了解使用Python和Rpy2进行统计测试的相关知识,那么本文是一篇不可错过的文章,我们将对Kolmogorov和T检验进行全面详尽的解释,并且为您提供关于eclispe中使用python库p

如果您想了解使用Python和Rpy2进行统计测试的相关知识,那么本文是一篇不可错过的文章,我们将对Kolmogorov和T检验进行全面详尽的解释,并且为您提供关于eclispe中使用python库 pyswip 进行prolog编程、iPython和R之间GLM结果的差异、KS(Kolmogorov-Smirnov)值、ping包测试内容写入文件,并使用python对相应的结果进行统计分析的有价值的信息。

本文目录一览:

使用Python和Rpy2进行统计测试(Kolmogorov和T检验)(python 统计检验)

使用Python和Rpy2进行统计测试(Kolmogorov和T检验)(python 统计检验)

我已经运行了一些算法,并希望对结果进行一些统计分析。我有两个向量的错误率平均值。

使用R,使用下面的行,我将得到所有信息。

t.test(methodresults1,methodresults2,var.equal=FALSE,paired=FALSE,alternative="less")

由于我使用的是Python,因此我想使用Rpy2项目。

我尝试过:

import rpy2.robjects as R# methodresults1 and methodresults2 are numpy arrays.# kolmogorov testnormality_res = R.r[''ks.test''](R.FloatVector(methodresults1.tolist()),''pnorm'',mean=R.FloatVector(methodresults1.mean().tolist()),sd=R.FloatVector(methodresults1.std().tolist())))# t-testres = R.r[''t.test''](R.FloatVector(methodresults1.tolist()),R.FloatVector(methodresults2.tolist()),alternative=''two.sided'',var.equal=FALSE,paired=FALSE)res.rx(''p.value'')[0][0]res.rx(''statistic'')[0][0]res.rx(''parameter'')[0][0]

我无法同时执行这两项测试。

我还发现t检验的问题在于var.equal语句,它给了我 * SyntaxError:关键字不能是表达式(第1行)。

额外的问题:是否有更好的方法来处理numpy和Rpy2?

答案1

小编典典

如它所说:“ SyntaxError:关键字不能是表达式(第1行)。

在Python中,符号不能包含字符“。”。

from rpy2.robjects.packages import importrfrom rpy2.robjects.vectors import StrVectorstats = importr("stats")stats.t_test(methodresults1, methodresults2,             **{''var.equal'': False,                ''paired'': False,                ''alternative'': StrVector(("less", ))})

查看rpy2文档中有关功能的更多信息。


eclispe中使用python库 pyswip 进行prolog编程

eclispe中使用python库 pyswip 进行prolog编程

from pyswip import Prolog
prolog = Prolog()
prolog.assertz("father(michael,john)")
prolog.assertz("father(michael,gina)")
list(prolog.query("father(michael,X)")) == [{''X'': ''john''}, {''X'': ''gina''}]
for soln in prolog.query("father(X,Y)"):
    print(soln["X"], "is the father of", soln["Y"])

 

首先需要对库pyswip进行安装  pip  install pyswip

安装好之后 在eclipse中创建一个python工程

创建一个名为 test1.py的python文件 输入如下代码 测试是否可以使用库pyswip 进行prolog编程

输出结果为:

iPython和R之间GLM结果的差异

iPython和R之间GLM结果的差异

我正试图在R中执行回归分析.下面是我在R中生成的一些随机虚拟数据,在R中运行逻辑glm.我已将数据保存到测试文件中,将其读入 python中i python(ipython笔记本很棒,只是刚开始使用它!),然后尝试用python运行相同的分析.
结果非常相似,但它们是不同的.我有点希望它们是一样的.我做错了什么,是否有我缺少的参数,或者由于某些基础计算的差异?

任何帮助赞赏!

编辑:我不知道这是否保证关闭,但我用Ben的编辑(和更清洁)代码重新编写代码,python和R之间的结果现在是相同的.我根本没有更改python代码,以及我以前的R代码和Ben的代码,而不同的应该是(据我所知)做同样的事情.无论问题的重点是现在都没有实际意义.尽管如此,谢谢你看看.

生成随机数据并运行glm:

set.seed(666)
dat <- data.frame(a=rnorm(500),b=runif(500),c=as.factor(sample(1:5,500,replace=TRUE)))
library(plyr)
dat <- mutate(dat,y0=((jitter(a)^2+(-log10(b)))/(as.numeric(c)/10))+rnorm(500),y=(y0>=mean(y0)))                  

fit1 <- glm(y~a+b+c,data=dat,family=binomial(''logit''))
summary(fit1)

Call:
glm(formula = y ~ a + b + c,family = binomial("logit"),data = dat)

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-1.5369  -0.8154  -0.5479   0.9314   2.3831  

Coefficients:
            Estimate Std. Error z value Pr(>|z|)    
(Intercept)   1.2363     0.3007   4.111 3.94e-05 ***
a            -0.2051     0.1062  -1.931   0.0535 .  
b            -1.6103     0.3834  -4.200 2.67e-05 ***
c2           -0.5114     0.3091  -1.654   0.0980 .  
c3           -1.3169     0.3147  -4.184 2.86e-05 ***
c4           -2.0017     0.3342  -5.990 2.09e-09 ***
c5           -2.5084     0.3772  -6.651 2.92e-11 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 

(dispersion parameter for binomial family taken to be 1)

    Null deviance: 631.31  on 499  degrees of freedom
Residual deviance: 537.84  on 493  degrees of freedom
AIC: 551.84

Number of Fisher Scoring iterations: 4

输出相同的数据以供在python中使用:

write.table(dat,file=''test.txt'',row.names=F,col.names=T,quote=F,sep='','' )

现在的python代码:

import pandas as pd
import statsmodels.api as sm
import pylab as pl
import numpy as np

data = pd.read_csv(''test.txt'')
data.describe()
dummy_c = pd.get_dummies(data[''c''],prefix=''c'')
data = data[[''y'',''a'',''b'']].join(dummy_c.ix[:,''c_2'':])
data_depend = data[''y'']
data_independ = data.iloc[:,1:]
data_independ = sm.add_constant(data_independ,prepend=False)
glm_binom = sm.GLM(data_depend,data_independ,family=sm.families.Binomial())
res = glm_binom.fit()
print res.summary()

产量:

Generalized Linear Model Regression Results                  
==============================================================================
Dep. Variable:                      y   No. Observations:                  500
Model:                            GLM   Df Residuals:                      493
Model Family:                Binomial   Df Model:                            6
Link Function:                  logit   Scale:                             1.0
Method:                          IRLS   Log-Likelihood:                -268.92
Date:                Sun,27 Oct 2013   Deviance:                       537.84
Time:                        01:26:47   Pearson chi2:                     514.
No. Iterations:                     6                                         
==============================================================================
                 coef    std err          t      P>|t|      [95.0% Conf. Int.]
------------------------------------------------------------------------------
a             -0.2051      0.106     -1.931      0.054        -0.413     0.003
b             -1.6103      0.383     -4.200      0.000        -2.362    -0.859
c_2           -0.5114      0.309     -1.654      0.098        -1.117     0.094
c_3           -1.3169      0.315     -4.184      0.000        -1.934    -0.700
c_4           -2.0017      0.334     -5.990      0.000        -2.657    -1.347
c_5           -2.5084      0.377     -6.651      0.000        -3.248    -1.769
const          1.2363      0.301      4.111      0.000         0.647     1.826
==============================================================================

解决方法

一点代码清理:

set.seed(101)
dat <- data.frame(a=rnorm(500),family=binomial(''logit''))
fit2 <- update(fit1,control=glm.control(maxit=6))
all.equal(fit1,fit2)

coef(fit1)
## (Intercept)           a           b          c2          c3          c4 
##  1.22283193 -0.07544488 -1.54732712 -0.36477556 -1.46313143 -1.95008291 
##          c5 
## -3.11914945

我同意@ Roland的评论,一个可重复的例子会有所帮助.最可能的区别在于对比编码,例如:

fit3 <- update(fit1,contrasts=list(c=contr.sum))
coef(fit3)
## 
## (Intercept)           a           b          c1          c2          c3 
## -0.15659594 -0.07544488 -1.54732712  1.37942787  1.01465231 -0.08370356 
##          c4 
## -0.57065503

如果您使用仅包含连续预测变量的模型,结果是否更好?

更新:对比度编码不能是整个故事,因为偏差/对数似然以及系数不同.

KS(Kolmogorov-Smirnov)值

KS(Kolmogorov-Smirnov)值


KS(Kolmogorov-Smirnov)值越大,表示模型能够将正、负客户区分开的程度越大。KS值的取值范围是[0,1] 

ks越大,表示计算预测值的模型区分好坏用户的能力越强。

ks值 含义
> 0.3 模型预测性较好
0,2~0.3 模型可用
0~0.2 模型预测能力较差
< 0 模型错误

 

 

 

通常来讲,KS>0.2即表示模型有较好的预测准确性。

ks求解方法:

ks需要TPR和FPR两个值:真正类率(true positive rate ,TPR), 计算公式为TPR=TP/ (TP+ FN),刻画的是分类器所识别出的 正实例占所有正实例的比例。另外一个是假正类率(false positive rate, FPR),计算公式为FPR= FP / (FP + TN),计算的是分类器错认为正类的负实例占所有负实例的比例。KS=max(TPR-FPR)。其中:

TP:真实为1且预测为1的数目

FN:真实为1且预测为0的数目
FP:真实为0的且预测为1的数目

TN:真实为0的且预测为0的数目

一句话概括:

KS曲线是两条线,其横轴是阈值,纵轴是TPR(上面那条)与FPR(下面那条)的值,值范围[0,1] 。两条曲线之间之间相距最远的地方对应的阈值,就是最能划分模型的阈值。

计算步骤:

 

1. 按照分类模型返回的概率升序排列 ,也可以直接是数据,根据某一阈值判断为1或0即可
2. 把0-1之间等分N份,等分点为阈值,计算TPR、FPR (可以将每一个都作为阈值)
3. 对TPR、FPR描点画图即可 (以10%*k(k=1,2,3,…,9)为横坐标,分别以TPR和FPR的值为纵坐标,就可以画出两个曲线,这就是K-S曲线。)

KS值即为Max(TPR-FPR)

Python代码实现:

#-*- coding:utf-8 -*-
#自己实现计算ks与调包
from sklearn.metrics import roc_curve
import matplotlib.pyplot as plt
import seaborn as sns
#%matplotlib inline
#%config InlineBackend.figure_format = ''retina''
plt.rcParams[''font.sans-serif''] = [''SimHei'']  # 中文字体设置-黑体
plt.rcParams[''axes.unicode_minus''] = False  # 解决保存图像是负号''-''显示为方块的问题
sns.set(font=''SimHei'')  # 解决Seaborn中文显示问题
 
class BinJianAna:
    def __init__(self):
        pass
 
    def ComuTF(self,lst1,lst2):
    	#计算TPR和FPR	
    	#lst1为真实值,lst2为预测值
    	TP = sum([1 if a==b==1 else 0 for a,b in zip(lst1,lst2)])#正例被预测为正例
    	FN = sum([1 if a==1 and b==0 else 0 for a,b in zip(lst1,lst2)])#正例被预测为反例
    	TPR = TP/(TP+FN) 
    	TN = sum([1 if a==b==0 else 0 for a,b in zip(lst1,lst2)])#反例被预测为反例
    	FP = sum([1 if a==0 and b==1 else 0 for a,b in zip(lst1,lst2)])#反例被预测为正例
    	FPR = FP/(TN+FP)
    	return TPR - FPR
 
    def Getps_ks(self,real_data,data):
    	#real_data为真实值,data为原数据
        d = []
        for i in data:
        	pre_data = [1 if line >=i else 0 for line in data]
        	d.append(self.ComuTF(real_data,pre_data))
        return max(d),data[d.index(max(d))]
 
    def GetKS(self,y_test,y_pred_prob):
        ''''''
        功能: 计算KS值,输出对应分割点和累计分布函数曲线图
        输入值:
        y_pred_prob: 一维数组或series,代表模型得分(一般为预测正类的概率)
        y_test: 真实值,一维数组或series,代表真实的标签({0,1}或{-1,1})
        ''''''
    	fpr,tpr,thresholds = roc_curve(y_test,y_pred_prob)
        ks = max(tpr-fpr)
    	#画ROC曲线
    	plt.plot([0,1],[0,1],''k--'')
    	plt.plot(fpr,tpr)
    	plt.xlabel(''False Positive Rate'')
    	plt.ylabel(''True Positive Rate'')
    	plt.show()
    	#画ks曲线
    	plt.plot(tpr)
    	plt.plot(fpr)
    	plt.plot(tpr-fpr)
    	plt.show()
    	return fpr,tpr,thresholds,ks
 
 
if __name__ == ''__main__'':
    a = BinJianAna()
    data = [790,22,345,543,564,342,344,666,789,123,231,234,235,347,234,237,178,198,567,222]#原始评分数据
    real_data = [1,1,1,1,1,1,0,0,0,1,1,0,0,1,1,0,0,1,1,0]
    y_pred_prob = [0.42,0.73,0.55,0.37,0.57,0.70,0.25,0.23,0.46,0.62,0.76,0.46,0.55,0.56,0.56,0.38,0.37,0.73,0.77,0.21]
    #以下只为演示如何调用方法,2种方法独立计算,数据之间无关联,因此得出的ks不一样
    print(a.Getps_ks(real_data,data))#自己实现
    print(a.GetKS(real_data,y_pred_prob))#代码实现

  

本文链接:https://blog.csdn.net/sinat_30316741/article/details/80018932

ping包测试内容写入文件,并使用python对相应的结果进行统计分析

ping包测试内容写入文件,并使用python对相应的结果进行统计分析

一、ping包测试内容写入log文件,bat脚本如下:

@ECHO OFF
%~d0
cd %cd%\
start CMD.EXE /C "ping.exe 192.168.1.21  >>1.21.log" -n 300
start CMD.EXE /C "ping.exe 192.168.1.45  >>1.45.log" -n 300
start CMD.EXE /C "ping.exe 192.168.1.77  >>1.77.log" -n 300
start CMD.EXE /C "ping.exe 192.168.1.79  >>1.79.log" -n 300
start CMD.EXE /C "ping.exe 192.168.1.114 >>1.114.log" -n 300
start CMD.EXE /C "ping.exe 192.168.1.120 >>1.120.log" -n 300
start CMD.EXE /C "ping.exe 192.168.1.121 >>1.121.log" -n 300
start CMD.EXE /C "ping.exe 192.168.1.113 >>1.113.log" -n 300
start CMD.EXE /C "ping.exe 192.168.1.116 >>1.116.log" -n 300
start CMD.EXE /C "ping.exe 192.168.1.119 >>1.119.log" -n 300
start CMD.EXE /C "ping.exe 192.168.1.117 >>1.117.log" -n 300

二、对生成的.Log文件进行分析并将数据存储到excel中,代码如下:

import re,os,time
import xlwt
import os

#获取当前文件夹下扩展名为.log的文件名列表
def readFileList():
    items = os.listdir(".")
    newList = []
    for names in items:
      if names.endswith(".log"):
        newList.append(names)
    return newList

#获取log文件中的统计信息
def readMsg(file):
    #for i in fileList:
    f = open(file,''r'')
    fileMsg = f.readlines()
    ipMatch2 = re.search(r''(([01]?\d?\d|2[0-4]\d|25[0-5]\d)\.){3}([01]?\d?\d|2[0-4]\d|25[0-5]\d)'', fileMsg[-2])
    if ipMatch2==None:
        ipMatch = re.search(r''(([01]?\d?\d|2[0-4]\d|25[0-5]\d)\.){3}([01]?\d?\d|2[0-4]\d|25[0-5]\d)'',fileMsg[-4])
        IP = ipMatch.group()
        #print(IP)
        dataPackage = fileMsg[-3:-2][0].strip(''\n'').replace(" ","")
        dataPackageClient = dataPackage.split('''')[0].split('':'')[1]
        dataPackageSever = dataPackage.split('''')[1]
        dataPackageLose = dataPackage.split('''')[2]
        #print(dataPackage)
        delayTime = fileMsg[-1].strip(''\n'').replace(" ","")
        delayTimeMin = delayTime.split('''')[0]
        delayTimeMax = delayTime.split('''')[1]
        delayTimeAvg = delayTime.split('''')[2]
        #print(delayTime)
    else:
        IP = ipMatch2.group()
        dataPackageClient = ''ping fail''
        dataPackageSever = None
        dataPackageLose = None
        delayTimeMin = None
        delayTimeMax = None
        delayTimeAvg = None
        #print(IP)
        #print("ping fail")
    return [IP, dataPackageClient,dataPackageSever,dataPackageLose,delayTimeMin,delayTimeMax,delayTimeAvg]
    #print(''---------------------------------------'')

#将得到的统计信息写入到excel表格中
def writeData():
    newTable = ''ping.xls''
    wb = xlwt.Workbook(encoding=''utf-8'')
    ws = wb.add_sheet(''ping'', cell_overwrite_ok=True)  # 创建表
    headData = [''IP'', ''已发送'',''已接收'',''丢失'',''最短'',''最长'',''平均'']
    for colnum in range(0, 7):
        ws.write(0, colnum, headData[colnum], xlwt.easyxf(''font:bold on''))
    index = 1
    for i in range(len(dataMsg)):   #excel的列数
        for j in range(0,7):        #excel的行数
        # print RSSIt[i]
            ws.write(index, j, dataMsg[i][j])
        index += 1
    wb.save(newTable)

if __name__ == ''__main__'':
    fileList = readFileList()
    print(fileList)
    dataMsg = []
    for file in fileList:
        dataMsg.append(readMsg(file))
    print(dataMsg)
    writeData()

 

关于使用Python和Rpy2进行统计测试Kolmogorov和T检验的介绍现已完结,谢谢您的耐心阅读,如果想了解更多关于eclispe中使用python库 pyswip 进行prolog编程、iPython和R之间GLM结果的差异、KS(Kolmogorov-Smirnov)值、ping包测试内容写入文件,并使用python对相应的结果进行统计分析的相关知识,请在本站寻找。

本文标签: