提交 3b473451 编写于 作者: W wizardforcel

ch6.

上级 74fd2891
# 六、可视化
表格是一种组织和可视化数据的强大方式。然而,无论数据如何组织,数字的大型表格可能难以解释。 有时解释图片比数字容易得多。
在本章中,我们将开发一些数据分析的基本图形方法。 我们的数据源是[互联网电影数据库](http://www.imdb.com/)(IMDB),这是一个在线数据库,包含电影,电视节目,和视频游戏等信息。[Box Office Mojo](http://www.boxofficemojo.com/) 网站提供了许多 IMDB 数据摘要,我们已经采用了其中一些。 我们也使用了 [The Numbers](http://www.the-numbers.com/) 的数据摘要,这个网站的口号是“数据和电影业务的相遇之处”。
## 散点图和线形图
`actors`表包含好莱坞的男性和女性演员的数据。 其中的列是:
| 列 | 内容 |
| --- | --- |
| Actor | 演员名称 |
| Total Gross | 演员所有电影的国内票房总收入(百万美元) |
| Number of Movies | 演员所演的电影数量 |
| Average per Movie | 总收入除以电影数量 |
| #1 Movie | 演员所演的票房最高的电影 |
| Gross | 演员的 #1 电影的国内票房总收入(百万美元) |
在总票房的计算中,数据的制表人没有包括一些电影,其中演员是客串角色或陈述角色,没有太多的登场时间。
这个表格有 50 行,对应着 50 个最顶级的演员。 这个表已经按照`Total Gross`排序了,所以很容易看出,`Harrison Ford`是最棒的演员。 总的来说,他的电影的国内票房收入比其他演员的电影多。
```py
actors = Table.read_table('actors.csv')
actors
```
| Actor | Total Gross | Number of Movies | Average per Movie | #1 Movie | Gross |
| --- | --- | --- | --- | --- | --- |
| Harrison Ford | 4871.7 | 41 | 118.8 | Star Wars: The Force Awakens | 936.7 |
| Samuel L. Jackson | 4772.8 | 69 | 69.2 | The Avengers | 623.4 |
| Morgan Freeman | 4468.3 | 61 | 73.3 | The Dark Knight | 534.9 |
| Tom Hanks | 4340.8 | 44 | 98.7 | Toy Story 3 | 415 |
| Robert Downey, Jr. | 3947.3 | 53 | 74.5 | The Avengers | 623.4 |
| Eddie Murphy | 3810.4 | 38 | 100.3 | Shrek 2 | 441.2 |
| Tom Cruise | 3587.2 | 36 | 99.6 | War of the Worlds | 234.3 |
| Johnny Depp | 3368.6 | 45 | 74.9 | Dead Man's Chest | 423.3 |
| Michael Caine | 3351.5 | 58 | 57.8 | The Dark Knight | 534.9 |
| Scarlett Johansson | 3341.2 | 37 | 90.3 | The Avengers | 623.4 |
(已省略 40 行)
术语。变量是我们称之为“特征”的东西的正式名称,比如`'number of movies'`。 术语“变量”强调了,对于不同的个体,这个特征可以有不同的值 - 演员所演电影的数量因人而异。
拥有数值的变量(如`'number of movies'``'average gross receipts per movie'`)的变量称为定量或数值变量。
### 散点图
散点图展示两个数值变量之间的关系。 在前面的章节中,我们看到了一个散点图的例子,我们看了两个经典小说的时间段和角色数量。
`Table``scatter`方法绘制一个散点图,由表格的每一行组成。它的第一个参数是要在横轴上绘制的列标签,第二个参数是纵轴上的列标签。
```py
actors.scatter('Number of Movies', 'Total Gross')
```
散点图包含 50 个点,表中的每个演员为一个。 一般来说,你可以看到它向上倾斜。 一个演员的电影越多,所有这些电影的总收入就越多。
在形式上,我们说图表显示了变量之间的关联,并且关联是正的:一个变量的高值往往与另一个变量的高值相关联,而低值也是一样,通常情况下。
当然有一些变化。 一些演员有很多电影,但总收入中等。 其他人电影数量中等,但收入很高。正相关只是一个大体趋势的叙述。
在课程后面,我们将学习如何量化关联。目前,我们只是定性地思考。
现在我们已经探索了电影的数量与总收入的关系,让我们把注意力转向它与每部电影的平均收入的关系。
```py
actors.scatter('Number of Movies', 'Average per Movie')
```
这是一个截然不同的情况,并表现出负相关。 一般来说,演员的电影数量越多,每部电影的平均收入就越少。
另外,有一个点是非常高的,在绘图的左边。 它对应于一个电影数量很少,每部电影平均值很高的演员。 这个点是异常的。 它位于数据的一般范围之外。 事实上,这与绘图中的其他所有点相差甚远。
我们将通过查看绘图的左右两端的点,来进一步检查负相关。
对于右端,我们通过查看没有异常值的部分来放大图的主体。
```py
no_outlier = actors.where('Number of Movies', are.above(10))
no_outlier.scatter('Number of Movies', 'Average per Movie')
```
负相关仍然清晰可见。 让我们找出一些演员,对应位于绘图右侧的点,这里电影数量较多:
```py
actors.where('Number of Movies', are.above(60))
```
| Actor | Total Gross | Number of Movies | Average per Movie | #1 Movie | Gross |
| --- | --- | --- | --- | --- | --- |
| Samuel L. Jackson | 4772.8 | 69 | 69.2 | The Avengers | 623.4 |
| Morgan Freeman | 4468.3 | 61 | 73.3 | The Dark Knight | 534.9 |
| Robert DeNiro | 3081.3 | 79 | 39 | Meet the Fockers | 279.3 |
| Liam Neeson | 2942.7 | 63 | 46.7 | The Phantom Menace | 474.5 |
伟大的演员罗伯特·德尼罗(Robert DeNiro)拥有最高的电影数量和最低的每部电影的平均收入。 其他优秀的演员在不远处的点,但德尼罗在极远处。
为了理解负相关,请注意,演员所演的电影越多,在风格,流派和票房方片,这些电影变化就越大。 例如,一个演员可能会出现在一些高收入的动作电影或喜剧中(如 Meet Fockers),也可能是优秀但不会吸引大量人群的小众电影。 因此,演员的每部电影的平均收入值可能相对较低。
为了从不同的角度来看待这个观点,现在让我们来看看这个异常点。
```py
actors.where('Number of Movies', are.below(10))
```
| Actor | Total Gross | Number of Movies | Average per Movie | #1 Movie | Gross |
| --- | --- | --- | --- | --- | --- |
| Anthony Daniels | 3162.9 | 7 | 451.8 | Star Wars: The Force Awakens | 936.7 |
作为一名演员,安东尼·丹尼尔斯(Anthony Daniels)可能没有罗伯特·德尼罗(Robert DeNiro)的身材。 但是他的 7 部电影的平均收入却高达每部电影近 4.52 亿美元。
这些电影是什么? 你可能知道《星球大战:C-3PO》中的 Droid C-3PO,那是金属机甲里面的安东尼·丹尼尔斯。 他扮演 C-3PO。
丹尼尔斯先生的全部电影(除了客串)都是由高收入的“星球大战”系列电影组成的。 这就解释了他的高平均收入和低电影数量。
类型和制作预算等变量,会影响电影数量与每部电影的平均收入之间的关联。 这个例子提醒人们,研究两个变量之间的关联,往往也涉及到了解其他相关的变量。
## 线形图
线形图是最常见的可视化图形之一,通常用于研究时序型的趋势和模式。
`movies_by_year`表包含了 1980 年到 2015 年间,美国电影公司制作的电影的数据。这些列是:
| 列 | 内容 |
| --- | --- |
| Year | 年份 |
| Total Gross | 所有发行电影的国内总票房收入(以百万美元为单位) |
| Number of Movies | 发行的电影数量 |
| #1 Movie | 收入最高的电影 |
```py
movies_by_year = Table.read_table('movies_by_year.csv')
movies_by_year
```
| Year | Total Gross | Number of Movies | #1 Movie |
| --- | --- | --- | --- |
| 2015 | 11128.5 | 702 | Star Wars: The Force Awakens |
| 2014 | 10360.8 | 702 | American Sniper |
| 2013 | 10923.6 | 688 | Catching Fire |
| 2012 | 10837.4 | 667 | The Avengers |
| 2011 | 10174.3 | 602 | Harry Potter / Deathly Hallows (P2) |
| 2010 | 10565.6 | 536 | Toy Story 3 |
| 2009 | 10595.5 | 521 | Avatar |
| 2008 | 9630.7 | 608 | The Dark Knight |
| 2007 | 9663.8 | 631 | Spider-Man 3 |
| 2006 | 9209.5 | 608 | Dead Man's Chest |
(省略了 26 行)
`Table``plot`方法产生线形图。 它的两个参数与散点图相同:首先是横轴上的列,然后是纵轴上的列。 这是 1980 年到 2015 年间每年发行的电影数量的线形图。
```py
movies_by_year.plot('Year', 'Number of Movies')
```
虽然每年的数字都有明显的变化,但图形急剧上升,然后呈现平缓的上升趋势。 20 世纪 80 年代早期的剧增,部分是由于在上世纪 70 年代,电影制作人推动电影业的几年后,电影制片厂重新回到电影制作的前沿。
我们的重点将放在最近几年。 根据电影的主题,对应 2000 年到 2015 年的行,分配给名称`century_21`
```py
century_21 = movies_by_year.where('Year', are.above(1999))
century_21.plot('Year', 'Number of Movies')
```
2008 年的全球金融危机有明显的效果 - 2009 年发行的电影数量急剧下降。
但是,美元数量并没有太大的变化。
```py
century_21.plot('Year', 'Total Gross')
```
尽管发生了金融危机,电影发行的数量也少得多,但 2009 年的国内总收入仍高于 2008 年。
造成这种矛盾的一个原因是,人们在经济衰退时往往会去看电影。 “经济低迷时期,美国人涌向电影”,“纽约时报”于 2009 年 2 月说。文章引用南加州大学的马丁·卡普兰(Martin Kaplan)的话说:“人们想要忘记自己的烦恼,想和别人在一起。” 当节假日和昂贵的款待难以负担,电影提供了受欢迎的娱乐和宽慰。
2009 年的高票房收入的另一个原因是,电影《阿凡达》及其 3D 版本。 阿凡达不仅是 2009 年的第一部电影,它也是有史以来第二高的总票房电影,我们将在后面看到。
```py
century_21.where('Year', are.equal_to(2009))
```
| Year | Total Gross | Number of Movies | #1 Movie |
| --- | --- | --- | --- |
| 2009 | 10595.5 | 521 | Avatar |
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册