楼主: 18217561319
1265 1

[原创博文] python-数据探索 [推广有奖]

  • 0关注
  • 0粉丝

高中生

27%

还不是VIP/贵宾

-

威望
0
论坛币
24 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
529 点
帖子
8
精华
0
在线时间
33 小时
注册时间
2017-3-3
最后登录
2019-12-17

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
'''载入常用库'''
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
'''载入模块'''
from pandas import Series,DataFrame
from scipy import stats
''' 读取数据(假设文件在工作目录的路径下)'''
tips=pd.read_csv('tips.csv')


#一、数据的探索
'''
》如何检验一个变量的一组取值是否符合某种分布,或者检测一个变量他的取值
和理想值有显著性的差别。
    图形分析
    使用样本的数字特征
    使用假设检验框架
》什么是建设检验
    统计分析的经典框架
    p-值
    从样本分布构建检验
    K-S检验(检验某一个样本是否来自于某个分布)
    以及其他分布检验
'''
#1、视图分析:tips['tip']、tips['tips_pct']的数据分布
tips['tip'].hist(bins=50)
tips['tips_pct'].hist(bins=50)

"""生成一个t分布序列(模拟初一个t分布的样本)"""
np.random.seed(21435)  #先生成一个种子生成器,以后生成的随机数就是一定的
x=stats.t.rvs(10,size=100)  #生成一个服从t分布的1000个点,10表示t分布的自由度,.rvs(random+values+series)
"""计算样本的数字特征"""
n,(smin,smax),sm,sv,ss,sk=stats.describe(x) #n样本量,sm均值,sv方差,ss偏度,sk峰度
"""计算理论数字特征"""
m,v,s,k=stats.t.stats(10,moments='mvsk')  #样本与理论值进行比较(感性认识)


#2、T-test(严格的检验)
"""t-test检验是检验一个或两个样本之间的均值是否有明显的差别,也就是检验单变量对因变量的影响。"""
stats.ttest_1samp(x,m)  #用t-test检验来检验样本数据均值和理论均值差异性检验。#结果分析:p值越小我们拒绝原假设(样本是t分布)
#比较两个样本(比较两组均值)
'''带参数的假设检验'''
rvs1=stats.norm.rvs(loc=5,scale=10,size=500)
rvs2=stats.norm.rvs(loc=5,scale=10,size=500)
stats.ttest_ind(rvs1,rvs2)
rvs3=stats.norm.rvs(loc=8,scale=10,size=500)
stats.ttest_ind(rvs1,rvs3)


#3、K-S test (严格的检验)
stats.kstest(x,'t',(10,)) #检验样本数据x是否是自由度为10的t分布
"""K-S test 还可以检验其他分布:正态分布..."""
stats.kstest(x,'norm',(x.mean(),x.std()))  #对x进行检验。正态分布有两个参数-均值和期望;分别样本的均值和方差来估计。
"""使用K-S test对x进行t分布和正态分布检验时,都不能拒绝,因为正态分布和t分布在中间的时候非常像,但是尾部有显著差别。所以卡方检验闪亮登场..."""
#比较两组分布
'''Kolmogorov-Smirnov双样本检测ks_2samp'''
stats.ks_2samp(rvs1,rvs2)
stats.ks_2samp(rvs1,rvs3)


#4、卡方检验
""" 用自定义的区间来做,强调了尾部,把中间当作一个,虽然中间数多但
是权重小,跟其他区间的权重是一样的,将相对明显的差别单列出来,以后
分析数据的时候都可以这样做,就比较某一段。"""
quantiles=[0.0,0.01,0.05,0.1,1-0.10,1-0.05,1-0.01,1.0] #分位数对应的百分比--概率分布函数。
crit=stats.t.ppf(quantiles,10)  #确定理论的分为数在哪。分位数对应的百分比序列输入后,对应生成一个服从自由度为10的t分布的分位数。
plt.hist(x,bins=crit)  #数据x落在分位数确定的隔段中
n_sample=x.size  #样本x数量
np.histogram(x,bins=crit)  #数据x落入到分位数确定的隔段中,以及分位数形成的隔段。(总共有两维)
freqcount=np.histogram(x,bins=crit)[0]  #数据x落入每段的数量--实际值。
tprob=np.diff(quantiles)  #分位数百分比前后作差形成每段的概率。
tprob*n_sample  #理论上落入每段的数量--理论值。(这个值一般和实际值freqcount进行比较,感性认识下差别)
nprob=np.diff(stats.norm.cdf(crit))#假设是正态分布,进行构造。stats.norm.cdf():正态分布累计概率密度函数.
nprob*n_sample  #正态分布的理论值 (这个值一般和实际值freqcount进行比较,感性认识下差别)
"""
卡方检验。 每一块理论上应该落多少个,其实就是二项分布,在中心极限定
理中:本来有多少概率落在里面,与实际落进去的有误差的,这个误差是受二
项分布影响的,当二项分布数比较大的时候可以将他构造成一个正态分布,标
准化后进行平方和,也就是每一块理论上都有一个概率值落在里面,但是和实
际值有差别,这个差别我们认为是服从正态分布的。每一个构造为:
[(理论值N0-实际值N)/sqrt(二项分布的误差nprob)]~N(0,1),将其平
方和,然后将每段都加起来,构造的随机变量服从卡方分布。
"""
tch,tpval=stats.chisquare(freqcount,tprob*n_sample)  #卡方检验。(判断p值是否拒绝原假设:数据为卡方分布)
nch,npval=stats.chisquare(freqcount,tprob*n_sample)  #正态检验。(判断p值是否拒绝原假设:数据为正态分布)
"""最终结果是:不能拒绝它是来自t分布,但是拒绝它是来自正态分布的。
为什么要用卡方分布呢:对尾部特别感兴趣的时候,就需要检验下。卡方检验
完全是自己构造,对于区间完全是自己选的,尾部有多少自己来定。非常强大的
比k-s还要强大。卡方检验是根据(每个区间的)分布函数来算的,每段理论有多
少个和实际多少个进行比较的。还有一种是根据样本来估计一些数字特征来检验。"""
#基于样本估计的数字特征进行卡方检验
tdof,tloc,tscale=stats.t.fit(x)  #用t分布去模拟数据,输出最好的变量:自由度,期望,方差。
nloc,nscale=stats.norm.fit(x) #用正态分布去模拟现在的样本
tprob=np.diff(stats.t.cdf(crit,tdof,loc=tloc,scale=tscale))  #这个是用理论值算出来的,刚才的是分位数算出来的。
nprob=np.diff(stats.norm.cdf(crit,loc=nloc,scale=nscale))
tch,tpval=stats.chisquare(freqcount,tprob*n_sample)
nch,npval=stats.chisquare(freqcount,nprob*n_sample)
"""两种结果都不能拒绝,这种方法也不是太好。为什么不如直接刚才的尾部卡方检验好呢?
因为在中间核心的部分,正态分布和t分布还是比较像的,只是在尾部比较像的,全体的去考虑,
用一个拟合曲线去考虑,尾部的区别被中间相同性掩盖了。"""


#5、正态分布检验
stats.normaltest(x) #结果是拒绝的。
stats.normaltest(tip['tip']) #结果拒绝
tips['tip_pct']=tips['tip']/tips['total_bill']
tips['tip_pct'].hist(bins=50) #视图感性分析:很像正态分布
stats.normaltest(tips['tip_pct'])
"""但是结果比较奇怪,猜测是图像右边尾巴的异常点引起的。"""
tips[tips['tip_pct']>0.3]  #查看异常点
tips1=tips.drop([67,172,178]) #异常点太少也不好分析,直接去除
stats.normaltest(tips1['tip_pct'])


#假设检验(理论框架)
"""
1、假设随机变量服从某种分布,或者它的数字特征在某个范围或者某个值。
2、为判断所作的假设是否是正确,从总体中抽取样本,根据样本的取值,
按一定的原则进行检验,然后做出接受或者拒绝所作假设的决定。

    参数假设检验是指总体X的分布函数F(x,θ)的类型已知,参数θ未知,首
先对未知参数θ提出假设;“θ_0为其真值”然后由抽取的样本所提供的信息对
假设的正确性进行判断的过程。
    非参数假设检验是指总体X的分布函数F(x)未知,首先假定其分布函数为
某指定函数F_1(x)提出假设,然后根据样本信息来检验这个假设,最后做出
拒绝或者接受的判断。"""


#假设检验两类错误
"""
第一类错误:H0为真,但是拒绝。
第二类错误:H0为假,但是接受。
当样本容量n固定时,两类错误不能同时控制的很小。
若要使犯两类错误的概率都减小,除非增加样本量。

功效分析
高效(1-第二类错误的概率)、显著性水平(第一类错误)、效应值、样本大小
"""

#关系图(抽样分布)---看笔记
"""
假如来自一个正态分布的数据,总体均值,方差已知可以构建一个正态分布的随机变量
假设不知道均值,只想看方差对不对的时候,然后用样本方差和总体方差构造为卡方分布。
假如均值已知,总体方差未知,用样本方差来代替,就变成一个t分布,两个样本比较就是F分布(方差分析)
正态分布几乎可以描述生活中所有的问题,将随即变量转化为正态分布,也就
是标准化。卡方分布和t分布不是描述哪些问题的,都是基于正态分布变换的
"""


#总结:
"""
抽样分布:从一个总体中抽样出来构造一些统计量,它是一些什么分布。
用抽样构造的分布,用来做假设检验的。虽然我们知道理论上正态分布、二项分布
描述一些客观世界的,但是到底这些分布是不是真的,我们不知道,只能从样本中
观察样本,样本中取值,来证明我们的观点。怎么证明呢:就是基于一个严格的
分析框架--假设检验的框架。假设检验里面最重要的一点就是要知道统计量的分布
--抽样分布。"""

















二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:python、数据探索、计量数据处理、检验数据分布

沙发
420948492 发表于 2018-7-26 19:56:58 |只看作者 |坛友微信交流群
{:3_42:}

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-24 12:35