三、数据检验与图示方式
3.1正态分布检验方式
kstest方法:KS检验,可以检验数据是否符合目标分布(正态分布、泊松分布等),也可判断两组数据是否符合同一趋势。
参数分别是:待检验的数据,检验方法(这里设置成norm正态分布),均值与标准差。
结果返回两个值:statistic → D值,pvalue → P值
判断依据:p值大于0.05,为正态分布
3.1.1 运行
- import random
- from scipy import stats
- def jude_KS(data):
- u =data.mean() # 计算均值
- std=data.std() ##计算标准差
- p=stats.kstest(data, 'norm', (u, std))
- return p
3.1.2 问题
当数据为半正态分布或者截断(截尾)正太分布时,KSTest验证方式无法区分,如下:
- x2=np.random.randn(100000) ##np.random.randn该函数返回一个样本,具有标准正态分布
- x2_zheng=[]
- for i in x2:
- if i >0:
- x2_zheng.append(i)
- print(jude_KS(np.array(x2_zheng)))
- plot_hist(x2_zheng,'random','x2 正数',50,None)
3.2直方图绘制
对数据进行直方图绘制,可肉眼观察数据是否符合正态分布,或者具有正太分布趋势。图示方法对于识别半正态分布或者截断正太分布具有重要意义。
3.2.1 运行
- ####定义函数: 生成直方图
- import matplotlib.pyplot as plt
- from matplotlib import mlab
- from matplotlib import rcParams
- def plot_hist(x,title,name,binnum):
- plt.hist(x, bins=binnum, range=None, weights=None, cumulative=False,
- bottom=None, histtype='bar', align='mid', orientation='vertical',
- rwidth=None, log=False, color='steelblue', label='Neo_Score',
- edgecolor='black',stacked=False)
- plt.xlabel(name)
- plt.ylabel('frequency')
- plt.title(title)
- #plt.savefig(output_plot)
- return 'finish plot!'