《Python数据分析与可视化教案4.5 数据的正态性分析.docx》由会员分享,可在线阅读,更多相关《Python数据分析与可视化教案4.5 数据的正态性分析.docx(8页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、课 题4.5数据的正态性分析课 型讲练授课班级大数据授课时数2教学目标1 .理解正态分布的概念。2 .能够用多种方法判断数据正态性。教学重点1.能够用多种方法判断数据正态性。教学难点1.理解正态分布的概念。学情分析数据服从正态分布是很多分析方法使用的前提条件,在进行假设检验、 方差分析、回归分析等分析操作前,一般首先要对数据的正态性进行分析。 学好本次课有助于后面内容的学习。正态分布是最重要的一种概率分布,正态分布概念是由德国的数学家和天文学家 棣莫佛于1733年首次提出的,但由于德国数学家高斯率先将其应用于天文学家研究, 故正态分布又叫高斯分布。正态分布有极其广泛的实际背景,生产与科学实验中
2、很多随机变量的概率分布都 可以近似地用正态分布来描述。例如成年人的血压、人群的身高或体重、人群的鞋码、 某个地区的年降水量等。一、数据的正态分布1 .正态分布的概念正态分布就是指随机变量服从一个位置参数和尺度参数的概率分布,位置参数就 是均值,尺度参数就是标准差。均值决定了正态曲线中心位置,当均值为正且绝对值 越大时,说明曲线整体向右移动的距离就越大:反之,当均值为负且绝对值越大时, 曲线整体向左移动的距离就越大。标准差决定了曲线的形状,即标准差决定了曲线的 “高矮胖瘦,正态分布在几何上的表现就是正态曲线,正态曲线是一个钟型曲线,如标准正态 分布的均值为0,标准差为1对应的标准正态曲线如图4-
3、*所示。图4-标准正态分布曲线标准正态分布曲线下面积分布规律是:在-1.96+1.96范围内曲线下的面积等于 95% (即取值在这个范围的概率为95%),在-2.58+2.58范围内曲线下面积为99% (即取值在这个范围的概率为99%)。因此,由。函数所产牛的随机 样本基本上取值主要在_1.96+1.96之间,当然也不排除存在较大值的情形,只是概 率较小而已。2 .正态分布曲线特点(1)集中性:正态曲线的高峰位于正中央,即均数所在的位置。(2)对称性:正态曲线以均数为中心,左右对称,曲线两端永远不与横轴相交。(3)均匀变动性:正态曲线由均数所在处开始,分别向左右两侧逐渐均匀下降。二、正态分布的
4、描述偏度和峰度是描述数据分布的两个常用概念,可以用来描述数据分布与正态分布 的偏离程度。1 .偏度偏度用来描述数据分布的对称性,正态分布的偏度为0。计算数据样本的偏度, 当偏度0时,称为负偏,数据出现左侧长尾;当偏度0时,称为正偏,数据出现右 侧长尾;当偏度为。时,表示数据相对均匀的分布在平均值两侧。pandas提供了 skew函数用来计算Series数据的峰度,skew函数的一般用法为:Series.skew()2 .峰度乂称峰态系数,用来描述总体中所有取值分布形态陡缓程度的统计量,反映了峰 部的尖度。当峰度系数大于。时,说明两侧极端数据较少,分布曲线更高更瘦,为尖 顶曲线:当峰度系数小于。
5、时,说明表示两侧极端数据较多,分布曲线更矮更胖,为 平顶曲线。pandas提供了 kurt函数用来计算Series数据的峰度,kurt函数的一般用法为: Series.kurtO例如代码如下:import numpy as npimport pandas as pdarr = np.random.randn( 10000)#生成10000个标准正态分布的数据data = pd.Scries(arr)print(随机正态分布数据为:n,data: 1() prinl(随机正态分布的偏度:,data.skew()print(随机正态分布的峰度=,data.kurt()输出结果如图4-*所示。Run
6、:4-5C:UsersliliangAnaconda3python.exe C:/Users/liliang/PycharmProjects/$jfx/4-5.py 随机正态分布数据为:0-1.361461-2.2615132-0.0253753O.0181464-0.6764175-0.0365956.0.44466770.39978280.61606390.558501dtype: float64随机正态分布的偏度=0.0794S861511997307随机正态分布的弊度;-0.03489436192230544Process finished with exit code 0图4-*正态
7、分布描述例如结果【结果分析】因为计算峰度和偏度的数据是随机生成的,所以每一次运行的结果 可能都会有所不同。三、正态分布的验证数据服从正态分布是很多分析方法使用的前提条件,在进行假设检验、方差分析、 回归分析等分析操作前,一般首先要对数据的正态性进行分析。如果不满足正态性特 质,那么需要考虑使用其他方法或对数据进行处理。1 .通过直方图进行正态性检验直力图是种统计报告图,由系列高度不等的纵向线段表示数据分布的情况, 常用于验证数据是否服从正态分布。服从正态分布的直方图一般都有“中间高,两边 对称”的特点。Python中绘图库matplotlib中的hist函数可以用来绘制直方图,其中参数bins
8、表 示直方图的柱形的数量,如果不设置也可以用默认设置。绘制直方图的一般方法为:import matplotlib.pyplot as pitdata.hist(bins=num)plt.show()其中,import matplotlib.pyplot as pit 表示导入 maiplollib 库种模块 pyplotbins=num 表示设置直方图的柱形的数量。plt.show()表示显示绘图结果。例如代码如下:import matplotlib.pyplot as pitdata.hisl()plt.show()输出结果如图4*所示。 Figure 1 X三2 El图4-*正态分布描述例
9、如结果【结果分析】因为绘图的数据集来自于随机标准正态分布,所以根据标准正态分 布曲线分布规律,有99%数据都集中在-3到3之间,从最终的结果来看,也符合这一 规律。2 .通过正态性检验指标进行正态性检验数据是否服从正态分布,仅仅通过直方图来观察是不够的,一般还需要通过一些 具体的方法来验证,如正态分布的K-S ( Kolmogorov-Smirnov)检验。正态分布的 K-S检验是基于累计分布函数,通过对两个分布之间的差异进行分析,用以检验对象 是否服从正态分布。Scipy库stats模块提供了 kstest函数可以执行K-S检验,当K-S 检验中的计算结果概率值p大于0.05时,说明服从正态
10、分布,当K-S检验中的计算 结果概率值p小于0.05时,说明不服从正态分布。kstest函数的一般用法为:from scipy.slats import kstestkstest(rvs,cdf)其中,rvs表示检验的数据,一般为DataFrame中的一列数据。cdf表示检验方法, 这里取“norm”,即表示正态性检验。Kstest的结果有两个值,其中第2个值就是概 率值P,数据是否服从正态正态分布主要看这个值,如果这个值大于0.05,即说明服 从正态分布。例如代码如F:from scipy.stals import kslest ks_result = kstest(data,norm)p
11、= ks_result 1 #取出kstest计算结果的第2个值if p 0.05:print(正态性k-s检验的口值=%.4。所以数据 服从 正态分布。%p) else:print(正态性k-s检验的p值=%.4f,所以数据不服从正态分布。%p) 输出结果如图4-*所示。Rum . 45A . C: Usersli 1 ijcigAnacondj3python.exe C:/Users/1 i 1 ijng/PychdrProjecti/sjfx/4 - S.py 除机正态分布数在为: 00.9S02S4- rp 1-1.9572262-1.8576753-2.S77G6340.132dl8
12、 S 0.6998986-1.1826297-0.76247881.68)06S91.04,041dtypv: flodt64 正态惶kr检抬的pflis.ge1明所以数JR图从正态分布.Process finivlwd with xit cod。0图4-*正态分布描述例如结果任务实训任务1 :利用numpy,完成:(1)模拟抛掷10000次2个骰子,统计2个骰子的和,根据结果生成一个Scries, 并查看前10条数据。(2)统计Series所有结果的频数,并分析其规律。(3)计算该Series的峰度和偏度,并分析其特点。任务1(1)具体代码如下:datal_l = np.random.ran
13、dint( 1,7,10000)datal_2 = np.randoin.randint( 1,7,10000) data 1 = pd.Series(datal_l + datal_2) print(初始数据为:n”,data 1 : 10)输出结果如图4-*所示。 Run:4-5AC:U$er$li 1 iangVAndcorxl43pytbon.C :/U$er$/liligng/Pychamroject$/$jfx/4-5.py初始数将力:dtype: int32Process finished with exit code 0图4-*任务1 (1)输出结果 任务1 (2)具体代码如下
14、:result = datal.value counts().soit index(ascending=True)print。两个骰子和的统计结果为:n,result) 输出结果如图4-*所示。Run:2-7图4-*任务1 (2)输出结果两个骰子和的统计结果为2272351948575109661397717358137591109108141153412292【结果分析】根据概率学,两个骰子和为2、3、4、5、6、7、8、9、10、11、 12 的概率分别为:1/36、2/36、3/36、4/36、5/36、6/36、5/36、4/36、3/36、2/36、 1/36,其中概率最大为7点,这
15、也正如统计的频数结果,7点出现次数最多。任务1(3)具体代码如下:print(偏度=,datal.skew()print(峰度=,datal.kurt()输出结果如下图。Run:2-7A偏度=峰度=Process finished with exit code 0 图4-*任务1 (3)输出结果【结果分析】偏度非常接近与0,说明没有左偏和右偏的趋势,从统计的频数中 也可以大致看出分布是较为均匀的,分别向左右两侧逐渐均匀下降。峰度明显小于0, 说明中间的数据并不是非常集中在中间位置,而是较为分散,是平顶曲线。这一点也 可以从统计的频数中看出,和为7是中间位置,其频数最高,和为7两边的频数并没 有
16、迅速减少,而是慢慢减少。任务2:将dalal重新命名为dala2,绘制直方图,分别设置直方图柱形数量为9、 10、11、12,并比拟其效果。具体代码如下:data2 = datalfor i in range(9,13):data2.hist(bins=i)plt.title(bin=%d%i)#plt.title 表示设置图表的标题plt.show()输出结果如图4-*所示。 figure 1-OX, 今 中Q三N 0 figure 1-OX, 今 中Q三N 0 figure 1-OX +q 三 a figure 1-OX+Q 三 abn12图4-*任务2输出结果【结果分析】在绘制直方图时,
17、直方图的柱形数量参数bins最好等于数据的类 别数量,比方任务2中的两个骰子和的结果只有11种,所以将bins设为11为宜。 如果将bins设为其他值,也可以绘制直方图,但是左右对称的效果会略差。任务 3:利用 read_excel 导入 supermarket.xlsx (supermarket.xlsx 存放在 c:data 路 径中)中的“销售统计”工作表(第1张工作表),导入时将“客户ID”列设为索引, 完成:(1)绘制“单价”列的直方图,判断“单价”列是否服从正态分布。(2)定义函数ks_nonnal,该函数有一个参数input, input表示需要判断的数据 列,函数ks_ nor
18、mal的作用可以通过正态性ks判断是否正态分布。(3)利用函数ks_p判断“单价”列是否服从正态分布。任务3 (1)具体代码如下:pd.set_option(dispIay.max_columns,None)pd.set_option(display.widlh,None)pd.set_option(display.unicode.east_asian_width,True)datal = pd.rcad_cxccl(c:datasupcnnarkct.xisx,indcx_col-ID)print(导入的数据为:n,daia 1 .head。)datal 单价hist()plt.show()
19、输出结果如图4-*和图4-*所示。Rum *.4-5C:U$er$li 1 ianAnMon3pytbon.exe C:/Users/1 i 1 iang/PychirProject5/$jfx/4-S.py 导人的数密为:订单ID产品ID产品名称*户总名省城市单价数,用售备腐研用折扣金客产ID-114485US 2018 1557144办公用用品10002717Fiskars典刀,上色余江杭州6$21300.478.010165CM-2018-1973789办公用任封-10004832GlobeWeB将扣信我, 0.05:print(正态性k-s检验的p值二%.4f,所以数据 服从正态分布。
20、%p) else:print(正态性k-s检验的p值=%.4f,所以数据 不服从正态分布。p) 任务3 (3)具体代码如下:printC”单价冽的正态性检验结果为:)ks_normal(dalal单价)输出结果如图4-*所示。Run: . 4 5 , C:UsersliliangAnaconda3python.exe C:/Users/liliang/PycharmProjects/sjfx/4-5.py 单价列的正85性桧聆结果为:正态性ks检验的pfl|=0.O000,所以我发不服从正态分布.S!三 Process finished with exit code 0图4-*任务3 (3)输出结果【结果分析】从k-s检脸结果来看,“单价”列并不符合正态分布,这一结论与 直方图的结论一致。巩固训练利用 rcad_cxccl 导入 c:datascorc.xls,完成:(1)绘制“math”列的直方图,判断“math”列是否服从正态分布。(2)通过K-S检验判断“madi”列是否服从正态分布。