python在统计专业的应用_Python统计学statistics实战

本文介绍了Python在统计学中的应用,包括使用pandas进行数据操作、统计检验如t-test和配对实验,以及线性模型的构建。通过案例展示了如何分析性别与IQ分数的关系,以及体重、身高和MRI计数之间的关系。同时,文章还讨论了不同统计方法的适用场景,如使用scatter_matrix和lmplot进行数据可视化。
摘要由CSDN通过智能技术生成

895802-20180417215535185-501042650.png

http://www.kancloud.cn/wizardforcel/scipy-lecture-notes/129877参考

895802-20170422113528290-479597456.png

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值