Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenDocCN
data8-textbook-zh
提交
efcbf282
D
data8-textbook-zh
项目概览
OpenDocCN
/
data8-textbook-zh
8 个月 前同步成功
通知
0
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
D
data8-textbook-zh
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
efcbf282
编写于
1月 03, 2018
作者:
W
wizardforcel
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
ch12.
上级
3b2d4686
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
259 addition
and
0 deletion
+259
-0
12.md
12.md
+259
-0
未找到文件。
12.md
浏览文件 @
efcbf282
...
...
@@ -134,3 +134,262 @@ percentile(50, symmetric)
一般来说,如果直方图的一边有尾巴(整数属于是“偏斜的”),那么平均值就会从中间拉到尾巴的方向。
### 示例
`sf2015`
表包含 2015 年旧金山城市员工的薪水和福利数据。与以前一样,我们将我们的分析仅限于那些等价于至少就业半年的人。
```
py
sf2015
=
Table
.
read_table
(
'san_francisco_2015.csv'
).
where
(
'Salaries'
,
are
.
above
(
10000
))
```
我们前面看到了,最高薪资高于 60 万美元,但绝大多数雇员的薪资低于 30 万美元。
```
py
sf2015
.
select
(
'Total Compensation'
).
hist
(
bins
=
np
.
arange
(
10000
,
700000
,
25000
))
```
这个直方图向右偏斜;它的右侧有个尾巴。
平均值拉向了尾巴的方向。 所以我们预计平均薪酬会比中位数大,事实确实如此。
```
py
compensation
=
sf2015
.
column
(
'Total Compensation'
)
percentile
(
50
,
compensation
)
110305.78999999999
np
.
mean
(
compensation
)
114725.98411824222
```
大量总体的收入分布往往是右偏的。 当总体的大部分收入中到低,但很小一部分收入很高时,直方图的右侧有条细长的尾巴。
平均收入受这条尾巴的影响:尾巴向右延伸得越远,平均值就越大。 但中位数不受分布极值的影响。 这就是经济学家经常用收入分布的中位数来代替平均值的原因。
## 可变性
平均值告诉我们直方图平衡的位置。 但是在我们所看到的几乎所有的直方图中,值都位于均值的两边。 他们距离均值有多远? 为了回答这个问题,我们将开发一个关于均值的可变性度量。
我们首先描述如何计算度量值。 然后我们就会明白,为什么这是很好的计算方法。
### 距离均值的偏差的大致大小
为了简单起见,我们将在简单数组
`any_numbers `
的上下文中开始计算,它由四个值组成。 您将会看到,我们的方法非常易于扩展到任何其他数组。
```
py
any_numbers
=
make_array
(
1
,
2
,
2
,
10
)
```
我们的目标是,大致衡量这些数值离他们的平均水平有多远。 为了实现它,我们首先需要均值:
```
py
# Step 1. The average.
mean
=
np
.
mean
(
any_numbers
)
mean
3.75
```
接下来,我们来看看每个数值离均值有多远。 这些被称为到均值的偏差。 “到均值的偏差”只是每个值减去平均值。
`calculation_steps`
表显示了结果。
```
py
# Step 2. The deviations from average.
deviations
=
any_numbers
-
mean
calculation_steps
=
Table
().
with_columns
(
'Value'
,
any_numbers
,
'Deviation from Average'
,
deviations
)
calculation_steps
```
| Value | Deviation from Average |
| --- | --- |
| 1 | -2.75 |
| 2 | -1.75 |
| 2 | -1.75 |
| 10 | 6.25 |
一些偏差是负的;它们对应于低于均值的值。 正的偏差对应于高于平均值的值。
要计算偏差有多大,计算偏差的平均值是很自然的。 但是当所有的偏差加在一起的时候,会发生一些有趣的事:
```
py
sum
(
deviations
)
0.0
```
正的偏差正好和负的偏差抵消。 无论列表的直方图是什么样子,所有的数字列表都是如此:到均值的偏差总和为零。
由于偏差的总和为零,偏差的均值也将为零:
```
py
np
.
mean
(
deviations
)
0.0
```
因此,偏差的均值不是偏差大小的有用度量。 我们真正想知道的是偏差有多大,不管它们是正的还是负的。 所以我们需要一种方法来消除偏差的符号。
有两种历史悠久的丢掉符号的方式:绝对值和平方。 事实证明,采用平方会构建一个度量,带有非常强大的性质,其中一些我们将在这个课程中学习。
所以让我们计算所有偏差的平方,来消除符号。 那么我们将计算平方的均值:
```
py
# Step 3. The squared deviations from average
squared_deviations
=
deviations
**
2
calculation_steps
=
calculation_steps
.
with_column
(
'Squared Deviations from Average'
,
squared_deviations
)
calculation_steps
```
| Value | Deviation from Average | Squared Deviations from Average |
| --- | --- |
| 1 | -2.75 | 7.5625 |
| 2 | -1.75 | 3.0625 |
| 2 | -1.75 | 3.0625 |
| 10 | 6.25 | 39.0625 |
```
py
# Step 4. Variance = the mean squared deviation from average
variance
=
np
.
mean
(
squared_deviations
)
variance
13.1875
```
方差:上面计算的偏差平方的均值称为方差。
虽然方差确实给了我们延展度的概念,但它和原始变量不是一个量纲,因为它的单位是原始变量的平方。 这使得解释非常困难。
所以我们通过计算方差的算术平方根的来返回原来的量纲:
```
py
# Step 5.
# Standard Deviation: root mean squared deviation from average
# Steps of calculation: 5 4 3 2 1
sd
=
variance
**
0.5
sd
3.6314597615834874
```
### 标准差
我们刚计算出来的数量叫做列表的标准差,简写为 SD。 它大致衡量列表中的数字与其平均水平的差距。
定义:列表的 SD 定义为方差(偏差平方的均值)的算术平方根。这很拗口。 但是从左到右阅读,你需要执行一系列的步骤的计算。
计算:上述五个步骤会产生 SD。 您还可以使用函数
`np.std`
来计算数组中值的标准差:
```
py
np
.
std
(
any_numbers
)
3.6314597615834874
```
> 译者注:写在一起就是`np.mean((arr - arr.mean()) ** 2) ** 0.5`。
### 使用 SD
要看看我们可以从SD中学到什么,让我们转向一个比
`any_numbers`
更有趣的数据集。
`nba13`
表包含了 2013 年 NBA 的球员数据。对于每个球员来说,表格中记录了球员通常的位置,他的身高(英寸),体重(磅)和年龄。
```
py
nba13
=
Table
.
read_table
(
'nba2013.csv'
)
nba13
```
| Name | Position | Height | Weight | Age in 2013 |
| --- | --- |
| DeQuan Jones | Guard | 80 | 221 | 23 |
| Darius Miller | Guard | 80 | 235 | 23 |
| Trevor Ariza | Guard | 80 | 210 | 28 |
| James Jones | Guard | 80 | 215 | 32 |
| Wesley Johnson | Guard | 79 | 215 | 26 |
| Klay Thompson | Guard | 79 | 205 | 23 |
| Thabo Sefolosha | Guard | 79 | 215 | 29 |
| Chase Budinger | Guard | 79 | 218 | 25 |
| Kevin Martin | Guard | 79 | 185 | 30 |
| Evan Fournier | Guard | 79 | 206 | 20 |
(省略了 495 行)
这里是球员身高的直方图。
```
py
nba13
.
select
(
'Height'
).
hist
(
bins
=
np
.
arange
(
68
,
88
,
1
))
```
NBA 球员身材高大并不奇怪! 他们的平均身高只有 79 英寸(6'7"),比美国男子的平均身高高出 10 英寸。
```
py
mean_height
=
np
.
mean
(
nba13
.
column
(
'Height'
))
mean_height
79.065346534653472
```
球员的身高距离平均有多远? 这通过身高的 SD 来测量,大约是 3.45 英寸。
```
py
sd_height
=
np
.
std
(
nba13
.
column
(
'Height'
))
sd_height
3.4505971830275546
```
俄克拉荷马雷霆的高个中锋哈希姆·塔比特(Hasheem Thabeet)是最高的球员,身高 87 英寸。
```
py
nba13
.
sort
(
'Height'
,
descending
=
True
).
show
(
3
)
```
| Name | Position | Height | Weight | Age in 2013 |
| --- | --- |
| Hasheem Thabeet | Center | 87 | 263 | 26 |
| Roy Hibbert | Center | 86 | 278 | 26 |
| Tyson Chandler | Center | 85 | 235 | 30 |
(省略了 502 行)
Thabeet 比平均身高高了大约 8 英寸。
```
py
87
-
mean_height
7.9346534653465284
```
这个就是距离均值的偏差,大约是 2.3 乘标准差。
```
py
(
87
-
mean_height
)
/
sd_height
2.2995015194397923
```
换句话说,最高球员的身高比均值高了 2.3 个 SD。
以赛亚·托马斯(Isaiah Thomas)身高 69 英寸,是 2013 年 NBA 最矮的球员之一。他的身高比均值低了 2.9 个 SD。
```
py
nba13
.
sort
(
'Height'
).
show
(
3
)
```
| Name | Position | Height | Weight | Age in 2013 |
| --- | --- |
| Isaiah Thomas | Guard | 69 | 185 | 24 |
| Nate Robinson | Guard | 69 | 180 | 29 |
| John Lucas III | Guard | 71 | 157 | 30 |
(省略了 502 行)
```
py
(
69
-
mean_height
)
/
sd_height
-
2.9169868288775844
```
我们观察到,最高和最矮的球员都距离平均身高只有几个标准差。 这是例子,说明了为什么 SD 是延展性的有效度量。无论直方图的形状如何,平均值和 SD 一起告诉你很多东西,关于直方图在数轴上的位置。
### 使用 SD 度量延展性的最主要原因
非正式声明:在所有的数值数据集中,大部分条目都在“均值加减几个标准差”的范围内。
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录