数据特征分析:4.正态分布与正态性体验

1.正态分布

期望值u(均值)决定位置,标准差决定它的分布幅度,可以验证分布曲线的高矮胖瘦,越胖代表它的离中趋势越明显,越高代表它集中的值越高。

2. 正太性检验

利用观测数据判断总体是否服从正态分布的检验称为正态性检验,它是统计判决中重要的一种特殊的拟合优度假设检验。

直方图初判 / QQ图判断 / K-S检验

2.1直方图初判

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
% matplotlib inline
#直方图判断
s = pd.DataFrame(np.random.randn(1000)+10, columns = [‘value‘])
print(s.head())  #创建随机数据

fig = plt.figure(figsize = (10, 6))
ax1 = fig.add_subplot(2, 1, 1)  # 创建子图1
ax1.scatter(s.index, s.values)plt.grid() #绘制数据分布图

s = pd.DataFrame(np.random.rand(1000)+10, columns = [‘value‘])#这样子改下,其他不变,就是均匀分布了

ax2 = fig.add_subplot(2,1,2)  # 创建子图2
s.hist(bins=30,alpha = 0.5,ax = ax2)
s.plot(kind = ‘kde‘, secondary_y=True,ax = ax2)
plt.grid()
# 绘制直方图
# 呈现较明显的正太性

2.2 QQ图判断

QQ图通过把测试样本数据的分位数与已知分布相比较,从而来检验数据的分布情况

QQ图是一种散点图,对应于正态分布的QQ图,就是由标准正态分布的分位数为横坐标,样本值为纵坐标的散点图
 参考直线:四分之一分位点四分之三分位点这两点确定,看散点是否落在这条线的附近

 绘制思路 
 ① 在做好数据清洗后,对数据进行排序(次序统计量:x(1)<x(2)<....<x(n))
 ② 排序后,计算出每个数据对应的百分位p{ i } ,即第i个数据x(i)为p(i)分位数,其中p(i)=(i-0.5)/n (pi有多重算法,这里以最常用方法为主)
 ③ 绘制直方图 + qq图,直方图作为参考

绘制散点图,横坐标是它的分位,就是分布的位置,做下排序,看是否很多的点在某条直线上,这条直线一般是拿它的一分位和三分位做一下相减,

s = pd.DataFrame(np.random.randn(1000) + 10, columns = [‘value‘])
print(s.head()) #创建随机数据

mean = s[‘value‘].mean()
std = s[‘value‘].std()
print(‘均值为:%.2f,标准差为:%.2f‘ % (mean,std))
print(‘------‘)
#  计算均值,标准差

s.sort_values(by = ‘value‘, inplace = True) #index值跟着改变了。  重新排序 
s_r = s.reset_index(drop = False) #给index重新排序下,drop = False是是否保留原来的
s_r[‘p‘] = (s_r.index - 0.5) / len(s_r)
s_r[‘q‘] = (s_r[‘value‘] - mean) / std  #每个值标准化之后的结果
print(s_r.head())
print(‘------‘)
#计算百分位数 p(i)
# 计算q值 

st = s[‘value‘].describe()
x1 ,y1 = 0.25, st[‘25%‘] #1/4位点
x2 ,y2 = 0.75, st[‘75%‘] #3/4位点
print(‘四分之一位数为:%.2f,四分之三位数为:%.2f‘ % (y1,y2))
print(‘------‘)
# 计算四分之一位数、四分之三位数

fig = plt.figure(figsize = (10,9))
ax1 = fig.add_subplot(3,1,1)  # 创建子图1
ax1.scatter(s.index, s.values)
plt.grid()
# 绘制数据分布图

ax2 = fig.add_subplot(3,1,2)  # 创建子图2
s.hist(bins=30,alpha = 0.5,ax = ax2)
s.plot(kind = ‘kde‘, secondary_y=True,ax = ax2)
plt.grid()
# 绘制直方图

ax3 = fig.add_subplot(3,1,3)  # 创建子图3
ax3.plot(s_r[‘p‘],s_r[‘value‘],‘k.‘,alpha = 0.1) #s_r[‘value‘]也可以用s_r[‘q‘],最后结果是一样的
ax3.plot([x1,x2],[y1,y2],‘-r‘) #这两个点做一个红线
plt.grid()
# # 绘制QQ图,直线为四分之一位数、四分之三位数的连线,基本符合正态分布

2.3K - S检验

# KS检验,理论推导

data = [87,77,92,68,80,78,84,77,81,80,80,77,92,86,
       76,80,81,75,77,72,81,72,84,86,80,68,77,87,
       76,77,78,92,75,80,78]
# 样本数据,35位健康男性在未进食之前的血糖浓度

df = pd.DataFrame(data, columns =[‘value‘])
u = df[‘value‘].mean()
std = df[‘value‘].std()
print("样本均值为:%.2f,样本标准差为:%.2f" % (u,std))
print(‘------‘)
# 查看数据基本统计量

s = df[‘value‘].value_counts().sort_index()
df_s = pd.DataFrame({‘血糖浓度‘:s.index,‘次数‘:s.values})
# 创建频率数据

df_s[‘累计次数‘] = df_s[‘次数‘].cumsum()
df_s[‘累计频率‘] = df_s[‘累计次数‘] / len(data)
df_s[‘标准化取值‘] = (df_s[‘血糖浓度‘] - u) / std
df_s[‘理论分布‘] =[0.0244,0.0968,0.2148,0.2643,0.3228,0.3859,0.5160,0.5832,0.7611,0.8531,0.8888,0.9803]  # 通过查阅正太分布表
df_s[‘D‘] = np.abs(df_s[‘累计频率‘] - df_s[‘理论分布‘])
dmax = df_s[‘D‘].max()
print("实际观测D值为:%.4f" % dmax)
# D值序列计算结果表格
df_s

把一个非标准正态分布变成一个标准正态分布----->把非标准正态分布的值变成X = (x-u) /方差----->可以找到理论值。;

拿这个标准化取值去跟正态分布表去对

标准化取值的值它本 身就符合正态分布;系统分布与标准分布相减,如果这个函数满足标准正态分布,它的值就应该满足这个表。比如说标准化取值2.064315,其对应的查正态分布表值为0.9803,它的理论分布值是0.9803;  标准化取值-1.9777,找的时候把它的负号去掉,查正态分布表为0.9756,正的是0.9756,负的就是1-0.9756=0.0244.可以看到与理论分布值是相对应的。  ----- >>>理论分布就相当于是g(x)就是F0(x),F(n)就是原来的F(n)累计频率。累计频率 - 理论分布 = D

df_s[‘累计频率‘].plot(style = ‘--k.‘)
df_s[‘理论分布‘].plot(style = ‘--r.‘)
plt.legend(loc = ‘upper left‘)
plt.grid()
# 密度图表示

实际观测D值为:0.1597 对应的0.1597放到显著性对照表,我们的样本数据一共35个,在50以内,按0.05的值去算的话,0.1587介于0.158和0.190之间,它所对应的P值是0.2和0.4,这个P值是大于0.05的。 拿到这个D值去那个表里边查,如果大于0.05就说明满足正态分布,这是理论推导,实际工作中就更简单了。
# 直接用算法做KS检验

from scipy import stats
# scipy包是一个高级的科学计算库,它和Numpy联系很密切,Scipy一般都是操控Numpy数组来进行科学计算

data = [87,77,92,68,80,78,84,77,81,80,80,77,92,86,
       76,80,81,75,77,72,81,72,84,86,80,68,77,87,
       76,77,78,92,75,80,78]
# 样本数据,35位健康男性在未进食之前的血糖浓度

df = pd.DataFrame(data, columns =[‘value‘])
u = df[‘value‘].mean()  # 计算均值
std = df[‘value‘].std()  # 计算标准差
stats.kstest(df[‘value‘], ‘norm‘, (u, std)) #value值直接写样本就可以了,中间是norm默认是以正态分布去做判断,后边是均值和方差
# .kstest方法:KS检验,参数分别是:待检验的数据,检验方法(这里设置成norm正态分布),均值与标准差
# 结果返回两个值:statistic → D值,pvalue → P值
# p值(pvalue)大于0.05,为正态分布

原文地址:https://www.cnblogs.com/shengyang17/p/9644431.html

时间: 2024-10-09 19:52:09

数据特征分析:4.正态分布与正态性体验的相关文章

SciPy - 正态性 与 KS 检验

假设检验的基本思想 若对总体的某个假设是真实的,那么不利于或者不能支持这一假设的事件A在一次试验中是几乎不可能发生的:如果事件A真的发生了,则有理由怀疑这一假设的真实性,从而拒绝该假设: 假设检验实质上是对原假设是否正确进行检验,因此检验过程中要使原假设得到维护,使之不轻易被拒绝:否定原假设必须有充分的理由.同时,当原假设被接受时,也只能认为否定该假设的根据不充分,而不是认为它绝对正确 ks 检验 ks 检验分为 单样本 和两样本 检验: 单样本检验 用于 检验 一个数据的观测分布 是否符合 某

正态分布及正态随机变量

正态分布是连续型随机变量概率分布中的一种,你几乎能在各行各业中看到他的身影,自然界中某地多年统计的年降雪量.人类社会中比如某地高三男生平均身高.教育领域中的某地区高考成绩.信号系统中的噪音信号等,大量自然.社会现象均按正态形式分布. 正态分布中有两个参数,一个是随机变量的均值 μμ,另一个是随机变量的标准差 σσ,他的概率密度函数 PDF 为:fX(x)=1√2πσe?(x?μ)2/(2σ2)fX(x)=12πσe?(x?μ)2/(2σ2). 当我们指定不同的均值和标准差参数后,就能得到不同正态

数据特征分析:1.分布分析

几个基础分析思路: 分布分析.对比分析.统计分析.帕累托分析.正态性检测.相关性分析 分布分析 分布分析是研究数据的分布特征和分布类型,分定量数据.定性数据区分基本统计量. import numpy as np import pandas as pd import matplotlib.pyplot as plt % matplotlib inline #读取数据 data = pd.read_csv(r'C:\Users\Administrator\Desktop\python数据分析\深圳罗

【程序员眼中的统计学(7)】正态分布的运用:正态之美

正态分布的运用:正态之美 作者 白宁超 2015年10月15日18:30:07 摘要:程序员眼中的统计学系列是作者和团队共同学习笔记的整理.首先提到统计学,很多人认为是经济学或者数学的专利,与计算机并没有交集.诚然在传统学科中,其在以上学科发挥作用很大.然而随着科学技术的发展和机器智能的普及,统计学在机器智能中的作用越来越重要.本系列统计学的学习基于<深入浅出统计学>一书(偏向代码实现,需要读者有一定基础,可以参见后面PPT学习).正如(吴军)先生在<数学之美>一书中阐述的,基于统

曲线拟合——(2)拉普拉斯/瑞利/对数正态 曲线

作者:桂. 时间:2017-03-15  21:12:18 链接:http://www.cnblogs.com/xingshansi/p/6556517.html 声明:欢迎被转载,不过记得注明出处哦~ 本文为拟合系列中的一部分,主要介绍拉普拉斯曲线 .瑞利曲线.对数正态曲线的拟合,并给出理论推导. 一.理论分析 A-拉普拉斯(Laplace) 对于拉普拉斯分布: $f(x) = \frac{1}{{2b}}{e^{ - \frac{{\left| {x - \mu } \right|}}{b}

坚持一下,正态的哲学就在一个百分点——技术需要不断积累

现状 IT日新月异,完全让人慌张和措手不及,不久前刚出来MVC,很快就连升几个版本:其他的,Swift,智能穿戴,大数据等等,让我这样笨拙的人情何以堪啊!!! 是的,我爱技术,但同时我又比较笨和比较浮躁.(不对称关系组合在一起,真揪心) 说比较笨,是因为我CPU处理速度不是那么地快,随着年龄的增长,确实力不从心: 说比较浮躁,是因为我什么都想学,什么都想要,虽然我没有说直接要钱,但是我想要通过牛逼的技术,来赚更多的钱. 实际上,当我重新选择来写博文这条路,我有个比较小型而且明确的目标,人生重新有

【CS229笔记一】监督学习,线性回归,LMS算法,正态方程,概率解释和局部加权线性回归

监督学习 对于一个房价预测系统,给出房间的面积和价格,以面积和价格作坐标轴,绘出各个点. 定义符号: \(x_{(i)}\)表示一个输入特征\(x\). \(y_{(i)}\)表示一个输出目标\(y\). \((x_{(i)},y_{(i)})\)表示一个训练样本. \(\left\{(x_{(i)},y_{(i)});i=1,\dots,m\right\}\)代表m个样本,也称为训练集. 上标\((i)\)代表样本在训练集中的索引. \(\mathcal{X}\)代表输入值的空间,\(\mat

[定理证明]正态随机过程又是马尔科夫过程的充要条件

必要性的证明 充分性的证明 参考 参考1:<概率论与数理统计教材>(茆诗松,第二版) 参考2:[公式推导]用最简洁的方法证明多元正态分布的条件分布 参考3:<线性统计模型-线性回归与方差分析>(王松桂) 参考3:百度文库--<随机过程-正态马尔科夫过程>. 后续更新: 在定理1的基础上证明的定理2: 定理2就很有实用价值,由于平稳序列具有遍历性,所以就可以用样本自协方差函数来代替总体协方差函数,从而来根据函数是否为指数函数来判别序列是否具有马尔科夫性. --------

数据分析之数据质量分析和数据特征分析

1.数据质量分析 数据质量分析是数据挖掘中数据准备过程的重要一环,是数据预处理的前提,也是数据挖掘分析结论有效性和准确性的基础,没有可信的数据,数据挖掘构建的模型将是空中楼阁. 数据质量分析的主要任务是检查原始数据中是否存在脏数据,脏数据一般是指不符合要求,以及不能直接进行相应分析的数据.在常见的数据挖掘工作中,脏数据包括: (1)缺失值:     (2)异常值:     (3)不一致的值:     (4)重复数据及含有特殊符号(如#.¥.*)的数据. 1.1缺失值分析        数据的缺失