提交 efcbf282 编写于 作者: W wizardforcel

ch12.

上级 3b2d4686
......@@ -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.
先完成此消息的编辑!
想要评论请 注册