http://www.kancloud.cn/wizardforcel/scipy-lecture-notes/129877参考
In [1]:
%matplotlib inline
import numpy as np
作者 : Gaël Varoquaux
必要条件
标准Python科学计算环境 (numpy, scipy, matplotlib)
要安装Python及这些依赖,推荐下载Anaconda Python 或 Enthought Canopy, 如果你使用Ubuntu或其他linux更应该使用包管理器。
也可以看一下: Python中的贝叶斯统计
本章并不会涉及贝叶斯统计工具。适用于贝叶斯模型的是PyMC, 在Python中实现了概率编程语言。
为什么统计学要用Python?
R是一门专注于统计学的语言。Python是带有统计学模块的通用编程语言。R比Python有更多的统计分析功能,以及专用的语法。但是,当面对构建复杂的分析管道,混合统计学以及例如图像分析、文本挖掘或者物理实验控制,Python的富有就是物价的优势。
内容
数据表征和交互
数据作为表格
panda data-frame
假设检验: 对比两个组
Student’s t-test: 最简单的统计检验
配对实验: 对同一个体的重复测量
线性模型、多因素和方差分析
用“公式” 来在Python中指定统计模型
多元回归: 包含多元素
事后假设检验: 方差分析 (ANOVA)
更多的可视化: 用seaborn来进行统计学探索
配对图: 散点矩阵
lmplot: 绘制一个单变量回归
交互作用检验
免责声明: 性别问题
本教程中的一些实例选自性别问题。其原因是在这种问题上这种控制的声明实际上影响了很多人。
3.1.1 数据表征和交互
3.1.1.1 数据作为表格
统计分析中我们关注的设定是通过一组不同的属性或特征来描述多个观察或样本。然后这个数据可以被视为2D表格,或矩阵,列是数据的不同属性,行是观察。例如包含在examples/brain_size.csv的数据:
"";"Gender";"FSIQ";"VIQ";"PIQ";"Weight";"Height";"MRI_Count" "1";"Female";133;132;124;"118";"64.5";816932 "2";"Male";140;150;124;".";"72.5";1001121 "3";"Male";139;123;150;"143";"73.3";1038437 "4";"Male";133;129;128;"172";"68.8";965353 "5";"Female";137;132;134;"147";"65.0";951545
3.1.1.2 panda data-frame
我们将会在来自pandas模块的pandas.DataFrame中存储和操作这个数据。它是电子表格程序在Python中的一个等价物。它与2D numpy数据的区别在于列带有名字,可以在列中存储混合的数据类型,并且有精妙的选择和透视表机制。
3.1.1.2.1 创建dataframes: 读取数据文件或转化数组
从CSV文件读取: 使用上面的CSV文件,给出了大脑大小重量和IQ (Willerman et al. 1991) 的观察值 , 数据混合了数量值和类型值:
In [3]:
import pandas
data = pandas.read_csv('examples/brain_size.csv', sep=';', na_values=".")
data
Out[3]:
Unnamed: 0GenderFSIQVIQPIQWeightHeightMRI_Count
0
1
Female
133
132
124
118
64.5
816932
1
2
Male
140
150
124
NaN
72.5
1001121
2
3
Male
139
123
150
143
73.3
1038437
3
4
Male
133
129
128
172
68.8
965353
4
5
Female
137
132
134
147
65.0
951545
5
6
Female
99
90
110
146
69.0
928799
6
7
Female
138
136
131
138
64.5
991305
7
8
Female
92
90
98
175
66.0
854258
8
9
Male
89
93
84
134
66.3
904858
9
10
Male
133
114
147
172
68.8
955466
10
11
Female
132
129
124
118
64.5
833868
11
12
Male
141
150
128
151
70.0
1079549
12
13
Male
135
129
124
155
69.0
924059
13
14
Female
140
120
147
155
70.5
856472
14
15
Female
96
100
90
146
66.0
878897
15
16
Female
83
71
96
135
68.0
865363
16
17
Female
132
132
120
127
68.5
852244
17
18
Male
100
96
102
178
73.5
945088
18
19
Female
101
112
84
136
66.3
808020
19
20
Male
80
77
86
180
70.0
889083
20
21
Male
83
83
86
NaN
NaN
892420
21
22
Male
97
107
84
186
76.5
905940
22
23
Female
135
129
134
122
62.0
790619
23
24
Male
139
145
128
132
68.0
955003
24
25
Female
91
86
102
114
63.0
831772
25
26
Male
141
145
131
171
72.0
935494
26
27
Female
85
90
84
140
68.0
798612
27
28
Male
103
96
110
187
77.0
1062462
28
29
Female
77
83
72
106
63.0
793549
29
30
Female
130
126
124
159
66.5
866662
30
31
Female
133
126
132
127
62.5
857782
31
32
Male
144
145
137
191
67.0
949589
32
33
Male
103
96
110
192
75.5
997925
33
34
Male
90
96
86
181
69.0
879987
34
35
Female
83
90
81
143
66.5
834344
35
36
Female
133
129
128
153
66.5
948066
36
37
Male
140
150
124
144
70.5
949395
37
38
Female
88
86
94
139
64.5
893983
38
39
Male
81
90
74
148
74.0
930016
39
40
Male
89
91
89
179
75.5
935863
分割符 它是CSV文件,但是分割符是”;”
缺失值 CSV中的第二个个体的weight是缺失的。如果我们没有指定缺失值 (NA = not available) 标记符, 我们将无法进行统计分析。
从数组中创建: pandas.DataFrame 也可以视为1D序列, 例如数组或列表的字典,如果我们有3个numpy数组:
In [4]:
import numpy as np
t = np.linspace(-6, 6, 20)
sin_t = np.sin(t)
cos_t = np.cos(t)
In [5]:
pandas.DataFrame({'t': t, 'sin': sin_t, 'cos': cos_t})
Out[5]:
cossint
0
0.960170
0.279415
-6.000000
1
0.609977
0.792419
-5.368421
2
0.024451
0.999701
-4.736842
3
-0.570509
0.821291
-4.105263
4
-0.945363
0.326021
-3.473684
5
-0.955488
-0.295030
-2.842105
6
-0.596979
-0.80