token干什么用_用Python进行最最最基础的统计检定

记得之前再写关于Python绘制统计图的时候就说过,准备写一篇关于数理统计的。

一直都在忙论文,忙完后也比较懒散。就一直拖到了现在。

虽然时隔的比较久远,但还是准备把这个总结出来了。

所需要的Python库:pandas、numpy、plotly(可选,便于绘图)、scipy。

所借助的平台依旧是Jupyter Notebook。

我也记不得哪些是标准库哪些是第三方库了。Em...所以还得各位自己解决一下了。

具体数据都是用我论文里的数据,因为老师的要求,数据是不能被公开的,所以就不发数据啦。


第一步:创建DataFrame

当然用DataFrame的数据类型不是必要的条件。用List以及Array的类型也都可以。但因为统计分析难免会涉及数据的清洗、整合这些管理工作,Pandas本身就很好的提供了这些管理的方法,所以比较推荐这么做。

将手头的数据转化成DataFrame的方法有很多。具体情况具体分析,可以去官网上查找一下资料。我比较喜欢的是直接从csv文件里读取出来。

df = pandas.read_csv('***.csv')

读取完数据之后,就要进行清洗整合了,这个我就不具体说明了。不同的数据,清洗整合的方法、要求都不一样。

第二步:先看看数据的基本统计量

简单的说,就是先看看平均值,方差,最小值、最大值、四分位数这些基本的统计量。

方法也很简单,直接用DataFrame对象的describe方法就可以了。

df.describe()

这时候,你会看到输出了一个表格。

01cc77f7d929dd09dedff906e16e070f.png

最左边那栏第一个count表示的是数据的个数,其他的我就不解释了。

最上面那栏就是元数据的各个列名。

如果有时候数据很庞大,有很多列。而你只需要一小部分。那么可以直接先筛选完在用describe方法就可以了。

例如:

df[["Token"]].describe()

注意是两层中括号,不要弄错了

第三步:检验正态性(划重点)

为什么我会给这一步划重点呢,因为它非常重要。很多很多像我这样不是专门学数学的人,都会在分析数据之前,忘记做也懒得做这一步。

但是很多统计检定都是基于正态分布的情况下才进行的。比如T检定、ANOVA等等。

检验正态性的方法也很多,我就给大家总结两种。具体原理什么的别问我。我不是学数学的,数学也很差,我只是来负责总结的!

当样本容量比较小(大概N<=50)的时候,我们可以用shapiro

from scipy import stats

stats.shapiro(df["Type"])

当样本容量比较大(大概N>50)的时候,我们可以用normaltest

from scipy import stats

stats.normaltest(df["Type"])

返回结果都是差不多的,形式有点不一样而已。

NormaltestResult(statistic=18.447504402798188, pvalue=9.866777084255565e-05)

前一个表示统计量,Em..其实可以不用管它是干什么的。

后一个是p值

可以看到我这里的结果是p<0.05的,所以H1假说成立。也就是该样本与正态分布存在的明显的差异,即认定该样本不服从正态分布。

第四步:开始统计检定

具体的检定方法视需求而定。我就介绍几种比较常见的检定方法。

T检定切记,T检定的样本一定要符合正态分布!

单样本的T检定:这种检定方法用于实验样本和理想模型进行的差异检定。这在我们的研究里是比较少见。

from scipy import stats

stats.ttest_1samp(df["Token"], 50) # 后面的数字是理想模型平均值

双样本的T检定:这种检定方法是用于检测两个样本之间的差异的。由于我们这种做实验的一般都是设置对照组和实验组,所以会比较常用到。

from scipy.stats import ttest_ind

ttest_ind(df1["Token"],df2["Token"])

返回值一般也都是两个,前一个是统计量,后一个是p值

当p值>=0.05的时候,H0假说成立,即认为两个样本之间没有有意差。

当p值<0.05的时候,H1假说成立,即认为两个样本之间存在有意差。

方差分析(ANOVA)切记,ANOVA的样本也一定要符合正态分布!

因为单因素的ANOVA对我来说是最常见的,所以就只做这个介绍了。简单的说,就是因为一个因素的影响获取了3个样本,进行对比分析。比如pre-test、mid-test、post-test,这样三组的数据。就是test种类一种因素而取得的3个样本。

from scipy import stats

print(stats.f_oneway(df1["Token"],df2["Token"],df3["Token"]))

返回的结果和前面T检定的结果是一样的,就不再重复赘述了。

如果你需要多因素的ANOVA,就会涉及到建立模型等等东西。可以参考:python数据统计分析

卡方检定:卡方检定的样本不一定需要符合正态分布。

卡方检定多用于检定一个样本某两个数据的比值是否存在差异(至少我是这么理解的)。我的论文是关于不同语料库中,两个词相对使用频率的差异。所以我就用了这种检定方法。

例如,现在有3个数据库。然后要通过卡方检定,判断每个语料库里you和we的相对使用情况是否有差异。

a64154818bb79431a207be3c7b6e02c7.png
word_you = [1321, 709, 3655] # 注意是同一个项目放在一个列表里
word_we = [1439, 1128, 2228]

chi2 = [word_you, word_we] # 创建卡方检定用的数据

from scipy.stats import chi2_contingency

chi2_contingency(chi2)

返回结果

(373.8664636208034,
 6.545290707527789e-82,
 2,
 array([[1497.19465649,  996.5023855 , 3191.30295802],
        [1262.80534351,  840.4976145 , 2691.69704198]]))

第一个是效果量,第二个是p值,第三个是自由度,第四个是校准值

像我这种统计初学者的话只用在意前两个结果就好。

效果量,顾名思义就是效果,越大说明效果越明显。

p值什么意思就不多说了。

总而言之,从这个结果来看,三个语料库中,两个单词的相对使用情况是存在显著的有意差的。

大功告成,写报告。

其实Python可以做的数理统计还有很多很多。因为我本身对这数学方面不是特别的熟悉,也不好深究。

所以各位有需求的话可以多去网上搜搜资料就好了,我这里只是最了一个最最最最简单基础的总结罢了。

博客链接:http://fishfishfish.top/p/8

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值