##概念

  • 均值
    $$ \mu = \frac1n\sum_i^nx_i $$
    描述样本的典型值或者集中趋势

  • 方差
    $$ \sigma^2=\frac1n \sum_i^n(x_i-\mu)^2 $$
    描述样本的分散情况

  • 统计显著性(statistically significant)
    若一个直观效应不太可能是由随机因素引起的,就是统计显著的

分布

汇总统计量简单明了,但是风险也大,因为他们很有可能会掩盖数据的真想。另一种方法就是看数据的分布(distribution),它描述了各个值出现的频繁程度。

表示分布最常用的方法是直方图(histogram),这种图用于展示各个值出现的频数或者概率。

在这里,*频数*指的是数据集中一个值出现的次数,*概率*就是频数除以样本数量。    

在python中,计算频数最简单的办法就是用字典。给一个序列t:
1
2
3
hist = {}
for x in t:
hist[x] = hist.get(x, 0) + 1

得到的结果是一个将值映射到其频数的字典。将其除以 $n$ 即可把频数转换成概率,这称为归一化

1
2
3
4
n = float(len(t))
pmf = {}
for x, freq in hist.items():
pmf[x] = freq/n

归一化后的直方图成为PMF(probability Mass Function),概率质量函数,这个函数是值到其概率的映射。


直方图的表示

编写一个Pmf的模块,定义了表示直方图的Hist对象,以及表示PMF的Pmf对象。Pmf.py

1
2
3
import Pmf
hist = Pmf.MakeHistFromList([1,1,1,2])
print hist

绘制直方图

python 中有不少画图的包,可以使用复杂的matplotlib,当然也有简单的seaborn
    
使用matplotlib中的pyplot画:

1
2
3
4
5
6
import Pmf
from matplotlib import pyplot
hist = Pmf.MakeHistFromList([1,2,2,2,2,2,2,4,4,4,4,5])
vals,freqs = hist.Render()
rectangles = pyplot.bar(vals,freqs)
pyplot.show()

此处输入图片的描述

作者写了一个绘制图表的函数myplot.文档:文档.

1
2
3
4
5
6
7
8
9
10
11
12
13
from matplotlib import pyplot
def plotBabiesHist(data_dir='.'):
table,firsts,others = first.MakeTables(data_dir)
firsts_l = [p.prglength for p in firsts.records]
others_l = [p.prglength for p in others.records]
firsts_h = Pmf.MakeHistFromList(firsts_l)
others_h = Pmf.MakeHistFromList(others_l)
fst_v,fst_f = firsts_h.Render()
oth_v,oth_f = others_h.Render()
pyplot.bar(fst_v,fst_f)
pyplot.bar(oth_v,oth_f)
pyplot.show()

7

Comments

2015-05-21

⬆︎TOP